Ich möchte ein Projekt zur optischen Zeichenerkennung (OCR) durchführen. Nach einigen Recherchen bin ich auf eine Architektur gestoßen, die interessant erscheint: CNN + RNN + CTC. Ich bin mit verschachtelten neuronalen Netzen (CNN) und wiederkehrenden neuronalen Netzen (RNN) vertraut, aber was ist Connectionist Temporal Classification (CTC)? Ich hätte gerne eine Erklärung für Laien.
machine-learning
deep-learning
conv-neural-network
rnn
Ryan Zotti
quelle
quelle
Antworten:
Sie haben einen Datensatz mit:
Ihr Datensatz könnte also ungefähr so aussehen:
Ein neuronales Netzwerk (NN) gibt eine Punktzahl für jede mögliche horizontale Position ( in der Literatur häufig als Zeitschritt t bezeichnet) des Bildes aus. Dies sieht für ein Bild mit der Breite 2 (t0, t1) und 2 möglichen Zeichen ("a", "b") ungefähr so aus:
| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4
Um eine solche NN zu trainieren, müssen Sie für jedes Bild angeben, wo ein Zeichen des Grundwahrheitstextes im Bild positioniert ist. Stellen Sie sich als Beispiel ein Bild vor, das den Text "Hallo" enthält. Sie müssen jetzt angeben, wo das "H" beginnt und endet (z. B. "H" beginnt am 10. Pixel und geht bis zum 25. Pixel). Das gleiche gilt für "e", "l, ... Das klingt langweilig und ist eine harte Arbeit für große Datenmengen.
Auch wenn Sie es geschafft haben, einen vollständigen Datensatz auf diese Weise mit Anmerkungen zu versehen, gibt es ein anderes Problem. Die NN gibt die Punktzahlen für jeden Charakter zu jedem Zeitschritt aus. Ein Spielzeugbeispiel finden Sie in der Tabelle, die ich oben gezeigt habe. Wir könnten jetzt die wahrscheinlichste Figur pro Zeitschritt nehmen, dies ist "b" und "a" im Spielzeugbeispiel. Stellen Sie sich nun einen größeren Text vor, zB "Hallo". Wenn der Schreiber einen Schreibstil hat, der in horizontaler Position viel Platz beansprucht, würde jedes Zeichen mehrere Zeitschritte einnehmen. Nimmt man das wahrscheinlichste Zeichen pro Zeitschritt, könnte dies einen Text wie "HHHHHHHHHeeeellllllllloooo" ergeben. Wie sollen wir diesen Text in die richtige Ausgabe umwandeln? Jedes doppelte Zeichen entfernen? Dies ergibt "Helo", was nicht korrekt ist. Wir brauchen also eine clevere Nachbearbeitung.
CTC löst beide Probleme:
Wie wird das erreicht?
Schauen Sie sich zur Veranschaulichung das folgende Bild an. Es ist im Kontext der Spracherkennung jedoch die Texterkennung genauso. Die Dekodierung ergibt für beide Lautsprecher den gleichen Text, auch wenn Ausrichtung und Position des Zeichens unterschiedlich sind.
Weitere Lektüre:
quelle