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

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

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

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

33
задан moffeltje 24 March 2017 в 10:18
поделиться

4 ответа

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

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

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

-121--2064310-

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

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

-121--2064309-

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

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

1
ответ дан 27 November 2019 в 19:28
поделиться

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

0
ответ дан 27 November 2019 в 19:28
поделиться

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

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

24
ответ дан 27 November 2019 в 19:28
поделиться

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

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

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

7
ответ дан 27 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: