Как ввести изображение в нейронную сеть? - PullRequest
33 голосов
/ 18 января 2010

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

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

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

Ответы [ 5 ]

24 голосов
/ 18 января 2010

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

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

7 голосов
/ 18 января 2010

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

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

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

2 голосов
/ 23 мая 2012

Все эти соображения относительно применения NN к изображениям описаны в нашей 2002 обзорной статье (На основе объектов, на основе пикселей, масштабирования и т. Д.)

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

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

1 голос
/ 18 января 2010

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

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

0 голосов
/ 19 января 2010

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

...