32

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

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

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

+0

У вас уже есть нейронет? Если нет - это странный вопрос. Если да - хотя бы пост-интерфейс. –

+1

Это не странный вопрос. На самом деле, если у меня есть интерфейс, то это означает, что сначала я принимаю решение о том, как я буду вводить изображение в нейро-сеть. Вопрос в том, могу ли я ввести данные изображения, такие как буква A, в нейро-сеть, даже если она очень большая или маленькая, или я должен разбить ее на некоторые параметры, которые однозначно определяют букву A! – Dzen

+0

Если я должен разбить его на параметры, какие параметры я должен использовать? – Dzen

ответ

7

Имя проблемы, которую вы пытаетесь решить, это «feature extraction». Это явно нетривиально и является предметом активных исследований.

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

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

+0

можете ли вы предложить несколько хороших книг об OCR? – Dzen

+0

Не совсем моя специальность, но быстрый поиск открывает «Возможности экстракции для оптического распознавания символов» Романа Ямпольского, который выглядит так, как будто он может содержать то, что вам нужно. –

24

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

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

+1

Могу ли я решить этот вопрос? 1. binarize изображение. 2. сегментация. найти связанные части изображения. могут использовать контуры. 3. для каждого сегмента он выполняется отдельно от других сегментов. 3.1 извлеките некоторую информацию из сегмента изображения. 3.2 сравнить с некоторым рисунком или ввести его в нейро-сеть. поэтому у меня есть некоторые вопросы. 1. Если я сегментирую изображение, и у меня есть буква «i», то точка abouve будет отделена от сегмента. Итак, как справиться с этой ситуацией? Может быть добавлен специальный случай. 2. Должен ли я изменить размер сегмента, если он очень большой или слишком мал? – Dzen

+0

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

+3

Ваши шаги предварительной обработки звучат так, как это могло бы работать, однако я бы предложил начать с того, что я предложил в первом абзаце. Мне кажется, что у вас нет такого большого опыта работы с нейронными сетями или распознаванием символов. Поэтому, чтобы понять, что работает и как это работает, вы должны начать с простого случая. Добавление слишком большого количества шагов сразу увеличит вероятность ошибки и без реального представления о том, чего ожидать от каждого отдельного шага, вам будет трудно отлаживать ваш код. – ahans

1

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

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

0

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

2

Все эти соображения о применении NNS к изображениям покрыты в нашем 2002 review paper (на основе Feature, на основе пикселей, масштабной инвариантности и т.д.)

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

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

Смежные вопросы