Was ist die Connectionist Temporal Classification (CTC)?

15

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.

Ryan Zotti
quelle
3
Ich empfehle Ihnen, das Originalpapier zu lesen: Graves et al. (2006) Connectionist Temporal Classification: Kennzeichnung nicht segmentierter Sequenzdaten mit wiederkehrenden neuronalen Netzen, Tagungsband der 23. Internationalen Konferenz über maschinelles Lernen ( pdf ).
Neo Li

Antworten:

28

Sie haben einen Datensatz mit:

  • Bilder I1, I2, ...
  • Grundwahrheitstexte T1, T2, ... für die Bilder I1, I2, ...

Ihr Datensatz könnte also ungefähr so ​​aussehen:

Bildbeschreibung hier eingeben

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:

  • Sie können das Netzwerk aus Paaren (I, T) trainieren, ohne anhand des CTC-Verlusts angeben zu müssen, an welcher Position ein Zeichen auftritt
  • Sie müssen die Ausgabe nicht nachbearbeiten, da ein CTC-Decoder die NN-Ausgabe in den endgültigen Text umwandelt

Wie wird das erreicht?

  • Geben Sie ein Sonderzeichen ein (CTC-Leerzeichen, in diesem Text als "-" bezeichnet), um anzuzeigen, dass zu einem bestimmten Zeitpunkt kein Zeichen angezeigt wird
  • Ändern Sie den Grundwahrheitstext T bis T ', indem Sie CTC-Leerzeichen einfügen und Zeichen auf alle möglichen Arten wiederholen
  • Wir kennen das Bild, wir kennen den Text, aber wir wissen nicht, wo der Text positioniert ist. Versuchen wir also einfach alle möglichen Positionen des Textes "Hi ----", "-Hi ---", "--Hi--", ...
  • Wir wissen auch nicht, wie viel Platz jedes Zeichen im Bild einnimmt. Versuchen wir also auch alle möglichen Ausrichtungen, indem wir zulassen, dass Zeichen wie "HHi ----", "HHHi ---", "HHHHi-", ... wiederholt werden.
  • siehst du hier ein problem? Wenn wir zulassen, dass sich ein Zeichen mehrmals wiederholt, wie gehen wir dann mit echten doppelten Zeichen wie dem "l" in "Hallo" um? Fügen Sie in diesen Situationen einfach immer ein Leerzeichen dazwischen ein, z. B. "Hel-lo" oder "Heeellll ------- llo".
  • Berechne die Punktzahl für jedes mögliche T '(dh für jede Transformation und jede Kombination davon), summiere über alle Punktzahlen, die den Verlust für das Paar ergeben (I, T).
  • Das Entschlüsseln ist ganz einfach: Wählen Sie für jeden Zeitschritt ein Zeichen mit der höchsten Punktzahl aus, z sind fertig.

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.

Bildbeschreibung hier eingeben

Weitere Lektüre:

Harry
quelle
Zumindest für mich ist es ein wenig verwirrend, was Sie anfänglich mit " Grundwahrheitstext für jedes Bild T1, T2, ..." meinen . Sie sollten damit beginnen, es zu erklären. Wenn Sie mit den Konzepten nicht vertraut sind, ist auch nicht klar, was Sie unter "Ein neuronales Netzwerk (NN) gibt eine Punktzahl für jede mögliche horizontale Position (Zeitschritt t) des Bildes aus" verstehen. Wie kommt es, dass ein Bild Zeitschritte hat? Zusammenfassend scheinen einige Ihrer anfänglichen Aussagen davon auszugehen, dass Ihnen einige Konzepte bekannt sind, die später in derselben Antwort verstanden werden. Sie sollten diese Konzepte jedoch klarstellen.
Nr.
Danke für die Rückmeldung. Ich habe eine Illustration zum Datensatz hinzugefügt und die Beschreibung verbessert. Ferner bedeutet der Begriff Zeitschritt einfach "horizontale Position" oder x-Koordinate im Kontext der Texterkennung. Der Begriff stammt höchstwahrscheinlich aus der Spracherkennung (eine ähnliche Aufgabe), bei der sich der Zeitschritt auf die zeitliche Position im Audiosignal bezieht.
Harry