Hallo Licht. Folgen Sie hier, Deep Learning Tutorial Kapitel 3 Beschreibt die Zeichenerkennung anhand eines Modells.
Wir werden Modell 16 verwenden, das durch maschinelles Lernen von Deep Learning in Kapitel 2 generiert wurde. Lassen Sie uns zunächst ein Bild von Hira Kana vorbereiten. Eigentlich ist die mit der Schriftart, die nicht in den zum Lernen verwendeten Daten enthalten ist, gut, aber es ist schwierig, sie zu finden. Bereiten Sie sie daher für Text vor.
Wenn Sie Probleme haben, es zu finden, laden Sie bitte das folgende Bild herunter und verwenden Sie es. (Ich habe "A" in OneNote geschrieben und es als Bild ausgeschnitten)
Platzieren Sie das vorherige Bild "A" (a.png) im selben Verzeichnis wie model16.
Geben Sie den folgenden Befehl vom Terminal aus ein
python hiraganaNN_predictor.py --img a.png --model model16
Dann in der Ausgabe
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:10, Unicode:304b,Hiragana:Oder
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:78, Unicode:308f,Hiragana:Beeindruckend
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
**Endgültiges Urteil Neuronennummer:1, Unicode:3042,Hiragana:Ah**
Das Vorhersageergebnis kam heraus. Obwohl es unter den Kandidaten "ka" und "wa" gibt, ist die Ausgabe des endgültigen Urteils "a", so dass die Anerkennung erfolgreich ist. Dieser Kandidat ist das Erkennungsergebnis jedes Bildes, wenn ein Bild auf mehrere (14 Bilder) vergrößert wird. Das endgültige Urteil ist der Durchschnitt jedes Erkennungsergebnisses.
TTA (Test Time Argumentation), dass dies nicht aus einem Bild beurteilt wird, sondern aus verschiedenen Winkeln, um die Erkennungsgenauigkeit zu verbessern. Es ist das gleiche Konzept wie die Methode. Versuchen Sie auch andere Wahrnehmungen.
a2.png Anerkennung
python hiraganaNN_predictor.py --img a2.png --model model16
Ergebnis
**Endgültiges Urteil Neuronennummer:1, Unicode:3042,Hiragana:Ah**
a3.png Anerkennung
python hiraganaNN_predictor.py --img a2.png --model model16
Ergebnis
**Endgültiges Urteil Neuronennummer:1, Unicode:3042,Hiragana:Ah**
Es ist in Ordnung.
Versuchen wir es mit einer etwas schwierigeren Erkennung, da dies die richtige Antwort ist. Lassen Sie uns das handgeschriebene "A" erkennen.
Um ehrlich zu sein, ist es unvernünftig, aber lass es uns einfach tun.
python hiraganaNN_predictor.py --img a_tegaki.png --model model16
Starten Sie die Erkennung mit
Kandidat Neuronennummer:71, Unicode:3088,Hiragana:Yo
Kandidat Neuronennummer:30, Unicode:305f,Hiragana:Ta
Kandidat Neuronennummer:71, Unicode:3088,Hiragana:Yo
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:24, Unicode:3059,Hiragana:Su
Kandidat Neuronennummer:71, Unicode:3088,Hiragana:Yo
Kandidat Neuronennummer:30, Unicode:305f,Hiragana:Ta
Kandidat Neuronennummer:24, Unicode:3059,Hiragana:Su
Kandidat Neuronennummer:32, Unicode:3061,Hiragana:Chi
Kandidat Neuronennummer:32, Unicode:3061,Hiragana:Chi
Kandidat Neuronennummer:24, Unicode:3059,Hiragana:Su
Kandidat Neuronennummer:30, Unicode:305f,Hiragana:Ta
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
**Endgültiges Urteil Neuronennummer:32, Unicode:3061,Hiragana:Chi**
Es ist ein Misserfolg! Lol Es gibt ein kleines "A" als Kandidat, aber es war nicht gut, weil es die endgültige Entscheidung "Chi" war. Nun, Modell 16 hat einen Verlust von 0,526, und ich habe es in gedruckter Form gelernt, also ist es so. Wenn Sie es jedoch mit einem Modell versuchen, dessen Verlust auf 0,237 reduziert ist, wenden Sie in den folgenden Kapiteln einige Verbesserungsmaßnahmen an
python hiraganaNN_predictor.py --img a2.png --model loss237model
Kandidat Neuronennummer:30, Unicode:305f,Hiragana:Ta
Kandidat Neuronennummer:52, Unicode:3075,Hiragana:Fu
Kandidat Neuronennummer:52, Unicode:3075,Hiragana:Fu
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:32, Unicode:3061,Hiragana:Chi
Kandidat Neuronennummer:71, Unicode:3088,Hiragana:Yo
Kandidat Neuronennummer:52, Unicode:3075,Hiragana:Fu
Kandidat Neuronennummer:9, Unicode:304a,Hiragana:Oh
Kandidat Neuronennummer:52, Unicode:3075,Hiragana:Fu
Kandidat Neuronennummer:9, Unicode:304a,Hiragana:Oh
Kandidat Neuronennummer:1, Unicode:3042,Hiragana:Ah
Kandidat Neuronennummer:9, Unicode:304a,Hiragana:Oh
Kandidat Neuronennummer:10, Unicode:304b,Hiragana:Oder
**Endgültiges Urteil Neuronennummer:1, Unicode:3042,Hiragana:Ah**
Ich kann es richtig erkennen (obwohl es kaum ist)! Grundsätzlich haben wir Druckdaten als Lerndaten für maschinelles Lernen verwendet, aber es ist ein Modell, das die Handschrift ein wenig erkennen kann. Da die Kandidaten dies versehentlich erkennen, können wir die Nützlichkeit von TTA erkennen.
Apropos Es gibt 3 "A" und 4 "Fu" als Kandidaten. Warum ist die endgültige Entscheidung "A"? Wenn Sie denken, ist es fantastisch! Wir treffen hier jedoch keine einfache Mehrheitsentscheidung. Wir prüfen die Ergebnisse sicherer Entscheidungen. Mit anderen Worten, während alle vier "fu" von Ayafuya vorhergesagt wurden, waren drei "A" zuversichtlich, so dass das endgültige Urteil als "A" beurteilt werden konnte.
Zum Schluss noch eine Übersicht über den Quellcode. Meist das gleiche wie hiraganaNN.py, das für maschinelles Lernen verwendet wird.
def forward(x_data, train=False):
x = chainer.Variable(x_data, volatile=not train)
h = F.max_pooling_2d(F.relu(model.bn1(model.conv1(x))), 2)
h = F.max_pooling_2d(F.relu(model.bn2(model.conv2(h))), 2)
h = F.max_pooling_2d(F.relu(model.conv3(h)), 2)
h = F.dropout(F.relu(model.fl4(h)), train=train)
y = model.fl5(h)
return y.data
Dies ist die neuronale Netzstruktur von Deep Learning und sollte dieselbe Struktur haben wie die von hiraganaNN.py.
src = cv2.imread(args.img, 0)
src = cv2.copyMakeBorder(
src, 20, 20, 20, 20, cv2.BORDER_CONSTANT, value=255)
src = cv2.resize(src, (IMGSIZE, IMGSIZE))
Lesen Sie das Eingabebild und ändern Sie die Größe auf die Bildgröße 64 * 64. Außerdem hat das Bild einen Rand von jeweils 20 Pixeln. Mit dem aktuellen Modell kann es nur dann gut erkannt werden, wenn die Marge angemessen ist.
for x in xrange(0, 14):
dst = dargs.argumentation([2, 3])
ret, dst = cv2.threshold(dst,
23,
255,
cv2.THRESH_BINARY)
#Zur Bildbestätigung
#cv2.imshow('ARGUMENTATED', dst)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
xtest = np.array(dst).astype(np.float32).reshape(
(1, 1, IMGSIZE, IMGSIZE)) / 255
if result is None:
result = forward(xtest)
else:
result = result + forward(xtest)
Nach dem Vergrößern und Binärisieren der Daten des Eingabebildes wird der Pixelwert auf 0-1 normiert und durch die Vorwärtsfunktion vorhergesagt.
tmp = np.argmax(forward(xtest))
for strunicode, number in unicode2number.iteritems():
if number == tmp:
hiragana = unichr(int(strunicode, 16))
print 'Kandidat Neuronennummer:{0}, Unicode:{1},Hiragana:{2}'.format(number, strunicode, hiragana.encode('utf_8'))
Das Erkennungsergebnis des neuronalen Netzes (Nummer 0-82) wird in Unicode umgewandelt und als Hiragana ausgegeben. Kapitel 3 endet hier. In Kapitel 4 werden wir ein Bild auf 3500 vergrößern, um die Genauigkeit zu überprüfen.
Kapitel | Titel |
---|---|
Kapitel 1 | Aufbau einer Deep-Learning-Umgebung basierend auf Chainer |
Kapitel 2 | Erstellen eines Deep Learning-Vorhersagemodells durch maschinelles Lernen |
Kapitel 3 | Zeichenerkennung anhand eines Modells |
Kapitel 4 | Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten |
Kapitel 5 | Einführung in das neuronale Netz und Erklärung des Quellcodes |
Kapitel 6 | Verbesserung der Lerneffizienz durch Auswahl von Optimizer |
Kapitel 7 | TTA,Verbesserung der Lerneffizienz durch Chargennormalisierung |
Recommended Posts