Original:http://neuroph.sourceforge.net/image_recognition.html

java neural network Отримати Java Neural Network Framework Neuroph на SourceForge.net. Швидке, безпечне та безкоштовне завантаження програмного забезпечення з відкритим кодом

ПРИЗНАЧЕННЯ ЗОБРАЖЕННЯ З НЕЙРОННИМИ МЕРЕЖАМИ

Нейронні мережі є однією технікою, яка може бути використана для розпізнавання зображень. Цей підручник покаже вам, як використовувати багатошарову нейронну мережу персептрон для розпізнавання зображень. Neuroph має вбудовану підтримку для розпізнавання образів та спеціалізованого майстра для навчання нейронних мереж розпізнавання зображень. Проста ідентифікаційна бібліотека може бути знайдена в пакеті org.neuroph.contrib.imgrec , тоді як значок розпізнавання зображень у Neuroph Studio може знаходитися в [Головне меню> Файл> Новий> Нейронні мережі].

Цей підручник пояснить наступне:

1. Базовий принцип використання багатошарових персептронів для розпізнавання образів (тут описаний один можливий підхід)
2. Як підготувати нейронні мережі для розпізнавання зображень з Neuroph Studio
3. Як використовувати нейронні мережі, навчені для розпізнавання образів у ваших програмах

Цей підручник призначений для Neuroph v2.6.

1. Розпізнавання зображень з багатошаровим персептроном

Кожне зображення може бути представлено як двовимірний масив, де кожен елемент цього масиву містить інформацію про кольори для одного пікселя. (малюнок 1)

Малюнок 1. Кольорові зображення

Кожен колір може бути представлений як комбінація з трьох основних компонентів кольору: червона, зелена та синя.

Малюнок 2. Колірна система RGB

Отже, для представлення деяких зображень у системі RGB ми можемо використовувати три матриви з двома розмірами, по одному для кожного кольорового компонента, де кожен елемент відповідає одному пікселю зображення.

int [][] redValues
int [][] greenValues
int [][] blueValues

Наприклад, якщо піксель у місці [20, 10] має колір RGB [33, 66, 181], ми маємо

redValues ​​[10][20] = 33;
greenValues ​​[10][20] = 66;
blueValues ​​[10][20] = 181;

Розміри кожного з цих масивів: [imageHeight][imageWidth]

Ми можемо об'єднати ці три масиви в єдиний одномірний масив, тому він містить всі червоні значення, потім всі зелені, а в кінці - сині значення. Ось як ми створюємо плавний RgbValues ​​[] масив.
Вимір цього масиву - [imageHeight * imageWidth * 3]
Тепер ми можемо використовувати цей одномірний масив як вхід для нейронної мережі, а також навчити нейронну мережу розпізнавати або класифікувати їх. Багатослойні персептрони - це тип нейронних мереж, придатних для виконання цих завдань (малюнок 3).

Малюнок 3 . Подача багатошарового персептрона з кольоровою інформацією з зображення. Кожен вхідний нейрон відповідає одному кольоровому компоненту (RGB) одного пікселя зображення в певному місці.

Кожен вихідний нейрон відповідає одному класу зображення чи зображення. Отже, якщо мережевий вихід є [1, 0, 0], це означає, що вхід визнано як «зображення А».
Ми можемо створити тренувальний набір для навчання нейронної мережі як набір пар вхідних (вирівнювання рґб масивів), так і вихідних векторів (де відповідний нейрон зображення 1).
Мережу можна навчати за допомогою алгоритму навчання зворотного розповсюдження. У наступному розділі ми наведемо деякі подробиці про алгоритм нейронних мереж та learnig.

2. Навчання нейронної мережі для розпізнавання зображень з студією Neuroph

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

  1. Створити проект Neuroph
  2. Створити нейронну мережу для розпізнавання образів
  3. Залізнична мережа
  4. Тестова мережа
  5. Зберегти та розгорнути мережу

Крок 1. Щоб створити проект Neuroph, натисніть File> New Project

Виберіть Neuroph Project та натисніть кнопку Далі .

Введіть назву проекту та місце розташування, натисніть Готово .

Це створить новий проект Neuroph.

Крок 2. Далі, для створення мережі розпізнавання зображень натисніть Файл> Новий файл .

Виберіть тип файлу розпізнавання зображення та натисніть кнопку Далі .

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

Кольоровий режим - Ви можете використовувати розпізнавання зображень у повнокольоровому режимі або в чорно-білому режимі. Дворядковий чорно-білий режим позначає піксель як [0, 1], і тому він використовує меншу кількість вхідних нейронів. Для деяких програм (наприклад, для розпізнавання символів) двійковий чорно-білий режим може бути оптимальним рішенням.

У наступному кроці виберіть образ, який не слід розпізнавати, що допоможе уникнути помилкового розпізнавання. Зазвичай це блоки всіх червоних, всіх зелених та всіх синіх зображень, але також можуть включати інших.
Під час тестування вашої мережі розпізнавання зображень ви дізнаєтеся, що має сенс включити тут.

Потім введіть "Набір міток для тренувань" та "Розбір образів зображення" та натисніть кнопку " Далі" .

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

Роздільна вибірка зображень (ширина х висота) - усі надані зображення будуть масштабовані до такого розміру (ширина х висота). Масштабування зображень зменшить їх, і вони будуть легше та швидше вивчати. Розміри зображення визначають розмір вхідного вектора та кількість нейронів у вхідному шарі. (якщо ви отримуєте виключення з купою java для певного розміру, спробуйте збільшити розмір купи для JVM)

Для початку ви можете використовувати налаштування за замовчуванням (роздільна здатність 20x20 і колірний режим), а просто надайте зображення.

Наступне, що потрібно зробити, полягає у створенні нейронної мережі.

Для створення нейронної мережі потрібно ввести наступне:

Мережева етикетка - мітка для нейронної мережі, яка корисна при створенні кількох нейронних мереж для тієї самої проблеми, і ви порівнюєте їх.
Функція передачі - Цей параметр визначає, яку функцію передачі будуть використовувати нейрони. У більшості випадків ви можете залишити налаштування за замовчуванням "Sigmoid", але іноді використання "Tanh" може дати вам кращі результати.
Сховані шари. Кількість нейронів - це найважливіший параметр, який визначає кількість прихованих шарів у мережі та кількість нейронів у кожному прихованому шарі. Приховані шари - це шари між вхідним та вихідним шаром. Хитрість полягає в тому, щоб мати найменшу можливу кількість шарів і нейронів, які можуть успішно навчитися набору тренувань. Менша кількість нейронів - швидше вивчення, краще узагальнення. Прийнятна кількість прихованих нейронів також залежить від кількості вхідних та вихідних нейронів, і експериментально можна визначити найкраще значення. Для початку спробуйте 8x8 зображень і один прихований шар з 12 нейронами, який є стандартним параметром. Якщо ви хочете збільшити кількість нейронів, просто введіть число, наприклад, нейрони "12". Якщо ви хочете додати більше одного шару нейронів, введіть кількість нейронів у кожному шарі, розділеному пробілом. Наприклад, якщо ви введете '12 8 6 ', він створить три прихованих шари з 12, 8 та 6 нейронами.

Натисніть кнопку " Готово ", щоб створити нейронну мережу. Після натискання кнопки відкриється нове вікно з створеною нейронною мережею.

Крок 3. Навчальна мережа. Щоб тренувати мережу, виберіть навчальний набір з дерева проекту та натисніть кнопку " Потяг ".

Це дозволить відкрити діалогове вікно для встановлення параметрів навчання. Використовуйте налаштування навчання за замовчуванням і просто натисніть кнопку " Потяг" .

Почнеться тренування та відкрити графік навчання в мережі та ітераційний лічильник, щоб ви могли визначити процес навчання. Якщо навчання застряє (загальна помилка мережі не зменшується), ви можете спробувати з різною кількістю нейронів, шарів або параметрів навчання. Для вивчення швидкості та імпульсу рекомендується використовувати значення між [0, 1], а для помилки - невелике значення нижче 0,1. Деяке правило значень великого пальця становить 0,2 для швидкості навчання і 0,7 для імпульсу.

Крок 4. Перевірка мережі

Після підготовки мережі ви можете спробувати, як це працює на тестовій панелі. Натисніть кнопку " Вибрати тестовий образ ", щоб встановити вхідне зображення для мережі, а мережевий вихід відображатиметься як список міток зображення та відповідних нейронних виходів. Розпізнане зображення відповідає нейрону з найбільшим виходом. Ви можете протестувати весь набір даних, натиснувши кнопку " Перевірити весь набір даних ".

Крок 5. Збережіть нейронну мережу

Щоб зберегти нейронну мережу як компонент Java, натисніть [Головне меню> Файл> Зберегти] та використовуйте розширення .nnet. Мережа буде збережена як селалізований об'єкт MultiLayerPerceptron .

3. Використання розпізнавання зображень 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"); // load trained neural network saved with Neuroph Studio
    // get the image recognition plugin from neural network
    ImageRecognitionPlugin imageRecognition = (ImageRecognitionPlugin)nnet.getPlugin(ImageRecognitionPlugin.class); // get the image recognition plugin from neural network

    try {
         // image recognition is done here (specify some existing image file)
        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 забезпечує простий інтерфейс розпізнавання зображень для нейронної мережі. Ви можете розпізнавати зображення з різних джерел, таких як File, BufferedImage або URL. Наприклад:

imageRecognition.recognizeImage(new URL("http://www.example.com/someImage.jpg"));

Для отримання додаткової інформації перевірте класи в пакеті org.neuroph.contrib.imgrec .
Для використання класів розпізнавання зображень необхідно додати посилання на neuroph.jar у вашому проекті (клацніть правою кнопкою миші проект> Властивості> Бібліотеки>Додати JAR/Папку).


ВИРІШЕННЯ ПРОБЛЕМ

1. Масштабувати розміри зображення, які використовуються для тренування з однаковими розмірами, щоб уникнути можливих проблем.
2. Використовуйте той самий колірний режим і розміри зображення для навчання та розпізнавання. Якщо колір не важливий для вас, використовуйте чорно-білий, оскільки тренування відбувається швидше.
3. Якщо ви виходите з винятків із пам'яті для більших зображень, збільшіть розмір для JVM за допомогою параметрів -Xms та -Xmx.

ПЕРЕКЛАДИ

Переклад цього навчального посібника на румунському мовою доступний тут. Дякую Олександру Овсову за переклад!

Переклад цього навчального посібника на португальську мову доступний тут. Завдяки Миколі Бразі за переклад!

Переклад цього навчального посібника російською мовою доступний тут. Завдяки Рустам Паскаєву за переклад!

БІЛЬШЕ ІНФОРМАЦІЇ

Нейронні мережі в обробці зображень http://www.egmont-petersen.nl/Journal-papers/Egmont-PR-Review2002.pdf
Багато інших нейронних мереж та обробка зображень суміжних статей http://www.egmont-petersen.nl/nn-review.html

Спасибі Майкла Егмонт-Петерсена за цей внесок.

Java Get Powered Java Get Powered Отримати Java Neural Network Framework Neuroph на SourceForge.net. Швидке, безпечне та безкоштовне завантаження програмного забезпечення з відкритим кодом