Estou procurando fazer um projeto de reconhecimento óptico de caracteres (OCR). Depois de fazer algumas pesquisas, encontrei uma arquitetura que parece interessante: CNN + RNN + CTC. Eu estou familiarizado com redes neurais complicadas (CNN) e redes neurais recorrentes (RNN), mas o que é Classificação Temporal Conexionista (CTC)? Eu gostaria de uma explicação em termos leigos.
machine-learning
deep-learning
conv-neural-network
rnn
Ryan Zotti
fonte
fonte
Respostas:
Você tem um conjunto de dados que contém:
Portanto, seu conjunto de dados pode ser algo assim:
Uma rede neural (NN) gera uma pontuação para cada posição horizontal possível (geralmente chamada de tempo t na literatura) da imagem. É algo parecido com isto para uma imagem com largura 2 (t0, t1) e 2 caracteres possíveis ("a", "b"):
| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4
Para treinar esse NN, você deve especificar para cada imagem em que um caractere do texto de base da verdade esteja posicionado na imagem. Como exemplo, pense em uma imagem contendo o texto "Olá". Agora você deve especificar onde o "H" começa e termina (por exemplo, "H" começa no 10º pixel e vai até o 25º pixel). O mesmo para "e", "l, ... Isso parece chato e é um trabalho árduo para grandes conjuntos de dados.
Mesmo se você conseguiu anotar um conjunto de dados completo dessa maneira, há outro problema. O NN gera as pontuações de cada personagem em cada etapa do tempo; veja a tabela que mostrei acima para um exemplo de brinquedo. Agora, podemos pegar o personagem mais provável por etapa de tempo, isto é "b" e "a" no exemplo do brinquedo. Agora pense em um texto maior, por exemplo, "Olá". Se o escritor tiver um estilo de escrita que use muito espaço na posição horizontal, cada personagem ocupará vários intervalos de tempo. Tomando o caractere mais provável por etapa do tempo, isso pode nos dar um texto como "HHHHHHHHeeeellllllllloooo". Como devemos transformar esse texto na saída correta? Remover cada caractere duplicado? Isso produz "Helo", o que não está correto. Portanto, precisaríamos de um pós-processamento inteligente.
O CTC resolve os dois problemas:
Como isso é alcançado?
Para ilustrar isso, dê uma olhada na imagem a seguir. É no contexto do reconhecimento de fala, no entanto, o reconhecimento de texto é o mesmo. A decodificação produz o mesmo texto para os dois alto-falantes, mesmo que o alinhamento e a posição do caractere sejam diferentes.
Leitura adicional:
fonte