Статьи

Neuroph: приложения Smart Java с нейронными сетями (часть 3)

Нейронные сети могут научиться отображать входные данные в выходные данные и используются для таких задач, как распознавание изображений, автоматическая классификация, прогнозирование и искусственно интеллектуальные игровые персонажи. В третьей части этой серии команда NetBeans взяла интервью у Зорана Севарака из Neuroph о добавлении задачи распознавания изображений в приложение Java. В первой части интервью обсуждается, что такое нейронные сети и почему IDE NetBeans был естественным выбором для команды разработчиков Neuroph. Во второй части интервью мы подробно рассмотрели варианты использования нейронных сетей и то, что они могут сделать для вас!

Нейронные сети — почему и как

 Зачем использовать нейронные сети для распознавания изображений?

Хотя существуют и другие методы распознавания изображений, нейронные сети представляют собой интересное решение благодаря следующим свойствам:

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

 

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

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

 

Как использовать нейронные сети для распознавания изображений?

Сначала вы преобразуете обучающие изображения в форму, которая может вводиться в нейронные сети: библиотека Neuroph предоставляет класс FractionRgbData, который преобразует BufferedImage в нормализованные векторы RGB. Затем вы обучаете нейронную сеть изучать эти векторы изображений. Тип нейронной сети, которую мы используем, — это многослойный персептрон с правилом обратного распространения.

Рисунок 1. Подача векторов изображения в нейронную сеть

 

Нейронные сети — варианты использования

 

Могу ли я использовать Neuroph для распознавания лиц?

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

 

Могу ли я использовать Neuroph для распознавания онлайн-изображений или капч?

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

 

Можно ли использовать Neuroph для поиска изображений или распознавания частей изображения?

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

 

Нейроф — особенности и требования

 

Какие форматы изображений поддерживаются?

Поддерживаемые форматы изображений: BMP, JPG, PNG и GIF.

 

Какой максимальный размер изображения?

Теоретически, максимум не ограничен, но на практике он зависит от доступной памяти и времени. Обучение на больших изображениях требует более сложных нейронных сетей с большим количеством нейронов и слоев; Обучение требует больше времени, и может быть сложно настроить сеть и параметры обучения. Если у вас есть проблемы с созданием сети определенного размера, попробуйте увеличить максимальный размер кучи.

 

Как быстро работает нейроф?

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

 

Есть ли разница между распознаванием черно-белых и цветных изображений?

Это тот же принцип, единственное отличие в том, что для черно-белых изображений вам нужны меньшие сети с меньшим количеством нейронов, и обучение проходит быстрее. Для распознавания изображений в полном цвете RGB требуется в три раза больше входных нейронов, чем для распознавания черно-белых изображений.

 

Нейроф — Использование

 

Как использовать библиотеку Neuroph для распознавания изображений?

Есть три шага:

  1. Подготовьте тренировочные образы, которые вы хотите распознать.
  2. Создайте, обучите и сохраните сеть распознавания изображений с помощью инструмента с графическим интерфейсом из приложения easyNeurons.
  3. Разверните сохраненную нейронную сеть в своем приложении, используя нашу библиотеку Java Neuroph Neural Network, neuroph.jar.

Какое программное обеспечение мне нужно для использования Neuroph Image Recognition?

Для использования Neuroph Image Recognition вам необходимо:

  • Java JDK 1.6
  • Neuroph Framework 2.3.1 (скачать)
    • Включая приложение easyNeurons GUI для обучения сетей распознавания изображений, и
    • библиотека Java Neural Network для развертывания обученных нейронных сетей в вашем приложении.

 

Как добавить задачу распознавания изображений в мое приложение Java?

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

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 easyNeurons    // (specify existing neural network file here)    NeuralNetwork nnet = NeuralNetwork.load("MyImageRecognition.nnet");    // get the image recognition plugin from neural network    // (image recognition interface for neural network)    ImageRecognitionPlugin imageRecognition = (ImageRecognitionPlugin)nnet.getPlugin        (ImageRecognitionPlugin.IMG_REC_PLUGIN_NAME);    try {        // image recognition is done here (specify some existing image file)        HashMap output = imageRecognition.recognizeImage(new File("someImage.jpg"));        System.out.println(output.toString());    } catch(IOException ioe) {        ioe.printStackTrace();    }  }}

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

  1. Загрузите обученную нейронную сеть.
  2. Получить плагин распознавания изображений из нейронной сети.
  3. Вызовите метод visibleImage () для изображения.
  4. Оцените полученный результат HashMap.

Фактический шаг распознавания — это всего лишь один вызов метода. Он возвращает HashMap с метками изображений в качестве ключей и степенью их распознавания в качестве значений. Чем выше степень распознавания, тем больше вероятность того, что вы научили его распознавать изображение. Метод распознавания изображения () может принимать File, URL или BufferedImage в качестве входных данных.

Другие важные классы из библиотеки neuroph.jar:

FractionRgbData — принимает BufferedImage в качестве входных данных и создает данные RGB, используемые нейронными сетями.
ImageRecognitionPlugin — предоставляет интерфейс распознавания изображений для нейронной сети, поэтому пользователю даже не нужно знать, что за кулисами есть нейронная сеть.
ImageSampler — предоставляет методы для выгрузки образцов изображений с экрана (очень интересно!) И масштабирования изображений.

 

Можете ли вы поделиться рекомендованными лучшими практиками?

  • Масштабируйте все изображения, используемые для обучения, до одинаковых размеров.
  • Если цвет не важен для вашей задачи, используйте черный / белый, он будет работать быстрее.
  • Используйте одинаковые размеры изображения для обучения и распознавания.
  • Если вы получаете исключения нехватки памяти для больших изображений, увеличьте размер кучи JVM с помощью параметров -Xms и -Xmx.
  • Используйте самый быстрый процессор, который вы можете получить, поскольку обучение нейронной сети может занять некоторое время.

 

Как я могу лучше всего использовать Neuroph с IDE?

Члены нашей группы пользователей NetBeans работают над плагином Neuroph для IDE NetBeans. Мы планируем сделать специализированные компоненты для распознавания изображений, распознавания текста, классификации, прогнозирования и аппроксимации доступными из палитры NetBeans.

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

Когда мы собираем все это вместе, мы видим, что говорим о переносе существующего приложения easyNeurons на платформу NetBeans. Мы понимаем, что это потребует много работы! В настоящее время у нас недостаточно опыта работы с платформой NetBeans, и в нашей команде только небольшое количество активных разработчиков. Мы только что создали нашу локальную группу пользователей NetBeans (шесть разработчиков с опытом работы с Neuroph), но наши участники будут посещать тренинг по платформе NetBeans , поэтому мы уверены, что этого можно достичь!

 

Нейроф — следующие шаги

 

Мы видим, что Нейроф находится в активном развитии. Какие у тебя планы на будущее?

Мы планируем выпустить поддержку алгоритма NEAT, разработанную Эйданом Морганом в рамках платформы Neuroph. NEAT (NeuroEvolution of Augmenting Topologies) использует генетический алгоритм для развития топологии нейронной сети (количество слоев и нейронов) наряду с весами. Такой подход может сэкономить время, которое обычно затрачивается на выбор топологии сети для конкретной проблемы.

Мы также планируем предоставить специализированный API для прогнозирования временных рядов.

Кроме того, мы работаем над библиотекой OCR (Optical Character Recognition), основанной на существующем распознавании изображений. Мы надеемся предоставить готовый компонент и инструменты для оптического распознавания текста. Мы только что выпустили наши первые демонстрационные приложения для поддержки OCR и NEAT, одно для распознавания рукописных букв и одно для распознавания текста с изображения . Попробуйте их сейчас!

 

Спасибо за интервью, Зоран! Узнайте больше в доме проекта Neuroph .