Che cos'è la classificazione temporale dei connessionisti (CTC)?


15

Sto cercando di realizzare un progetto di riconoscimento ottico dei caratteri (OCR). Dopo aver fatto qualche ricerca mi sono imbattuto in un'architettura che sembra interessante: CNN + RNN + CTC. Ho familiarità con le reti neurali contorte (CNN) e le reti neurali ricorrenti (RNN), ma cos'è la classificazione temporale dei connessionisti (CTC)? Vorrei una spiegazione in termini di profani.


3
Vi consiglio di leggere il documento di origine: Graves, et al. (2006) Classificazione temporale connessionista: etichettatura dei dati di sequenza non segmentati con reti neurali ricorrenti, atti della 23a conferenza internazionale sull'apprendimento automatico ( pdf ).
neo li,

Risposte:


28

Hai un set di dati contenente:

  • immagini I1, I2, ...
  • testi di verità di base T1, T2, ... per le immagini I1, I2, ...

Quindi il tuo set di dati potrebbe assomigliare a questo:

inserisci qui la descrizione dell'immagine

Una rete neurale (NN) genera un punteggio per ogni possibile posizione orizzontale (spesso chiamata fase temporale t in letteratura) dell'immagine. È simile a questo per un'immagine con larghezza 2 (t0, t1) e 2 caratteri possibili ("a", "b"):

| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4

Per addestrare un tale NN, è necessario specificare per ogni immagine in cui un carattere del testo di verità di terra è posizionato nell'immagine. Ad esempio, pensa a un'immagine che contiene il testo "Ciao". Ora devi specificare dove inizia e finisce la "H" (es. "H" inizia dal decimo pixel e arriva fino al venticinquesimo pixel). Lo stesso per "e", "l, ... Sembra noioso ed è un duro lavoro per grandi set di dati.

Anche se in questo modo sei riuscito ad annotare un set di dati completo, c'è un altro problema. L'NN genera i punteggi per ciascun personaggio in ogni fase, vedere la tabella che ho mostrato sopra per un esempio di giocattolo. Ora potremmo prendere il personaggio più probabile per ogni passaggio temporale, questo è "b" e "a" nell'esempio giocattolo. Ora pensa a un testo più grande, ad esempio "Ciao". Se lo scrittore ha uno stile di scrittura che utilizza molto spazio in posizione orizzontale, ogni personaggio occuperebbe più fasi temporali. Prendendo il personaggio più probabile per passo temporale, questo potrebbe darci un testo come "HHHHHHHHeeeellllllllloooo". Come dovremmo trasformare questo testo nell'output corretto? Rimuovere ogni personaggio duplicato? Questo produce "Helo", che non è corretto. Quindi avremmo bisogno di un postelaborazione intelligente.

CTC risolve entrambi i problemi:

  • puoi addestrare la rete dalle coppie (I, T) senza dover specificare in quale posizione si verifica un personaggio usando la perdita CTC
  • non è necessario postelaborare l'output, poiché un decodificatore CTC trasforma l'output NN nel testo finale

Come si ottiene questo risultato?

  • introdurre un carattere speciale (CTC-vuoto, indicato come "-" in questo testo) per indicare che non viene visto alcun carattere in un determinato intervallo di tempo
  • modificare il testo di verità di base da T a T 'inserendo spazi CTC e ripetendo i caratteri in tutti i modi possibili
  • conosciamo l'immagine, conosciamo il testo, ma non sappiamo dove sia posizionato il testo. Quindi, proviamo solo tutte le possibili posizioni del testo "Ciao ----", "-Hi ---", "--Hi--", ...
  • inoltre non sappiamo quanto spazio occupa ciascun personaggio nell'immagine. Quindi proviamo anche tutti i possibili allineamenti consentendo ai personaggi di ripetere come "HHi ----", "HHHi ---", "HHHHi--", ...
  • vedi un problema qui? Naturalmente, se permettiamo a un personaggio di ripetere più volte, come possiamo gestire veri personaggi duplicati come la "l" in "Ciao"? Bene, basta inserire sempre uno spazio in mezzo in queste situazioni, ad esempio "Hel-lo" o "Heeellll ------- llo"
  • calcola il punteggio per ogni possibile T '(cioè per ogni trasformazione e ogni combinazione di questi), somma su tutti i punteggi che producono la perdita per la coppia (I, T)
  • la decodifica è semplice: scegli il personaggio con il punteggio più alto per ogni passaggio temporale, ad es. "HHHHHH-eeeellll-lll - oo ---", elimina i caratteri duplicati "H-el-lo", elimina gli spazi "Ciao", e noi sono fatti.

Per illustrare questo, dai un'occhiata alla seguente immagine. È nel contesto del riconoscimento vocale, tuttavia, il riconoscimento del testo è lo stesso. La decodifica produce lo stesso testo per entrambi i parlanti, anche se l'allineamento e la posizione del personaggio differiscono.

inserisci qui la descrizione dell'immagine

Ulteriori letture:


È un po 'confuso, almeno per me, cosa intendi inizialmente con " testo di verità di base per ogni immagine T1, T2, ...". Dovresti iniziare spiegandolo. Inoltre, non è molto chiaro, se non si ha familiarità con i concetti, cosa si intende per "Una rete neurale (NN) genera un punteggio per ogni possibile posizione orizzontale (passo temporale t) dell'immagine". Come mai un'immagine ha dei passaggi temporali? In sintesi, alcune delle tue dichiarazioni iniziali sembrano supporre che tu sia a conoscenza di alcuni concetti, che alla fine saranno compresi in seguito nella stessa risposta, ma, IMHO, dovresti chiarire questi concetti.
nbro,

Grazie per il feedback. Ho aggiunto un'illustrazione sul set di dati e migliorato la descrizione. Inoltre, il termine time-step significa semplicemente "posizione orizzontale" o coordinata x nel contesto del riconoscimento del testo. Il termine molto probabilmente deriva dal riconoscimento vocale (un compito simile), dove time-step si riferisce alla posizione temporale nel segnale audio.
Harry,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.