Qu'est-ce que la classification temporelle connexionniste (CTC)?

15

Je cherche à faire un projet de reconnaissance optique de caractères (OCR). Après avoir fait quelques recherches, je suis tombé sur une architecture qui semble intéressante: CNN + RNN + CTC. Je connais les réseaux de neurones alambiqués (CNN) et les réseaux de neurones récurrents (RNN), mais qu'est-ce que la classification temporelle connexionniste (CTC)? Je voudrais une explication en termes simples.

Ryan Zotti
la source
3
Je vous recommande de lire l'article d'origine: Graves, et al. (2006) Classification temporelle connexionniste: étiquetage des données de séquence non segmentées avec des réseaux de neurones récurrents, Actes de la 23 e Conférence internationale sur l'apprentissage automatique ( pdf ).
neo li

Réponses:

28

Vous disposez d'un jeu de données contenant:

  • images I1, I2, ...
  • textes de vérité au sol T1, T2, ... pour les images I1, I2, ...

Votre jeu de données pourrait donc ressembler à ceci:

entrez la description de l'image ici

Un réseau neuronal (NN) produit un score pour chaque position horizontale possible (souvent appelée pas de temps t dans la littérature) de l'image. Cela ressemble à ceci pour une image de largeur 2 (t0, t1) et 2 caractères possibles ("a", "b"):

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

Pour former un tel NN, vous devez spécifier pour chaque image où un caractère du texte de vérité au sol est positionné dans l'image. A titre d'exemple, pensez à une image contenant le texte "Bonjour". Vous devez maintenant spécifier où le "H" commence et se termine (par exemple, "H" commence au 10e pixel et va jusqu'au 25e pixel). La même chose pour "e", "l, ... Cela semble ennuyeux et est un travail difficile pour les grands ensembles de données.

Même si vous avez réussi à annoter un ensemble de données complet de cette manière, il y a un autre problème. Le NN génère les scores de chaque personnage à chaque pas de temps, voir le tableau que j'ai montré ci-dessus pour un exemple de jouet. Nous pourrions maintenant prendre le personnage le plus probable par pas de temps, c'est "b" et "a" dans l'exemple de jouet. Pensez maintenant à un texte plus grand, par exemple "Bonjour". Si l'écrivain a un style d'écriture qui utilise beaucoup d'espace en position horizontale, chaque caractère occupera plusieurs pas de temps. Prenant le caractère le plus probable par pas de temps, cela pourrait nous donner un texte comme "HHHHHHHHeeeellllllllloooo". Comment transformer ce texte en sortie correcte? Supprimer chaque caractère en double? Cela donne "Helo", ce qui n'est pas correct. Nous aurions donc besoin d'un post-traitement intelligent.

La CCT résout les deux problèmes:

  • vous pouvez entraîner le réseau à partir de paires (I, T) sans avoir à spécifier à quelle position un caractère se produit à l'aide de la perte CTC
  • vous n'avez pas à post-traiter la sortie, car un décodeur CTC transforme la sortie NN en texte final

Comment y parvient-on?

  • introduire un caractère spécial (vide CTC, noté "-" dans ce texte) pour indiquer qu'aucun caractère n'est vu à un pas de temps donné
  • modifier le texte de vérité au sol T à T 'en insérant des blancs CTC et en répétant les caractères de toutes les manières possibles
  • nous connaissons l'image, nous connaissons le texte, mais nous ne savons pas où le texte est positionné. Essayons donc toutes les positions possibles du texte "Hi ----", "-Hi ---", "--Hi--", ...
  • nous ne savons pas non plus combien d'espace chaque personnage occupe dans l'image. Essayons donc également tous les alignements possibles en permettant aux caractères de se répéter comme "HHi ----", "HHHi ---", "HHHHi--", ...
  • voyez-vous un problème ici? Bien sûr, si nous autorisons un caractère à se répéter plusieurs fois, comment traitons-nous les vrais caractères en double comme le «l» dans «Bonjour»? Eh bien, insérez toujours un espace entre ces situations, par exemple "Hel-lo" ou "Heeellll ------- llo"
  • calculer le score pour chaque T 'possible (c'est-à-dire pour chaque transformation et chaque combinaison de celles-ci), additionner tous les scores qui produisent la perte pour la paire (I, T)
  • le décodage est facile: choisissez le caractère avec le score le plus élevé pour chaque pas de temps, par exemple "HHHHHH-eeeellll-lll - oo ---", jetez les caractères en double "H-el-lo", jetez les blancs "Bonjour", et nous sont fait.

Pour illustrer cela, regardez l'image suivante. C'est dans le contexte de la reconnaissance vocale, cependant, la reconnaissance de texte est tout de même. Le décodage produit le même texte pour les deux locuteurs, même si l'alignement et la position du caractère diffèrent.

entrez la description de l'image ici

Lectures complémentaires:

Harry
la source
C'est un peu déroutant, du moins pour moi, ce que vous entendez initialement par " texte de vérité au sol pour chaque image T1, T2, ...". Vous devriez commencer par l'expliquer. De plus, ce n'est pas très clair, si vous n'êtes pas familier avec les concepts, ce que vous entendez par "Un réseau neuronal (NN) génère un score pour chaque position horizontale possible (pas de temps t) de l'image". Comment se fait-il qu'une image ait des pas de temps? En résumé, certaines de vos déclarations initiales semblent supposer que vous êtes au courant de quelques concepts, qui seront finalement compris plus loin dans cette même réponse, mais, à mon humble avis, vous devriez clarifier ces concepts.
nbro
Merci pour les commentaires. J'ai ajouté une illustration sur l'ensemble de données et amélioré la description. De plus, le terme pas de temps signifie simplement "position horizontale" ou coordonnée x dans le contexte de la reconnaissance de texte. Le terme provient très probablement de la reconnaissance vocale (une tâche similaire), où le pas de temps se réfère à la position dans le temps dans le signal audio.
Harry