[PYTHON] Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]

Hallo Licht. Folgen Sie hier, Deep Learning Tutorial Kapitel 3 Beschreibt die Zeichenerkennung anhand eines Modells.

Vorbereitung

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) a.png

Anerkennung

Platzieren Sie das vorherige Bild "A" (a.png) im selben Verzeichnis wie model16. lets_recognize.png

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.

arg_aaaa.png

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 a2.png Anerkennung

python hiraganaNN_predictor.py --img a2.png --model model16

Ergebnis

**Endgültiges Urteil Neuronennummer:1, Unicode:3042,Hiragana:Ah**

a3.png 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.

Handschriftliche Hiragana-Zeichenerkennung

Versuchen wir es mit einer etwas schwierigeren Erkennung, da dies die richtige Antwort ist. Lassen Sie uns das handgeschriebene "A" erkennen. a_tegaki.png

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.

Quellcode-Übersicht

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

Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]
Einführung in Deep Learning zum ersten Mal (Chainer) Erkennung japanischer Zeichen Kapitel 1 [Umgebungskonstruktion]
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 4 [Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten]
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
So verwenden Sie MkDocs zum ersten Mal
Implementierung eines Deep Learning-Modells zur Bilderkennung
Ich habe den Deep Learning Framework Chainer installiert
Versuchen Sie zum ersten Mal, in Qiita zu posten
Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Einführung in die Bayes'sche Modellierung mit pymc3 Bayesianische Modellierung in Python Japanische Übersetzung (Kapitel 0-2)
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich möchte vorerst eine Docker-Datei erstellen.
Wenn Sie zum ersten Mal Linux lernen, tun Sie dies!
Erster Kaggle (Kaggle ①)
Kaguru zum ersten Mal
Einführung in Deep Learning ~ Lernregeln ~
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Einführung in Deep Learning ~ Backpropagation ~
Kapitel 1 Einführung in Python Schneiden Sie nur die guten Punkte des Deeplearning aus, die von Grund auf neu erstellt wurden
Unterschiede, die C # -Ingenieure beim ersten Erlernen von Python verspürten
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Raspberry Pi --1 - Zum ersten Mal (Schließen Sie einen Temperatursensor an, um die Temperatur anzuzeigen)
Einführung in Deep Learning (2) - Versuchen Sie Ihre eigene nichtlineare Regression mit Chainer-
Zusammenfassung der Seiten, die zum Studium des Deep Learning Framework Chainer nützlich sind
Geben Sie das Know-how bekannt, das einen ähnlichen Bildsuchdienst für AV-Schauspielerinnen durch tiefes Lernen durch Chainer geschaffen hat
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Einführung in Deep Learning ~ Codierungsvorbereitung ~
[Hi Py (Teil 1)] Ich möchte vorerst etwas machen, also setze zuerst ein Ziel.
Siehe Python zum ersten Mal
Starten Sie Django zum ersten Mal
Erstellen eines Lernmodells mit MNIST
Einführung in Deep Learning ~ Dropout Edition ~
Einführung in Deep Learning ~ Forward Propagation ~
Einführung in Deep Learning ~ CNN Experiment ~
Wie man für den Deep Learning Association G-Test (für Anfänger) lernt [Version 2020]
[Einführung in das maschinelle Lernen] Bis Sie den Beispielcode mit Chainer ausführen
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Bis die Deep Learning-Umgebung (TensorFlow) mit GPU für Ubuntu 14.04 vorbereitet ist
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Ich habe zum ersten Mal Tensorflow ausprobiert