Я ищу проект оптического распознавания символов (OCR). После некоторых исследований я натолкнулся на интересную архитектуру: CNN + RNN + CTC. Я знаком с извилистыми нейронными сетями (CNN) и рекуррентными нейронными сетями (RNN), но что такое временная классификация Connectionist (CTC)? Я хотел бы получить объяснение с точки зрения непрофессионала.
machine-learning
deep-learning
conv-neural-network
rnn
Райан Зотти
источник
источник
Ответы:
У вас есть набор данных, содержащий:
Таким образом, ваш набор данных может выглядеть примерно так:
Нейронная сеть (NN) выводит оценку для каждого возможного горизонтального положения (часто называемого временным шагом t в литературе) изображения. Это выглядит примерно так для изображения шириной 2 (t0, t1) и 2 возможных символов («a», «b»):
| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4
Чтобы обучить такой NN, вы должны указать для каждого изображения, где символ основного текста истины расположен на изображении. В качестве примера представьте изображение, содержащее текст «Hello». Теперь вы должны указать, где начинается и заканчивается буква «H» (например, буква «H» начинается с 10-го пикселя и продолжается до 25-го пикселя). То же самое для "e", "l, ... Это звучит скучно и является тяжелой работой для больших наборов данных.
Даже если вам удалось аннотировать полный набор данных таким образом, есть еще одна проблема. NN выводит оценки для каждого символа на каждом временном шаге, см. Таблицу, которую я показал выше, для примера с игрушкой. Теперь мы можем взять наиболее вероятный символ за временной шаг, это «b» и «a» в примере с игрушкой. Теперь подумайте о тексте большего размера, например, «Привет». Если у писателя есть стиль письма, который использует много места в горизонтальном положении, каждый символ будет занимать несколько временных шагов. Принимая наиболее вероятный символ за временной шаг, это может дать нам текст вроде «HHHHHHHHeeeellllllllloooo». Как мы должны преобразовать этот текст в правильный вывод? Удалить каждый повторяющийся символ? Это дает "Helo", что не правильно. Итак, нам понадобится умная постобработка.
CTC решает обе проблемы:
Как это достигается?
Чтобы проиллюстрировать это, взгляните на следующее изображение. Это в контексте распознавания речи, однако распознавание текста точно такое же. Декодирование дает один и тот же текст для обоих ораторов, даже если выравнивание и положение символа различаются.
Дальнейшее чтение:
источник