Подтвердить что ты не робот

Как ввести изображение в нейронную сеть?

Я понимаю, как работают нейронные сети, но если я хочу использовать их для обработки изображений, таких как фактическое распознавание символов, я не могу понять, как я могу ввести данные изображения в нейронную сеть.

У меня очень большое изображение буквы A. Может быть, я должен попытаться получить некоторые данные/спецификации из изображения, а затем использовать вектор значений этой спецификации? И они станут вкладом в нейронную сеть?

Кто уже сделал такую ​​вещь, вы можете объяснить, как это сделать?

4b9b3361

Ответ 1

Самым простым решением было бы нормализовать все ваши изображения, как для обучения, так и для тестирования, иметь такое же разрешение. Также символ в каждом изображении должен быть примерно того же размера. Также неплохо использовать изображения с оттенками серого, поэтому каждый пиксель даст вам только одно число. Затем вы можете использовать каждое значение пикселя в качестве одного входа в свою сеть. Например, если у вас есть изображения размером 16x16 пикселей, ваша сеть будет иметь 16 * 16 = 256 входных нейронов. Первый нейрон увидит значение пикселя в (0,0), второе в (0,1) и так далее. В основном вы помещаете значения изображений в один вектор и подаете этот вектор в сеть. Это уже должно работать.

Сначала извлекая из изображения функции (например, ребра), а затем используя сеть по этим функциям, вы, возможно, увеличите скорость обучения, а также сделаете обнаружение более надежным. То, что вы делаете в этом случае, включает в себя предварительные знания. Для распознавания символов вы знаете некоторые соответствующие функции. Таким образом, извлекая их как шаг предварительной обработки, сети не нужно изучать эти функции. Однако, если вы предоставите неправильные, то есть нерелевантные, функции, сеть не сможет узнать изображение → сопоставление символов.

Ответ 2

Название проблемы, которую вы пытаетесь решить, это " извлечение функции". Это явно нетривиально и предмет активных исследований.

Наивный способ сделать это - просто сопоставить каждый пиксель изображения с соответствующим входным нейроном. Очевидно, что это работает только для изображений с одинаковым размером и обычно имеет ограниченную эффективность.

Помимо этого, есть множество вещей, которые вы можете сделать... Фильтры Gabor, Haar-подобные функции, PCA и ICA, редкие функции, просто чтобы назвать несколько популярных примеров. Моим советом было бы взять учебник по нейронным сетям и распознаванию образов или, в частности, оптическое распознавание символов.

Ответ 3

Все эти соображения о применении NN к изображениям описаны в нашем обзоре 2002 (Функциональная, пиксельная, масштабная инвариантность и т.д.)

Ваша самая большая проблема - так называемое "проклятие размерности".

Я бы сравнил NN-производительность с характеристикой машины векторной поддержки (сложно, какие ядра использовать).

Ответ 4

Вы можете использовать для ввода фактических пикселей. Поэтому иногда предпочтительнее использовать меньшее разрешение входных изображений.

Хорошая вещь в ANN заключается в том, что они каким-то образом способны выбирать объекты (игнорируя не важные пиксели, назначая почти нулевые веса для этих входных узлов)

Ответ 5

Вот несколько шагов: убедитесь, что ваше изображение цвета/серого масштаба является двоичным. Для этого выполните некоторую операцию порогового значения. после чего какой-то извлечения функции. Для OCR/NN этот пример может помочь, хотя в ruby: https://github.com/gbuesing/neural-net-ruby/blob/master/examples/mnist.rb