Извлечение признаков из нейронных сетей


Я делаю простое распознавание букв и цифр с помощью нейронных сетей. До сих пор я использовал каждый пиксель изображения Буквы в качестве входа в сеть. Излишне говорить, что этот подход создает сети, которые очень велики. Поэтому я хотел бы извлечь функции из своих изображений и использовать их в качестве входных данных для NNs. Мой первый вопрос заключается в том, какие свойства букв хороши для их распознавания. Второй вопрос заключается в том, как представить эти особенности в качестве входных данных для нейронных сетей. Например, я могу иметь обнаружены все углы в буквах и имеют их в виде вектора точек (x, y). Как преобразовать этот вектор во что-то подходящее для NN (так как размеры вектора могут быть разными для разных букв).

3 7

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).

Если у вас очень высокий размерный входной вектор, то я предлагаю вам применить анализ главных компонент (PCA) для удаления избыточных объектов и уменьшения размерности вектора объектов.