Извлечение признаков из нейронных сетей
Я делаю простое распознавание букв и цифр с помощью нейронных сетей. До сих пор я использовал каждый пиксель изображения Буквы в качестве входа в сеть. Излишне говорить, что этот подход создает сети, которые очень велики. Поэтому я хотел бы извлечь функции из своих изображений и использовать их в качестве входных данных для NNs. Мой первый вопрос заключается в том, какие свойства букв хороши для их распознавания. Второй вопрос заключается в том, как представить эти особенности в качестве входных данных для нейронных сетей. Например, я могу иметь обнаружены все углы в буквах и имеют их в виде вектора точек (x, y). Как преобразовать этот вектор во что-то подходящее для NN (так как размеры вектора могут быть разными для разных букв).
3 ответа:
Многие люди использовали различные функции для распознавания текста. Самый простой из них, конечно, передача значений пикселей напрямую.
В образцах OpenCV есть данные распознавания букв, извлеченные из набора данных UCI. Он использует около 16 различных функций. Проверьте этот SOF: Как создать изображение data fom типа "Letter Image Recognition Dataset" из UCI
Вы также можете увидеть статью, объясняющую это в одном из своих ответов. Вы можете получить его, погуглив.
Также вы можете будьте заинтересованы в этом PPT . Он дает краткое объяснение различных методов извлечения признаков, используемых в настоящее время.
Эта статья, введение в искусственный интеллект. OCR с использованием искусственных нейронных сетей Kluever (2008) дает обзор 4 методов извлечения признаков для OCR с использованием нейронных сетей. Он описывает следующие методы:
- кодирование длины выполнения (RLE): для этого вам нужно двоичное изображение (т. е. только белое или черное). Двоичная строка может быть закодирована в меньшее представление.
- обнаружение ребер: Поиск ребер. Вы можете быть довольно грубы с этим, так что вместо того чтобы возвращать точные координаты (x, y), вы можете уменьшить матрицу путем подсчета только в том случае, если такое ребро встречается в уменьшенных местах (т. е. на 20%, 40%, 60& и 80% изображения).
- подсчет "истинных пикселей": это уменьшает размерность от
width * height
матрицы изображения доwidth + height
. Вы используете векторwidth
и векторheight
в качестве отдельных входных данных.- основной ввод матрицы: вы уже пробовали это; ввод всей матрицы дает хорошие результаты, но, как вы заметили, может привести к высоким размерность и время обучения. Вы можете поэкспериментировать с уменьшением размера ваших изображений (например, с 200х200 до 50х50).