¿Qué es la Clasificación temporal conexionista (CTC)?

15

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.

Ryan Zotti
fuente
3
Le recomiendo que lea el documento de origen: Graves, et al. (2006) Clasificación temporal conexionista: etiquetado de datos de secuencia no segmentada con redes neuronales recurrentes, actas de la 23ª Conferencia internacional sobre aprendizaje automático ( pdf ).
neo li

Respuestas:

28

Tiene un conjunto de datos que contiene:

  • imágenes I1, I2, ...
  • textos de verdad básica T1, T2, ... para las imágenes I1, I2, ...

Entonces su conjunto de datos podría verse así:

ingrese la descripción de la imagen aquí

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:

  • puede entrenar la red desde pares (I, T) sin tener que especificar en qué posición se produce un personaje usando la pérdida CTC
  • no tiene que procesar la salida, ya que un decodificador CTC transforma la salida NN en el texto final

¿Cómo se logra esto?

  • introduzca un carácter especial (CTC-blank, denotado como "-" en este texto) para indicar que no se ve ningún carácter en un paso de tiempo dado
  • modifique el texto de verdad fundamental T a T 'insertando espacios en blanco CTC y repitiendo caracteres de todas las formas posibles
  • Conocemos la imagen, sabemos el texto, pero no sabemos dónde está ubicado el texto. Entonces, intentemos todas las posiciones posibles del texto "Hola ----", "-Hi ---", "--Hi--", ...
  • Tampoco sabemos cuánto espacio ocupa cada personaje en la imagen. Entonces, intentemos todas las alineaciones posibles permitiendo que los caracteres se repitan como "HHi ----", "HHHi ---", "HHHHi--", ...
  • ves algun problema aqui? Por supuesto, si permitimos que un personaje se repita varias veces, ¿cómo manejamos los caracteres duplicados reales como la "l" en "Hola"? Bueno, siempre inserte un espacio en blanco en estas situaciones, es decir, "Hel-lo" o "Heeellll ------- llo"
  • calcular la puntuación para cada posible T '(es decir, para cada transformación y cada combinación de estas), sumar todas las puntuaciones que producen la pérdida para el par (I, T)
  • la decodificación es fácil: elija el personaje con la puntuación más alta para cada paso de tiempo, por ejemplo, "HHHHHH-eeeellll-lll - oo ---", deseche los caracteres duplicados "H-el-lo", deseche los espacios en blanco "Hola", y nosotros están hechos.

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.

ingrese la descripción de la imagen aquí

Otras lecturas:

Harry
fuente
Es un poco confuso, al menos para mí, lo que inicialmente quiere decir con " texto de verdad fundamental para cada imagen T1, T2, ...". Deberías comenzar explicándolo. Además, no está muy claro, si no está familiarizado con los conceptos, lo que quiere decir con "Una red neuronal (NN) genera una puntuación para cada posible posición horizontal (tiempo-paso t) de la imagen". ¿Cómo es que una imagen tiene pasos de tiempo? En resumen, algunas de sus declaraciones iniciales parecen suponer que conoce algunos conceptos, que finalmente se entienden más adelante en esta misma respuesta, pero, en mi humilde opinión, debe aclarar estos conceptos.
nbro
Gracias por la respuesta. Agregué una ilustración sobre el conjunto de datos y mejoré la descripción. Además, el término paso de tiempo simplemente significa "posición horizontal" o coordenada x en el contexto del reconocimiento de texto. El término probablemente se origina en el reconocimiento de voz (una tarea similar), donde el paso de tiempo se refiere a la posición en el tiempo en la señal de audio.
Harry