Estoy buscando hacer un proyecto de reconocimiento óptico de caracteres (OCR). Después de investigar un poco, me he encontrado con una arquitectura que parece interesante: CNN + RNN + CTC. Estoy familiarizado con las redes neuronales contorneadas (CNN) y las redes neuronales recurrentes (RNN), pero ¿qué es la Clasificación temporal conexionista (CTC)? Me gustaría una explicación en términos simples.
machine-learning
deep-learning
conv-neural-network
rnn
Ryan Zotti
fuente
fuente
Respuestas:
Tiene un conjunto de datos que contiene:
Entonces su conjunto de datos podría verse así:
Una red neuronal (NN) genera una puntuación para cada posible posición horizontal (a menudo llamada tiempo-paso t en la literatura) de la imagen. Esto se ve más o menos así para una imagen con ancho 2 (t0, t1) y 2 caracteres posibles ("a", "b"):
| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4
Para entrenar tal NN, debe especificar para cada imagen dónde se coloca un carácter del texto de verdad fundamental en la imagen. Como ejemplo, piense en una imagen que contenga el texto "Hola". Ahora debe especificar dónde comienza y termina la "H" (por ejemplo, "H" comienza en el décimo píxel y continúa hasta el píxel 25). Lo mismo para "e", "l, ... Eso suena aburrido y es un trabajo duro para grandes conjuntos de datos.
Incluso si logró anotar un conjunto de datos completo de esta manera, hay otro problema. El NN genera los puntajes para cada personaje en cada paso de tiempo, vea la tabla que he mostrado arriba para ver un ejemplo de juguete. Ahora podríamos tomar el personaje más probable por paso de tiempo, esto es "b" y "a" en el ejemplo del juguete. Ahora piense en un texto más grande, por ejemplo, "Hola". Si el escritor tiene un estilo de escritura que usa mucho espacio en posición horizontal, cada personaje ocuparía múltiples pasos de tiempo. Tomando el carácter más probable por paso de tiempo, esto podría darnos un texto como "HHHHHHHHeeeellllllllloooo". ¿Cómo debemos transformar este texto en la salida correcta? ¿Eliminar cada carácter duplicado? Esto produce "Helo", que no es correcto. Por lo tanto, necesitaríamos un posprocesamiento inteligente.
CTC resuelve ambos problemas:
¿Cómo se logra esto?
Para ilustrar esto, eche un vistazo a la siguiente imagen. Es en el contexto del reconocimiento de voz, sin embargo, el reconocimiento de texto es el mismo. La decodificación produce el mismo texto para ambos altavoces, aunque la alineación y la posición del personaje difieran.
Otras lecturas:
fuente