РАСПОЗНАВАНИЕ ИЗОБРАЖЕНИЯ С ПОМОЩЬЮ НЕЙРОННЫХ СЕТЕЙ С ПРАКТИЧЕСКИМИ РЕКОМЕНДАЦИЯМИ

Нейронные сети являются одним методом, который может быть использован для распознавания изображений. Этот учебник покажет вам, как использовать многослойный перцептрон нейронной сети для распознавания образов. В Neuroph имеет встроенную поддержку распознавания изображений, а также специализированные мастер для обучения распознавания образов нейронные сети. Простая библиотека распознавания образов можно найти в org.neuroph.contrib.imgrec пакете, в то время как мастер распознавания изображений в  Neuroph Studio Canis, расположенной в [Main Menu > File > New > Image recognition neural network]Этот учебник будет объяснить следующее:

  1. Основной принцип, как мульти перцептронов слоя используются для распознавания образов (один из возможных подходов описан здесь)
  2. Как обучать нейронные сети для распознавания изображений с Neuroph студии
  3. Использование нейронных сетей, обученных для распознавания изображений в приложениях

Этот учебник предназначен для Neuroph v2.6.

  1. Распознавание образов с помощью Многослойный Персептрон

Каждое изображение может быть представлено в виде двумерного массива, в котором каждый элемент этого массива содержит информацию о цвете для одного пикселя. (Рисунок 1)picture1Рисунок 1. Цвета изображенияКаждый цвет может быть представлена в виде комбинации трех основных цветовых компонентов: красного, зеленого и синего цветов.picture2Рисунок 2. Система цвета RGBТак, чтобы представлять какой-то образ в системе RGB, мы можем использовать три двумерных массивов, по одному для каждого компонента цвета, где каждому элементу соответствует один пиксел изображения.int [][]  redValuesint [][]  greenValuesint [][]  blueValuesНапример, если пиксель в местоположении [20, 10] имеет цвет RGB [33, 66, 181], мы имеем следующееredValues[10][20] = 33;greenValues[10][20] = 66;blueValues[10][20] = 181;Размеры каждого из этих массивов [imageHeight][imageWidth]Мы можем объединить эти три массива в один одномерный массив, поэтому он содержит все значения красный, потом зеленый и в конце все синие значения. Вот как мы создаем flattenedRgbValues[] массив.Размер этого массива [imageHeight * imageWidth * 3]Теперь мы можем использовать этот одномерный массив в качестве входных данных для нейронной сети, а также для обучения нейронной сети, чтобы распознавать и классифицировать их. Мульти персептроны уровня являются тип нейронных сетей, подходящих для этой задачи (рисунок 3).picture3Рисунок 3. Кормление многослойную персептрон с цветовой информации из изображения. Каждый входной нейрон соответствует одному компоненту цвета (RGB) одного пикселя изображения в определенном месте.Каждый выходной нейрон соответствует одному изображению или классу изображений. Так что, если выход сети [1, 0, 0], что означает, что ввод распознается как ‘изображение A’.Мы можем создать набор образования для обучения нейронной сети как совокупность пар входных (расплющить RGB массивы), и выходные векторы (где соответствующий нейрон изображения равен 1).Сеть может быть обучен с помощью алгоритма обучения обратного распространения. В следующем разделе мы предоставим некоторые подробности о нервной netwok и learnig алгоритма.

  1. Обучение нейронной сети для распознавания изображений с Neuroph Studio

предоставляет среду для создания и обучения нейронных сетей, которые могут быть сохранены как готовый к использованию компонентов java. Также она обеспечивает специализированный инструмент распознавания образов для обучения нейронной сети для распознавания изображений. Создание и обучение нейронной сети для распознавания изображений состоит из следующих шагов:

  1. Создание проекта Neuroph
  2. Создание распознавания образов нейронной сети
  3. Обучение сети
  4. Тестирование сети
  5. Сохранить и развернуть сеть

Шаг 1. Для создания проекта Neuroph выберите файл > Новый Проектnew-project-1Выберите Neuroph Project, и нажмите кнопку Далее.new-project-2Введите имя и местоположение проекта, нажмите кнопку Готово.new-project-3Это создаст новый Neuroph Project. Шаг 2. Далее, для создания сети распознавания изображения, нажмите File> New File.new-fileВыберите Распознавания Изображений Тип файла, и нажмите кнопку Далее.ir-001Затем, выберите изображения, Вы хотите быть признанными, выбирая отдельные файлы изображения или добавляя целые справочники изображения. Вы также можете сделать базовое редактирование изображения, как обрезка и изменение размера, открыв простой редактор изображений с помощью кнопки редактирования.ir-002Цветовой режим – Вы можете использовать распознавание изображения в полном цветном режиме или в бинарном черно-белом режиме. Бинарный черно-белый режим представляет пиксель как [0, 1], и поэтому он использует меньшее количество входных нейронов. Для некоторых приложений (например, распознавание символов, например), бинарный черно-белый режим может быть оптимальным решением.На следующем шаге выбрать изображение, которое не должно быть признано, что поможет избежать ложного признания. Обычно это блоки все красные, все зеленые и синие все изображения, но также могут включать в себя другие.При тестировании сети распознавания изображений, вы будете выяснить, что имеет смысл включить здесь.ir-002-2Затем введите “Training Set Label” и “Image Sampling Resolution”, и нажмите кнопку Далее.ir-003“Training Set Label” – Так как вы можете создать несколько учебных комплектов, экспериментируя с сетью, это хорошая практика, чтобы назвать их.“Image sampling resolution” (ширина х высота) – Все представленные изображения будут уменьшены до указанного размера (ширина х высота). Масштабирование изображения сделает их меньше, и они будут проще и быстрее учиться. Размеры изображения определяют размер входного вектора, и число нейронов во входном слое. (Если вы получаете исключения кучи Java для некоторой размерности, попробуйте увеличить размер кучи для виртуальной машины Java)Для начала, вы можете использовать настройки по умолчанию (разрешение 20×20 и цветового режима), а просто предоставить изображения. Следующее, что нужно сделать, это создать нейронную сеть.ir-004Для создания нейронной сети необходимо ввести следующее:Network label – Метка для нейронной сети, которая является полезным при создании нескольких нейронных сетей для той же задачи, и вы их сравнения. Transfer function – Эта настройка определяет, какая функция передачи будет использоваться нейронов. В большинстве случаев вы можете оставить настройки по умолчанию “сигмовидной”, но иногда используя ‘TANH’ может дать лучшие результаты. При этом откроется диалоговое окно для настройки параметров обучения. Используйте настройки по умолчанию обучения и просто нажмите на кнопку TrainHidden Layers Neuron Counts  – Это наиболее важный параметр, который определяет количество скрытых слоев в сети, и количество нейронов в каждом скрытом слое. Скрытые слои слои между входным и выходным слоем. Хитрость заключается в том, чтобы иметь наименьшее возможное количество слоев и нейронов, которые могут успешно выучить обучающий набор. Чем меньше число нейронов – тем быстрее обучения, лучше обобщение. Подходящее количество скрытых нейронов зависит также от числа входных и выходных нейронов, и лучшее значение может быть просчитан экспериментальным путем. Для начала, попробуйте 8х8 изображения и один скрытый слой с 12 нейронов, что является настройкой по умолчанию. Если вы затухающий увеличить число нейронов, просто введите номер, например, ’12’ нейронов. Если вы хотите добавить больше, чем один слой нейронов ввести число нейронов в каждом слое, разделенных пробелом. Например, если вы вводите ’12 8 6 ‘создаст три скрытых слоев с 12, 8 и 6 нейронов.Нажмите кнопку Finish, чтобы создать нейронную сеть. После того, как вы нажмете на кнопку новое окно с созданной нейронной сети откроется.Шаг 3. Обучение сети. Для того, чтобы обучить сеть выбрать обучение набор из дерева проекта, и нажмите на кнопку “Train”. ir-006При этом откроется диалоговое окно для настройки параметров обучения. Используйте настройки по умолчанию обучения и просто нажмите на кнопку Train.ir-008Это позволит начать подготовку и открытой сети обучения графической и счетчик итераций, так что вы можете наблюдать за процессом обучения. Если обучение застревает (общая ошибка сети не зайдет), можно попробовать с разным количеством нейронов, слоев и параметров обучения. Для изучения скорости и обороты использовать значения между [0, 1] , и ошибки, некоторую малую величину ниже 0.1 рекомендуется. Некоторые правила из эмпирических значений 0,2 для скорости обучения и 0,7 для импульса.ir-009Шаг 4. Тестирование сетиПосле того, как вы обучили сети вы можете попробовать, как это работает в тестовой панели. Нажмите на кнопку ” Select Test Image ” кнопку, чтобы установить входное изображение для сети, а выход сети будет отображаться в виде списка меток изображений и соответствующих нейронных выходов. Признанный изображение соответствует нейрон с самой высокой мощности. Вы можете проверить весь набор данных, нажав на кнопку “Test whole data set”.ir-010Шаг 5. Сохранить нейронной сетиЧтобы сохранить нейронной сети как компонент java нажмите [Main menu > File > Save] и используйте .nnet расширение. Сеть будет сохранена как сериализации объекта “MultiLayerPerceptronir-011

  1. Использование Neuroph распознавание изображений в вашем приложении

Вот пример кода, который показывает, как использовать изображения, созданные распознавания нейронные сети и обучение с Neuroph Studio. Вы можете запустить этот пример, просто указать правильные имена для нейронной сети и некоторые тестовые изображения.import org.neuroph.core.NeuralNetwork;import org.neuroph.contrib.imgrec.ImageRecognitionPlugin;import java.util.HashMap;import java.io.File;import java.io.IOException;public class ImageRecognitionSample {public static void main(String[] args) {// load trained neural network saved with Neuroph Studio (specify some existing neural network file here)NeuralNetwork nnet = NeuralNetwork.load(“MyImageRecognition.nnet”); // загрузите обученную нейронную сеть, сохраненную Studio Neuroph//получите плагин распознавания изображения от нейронной сетиImageRecognitionPlugin imageRecognition = (ImageRecognitionPlugin)nnet.getPlugin(ImageRecognitionPlugin.class); // получите плагин распознавания изображения от нейронной сетипопробуйте {//распознавание изображения сделано здесь (определите некоторый существующий файл изображения),HashMap<String, Double> output = imageRecognition.recognizeImage(new File(“someImage.jpg”));System.out.println(output.toString());} catch(IOException ioe) {ioe.printStackTrace();}}}Фактическое распознавание изображений производится с помощью только одного вызова метода из ImageRecognitionPlugin:imageRecognition.recognizeImage(new File(“someImage.jpg”));ImageRecognitionPlugin обеспечивает простой интерфейс распознавания образов в нейронной сети. Вы можете распознавать изображения из различных источников, таких как файл, bufferedimage или URL-адрес. Например:imageRecognition.recognizeImage(new URL(“http://www.example.com/someImage.jpg”));Для получения более подробной информации проверьте классы в org.neuroph.contrib.imgrec пакете.Для того, чтобы использовать классы распознавания образов, необходимо добавить ссылку на neuroph.jar в проекте (right click project > Properties > Libraries > Add JAR/Folder)УСТРАНЕНИЕ НЕПОЛАДОК

  1. Шкала размеров изображений, используемых для обучения в те же размеры, чтобы избежать возможных проблем.
  2. Используйте тот же цветовой режим и размеры изображения для обучения и распознавания. Если цвет не важен для вас использовать черный и белый, поскольку обучение проходит быстрее.
  3. Если вы выходите из исключения памяти для больших изображений увеличиваться Размер для JVM с –Xms and –Xmx параметры.

 Первоисточник: http://neuroph.sourceforge.net/image_recognition.htmlВернуться на главную страницу

Posted on

Leave a Reply