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.
machine-learning
deep-learning
conv-neural-network
rnn
Ryan Zotti
la source
la source
Réponses:
Vous disposez d'un jeu de données contenant:
Votre jeu de données pourrait donc ressembler à ceci:
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:
Comment y parvient-on?
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.
Lectures complémentaires:
la source