Користувач:Roland1991/Чернетка

DeepDream

ред.

'''DeepDream''' — це відкритий код візуалізації комп’ютерного зору, розроблений Google, який використовує згортальну нейронну мережу для пошуку та редагування зображення шляхом алгоритмічного парейдолія.

Загальні відомості

ред.

Програмне забезпечення DeepDream, спочатку під кодовою назвою «Inception», за аналогією з фільмом «Початок» (англ«Inception»), було розроблене для  ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) в 2014 році [1] і опубліковане 17-ого червня 2015 року в офіційному блозі досліджень Google (англ«Google Research Blog»). Нейронна мережа навчається за допомогою мільйонів тренувальних зображень. Мережа має від 10 до 30 вкладених шарів з різними рівнями абстракції. Кожне зображення подається на вхідний перший прошарок, який потім передає інформацію на наступний рівень, до тих пір, поки не буде досягнуто останнього. Однією з проблем нейронних мереж є розуміння, що саме відбувається на кожному рівні. Після тренування кожен прошарок поступово витягує все більш і більш точні особливості зображення, поки останній шар по суті не приймає рішення про те, що зображено. Наприклад, перший шар може шукати краї, перегини та кути, а проміжні шари інтерпретувати основні риси, шукати спільні форми або компоненти, наприклад, риб або мурах.

Принцип роботи

ред.

Щоб нейронна мережа почала малювати картини, на її вхід подається зображення білого шуму і ставиться завдання - знайти в ньому певну форму і посилити її. Наприклад, намалювати мураху. Це потрібно для того, щоб зрозуміти, чи навчилася нейронна мережа розпізнавати той чи інший образ. Наприклад, її навчали впізнавати мураху за певними характеристиками: шість ніг, два вусики та черевце. При цьому форма і колір предмета не повинні впливати на рішення (мураха можете бути різного розміру, кольору або орієнтації). Мережа навчається, отримуючи багато прикладів того, про що вона повинна дізнатися. Щоб переконатися, що характерні риси предмету розпізнані коректно, потрібно дати змогу мережі самостійно відтворити даний об'єкт. Нейронній мережі можна і не задавати кінцевий результат. Якщо на вхід подати будь-яку картинку і вказати рівень, який буде з нею працювати, то він поліпшить все, що в його компетенції.

Якщо ми вибираємо шари вищого рівня, які визначають більш складні функції в образах, як правило, з'являються складні конструкції і навіть цілі об'єкти. Ми задаємо ціль для кінцевого рівня - побачити конкретний об'єкт, це створює петлю зворотного зв'язку: якщо листя виглядає трохи як мурахи, нейронна мережа буде шар за шаром підсилювати елементи, притаманні мурахам, поки буде виконуватися ітерація. При виборі шарів вищого рівня, які визначають більш складні функції в образах, виникає можливість появи комплексних образів чи навіть об'єктів. Ця нейромережа навчалася на зображеннях тварин, але так як дані знаходилися на високому рівні абстракції, мережа створює нові форми тварин з вже існуючих елементів.

Процес навчання DeepDream

ред.

Навчання починається із створення колекції, розміром 200-1000, навчальних зображень. Найкраще використовувати однотипні зображення, але треба врахувати нюанси. У деяких випадках можна виявити явну помилку в навчанні. Якщо на деяких фотографіях гантель буде присутня рука, а на інших ні, може виникнути конфлікт при відтворені гантелі. Розмір всіх навчальних зображень повинен бути однаковим і не перевищувати 256х256 пікселів, зберігаються як Truecolor JPG.Потрібно знати про середні показники червоного, зеленого і синього в наборі картинок. Для цього доцільно використовувати інструмент перетворення ImageMagick.

convert *.jpg -average res.pngidentify -verbose res.pngСтворюється робоча папка <caffe_path>/models/MYNET/images. В вкладеній папці 'images' починаючи з нуля кожній вкладеній папці буде відповідати власній категорії ‘images/0/firstimage.jpg’, ‘images/1/secondimage.jpg’,.... Кожен рядок в текстовому файлі train.txt (розташований в робочій папці) повинен містити шлях до зображення з номером категорії зображення.

images/0/firstimage.jpg 0

images/1/secondimage.jpg 1

Файли deploy.prototxt, train_val.prototxt і solver.prototxt [2] потрібно розмістити в робочій папці.

Редагування коду

ред.
  1. Файл train_val.prototxt. Рядки 13-15 і 34-36 визначають середні значення синього, зеленого і червоного каналів. В рядках 917, 1680 2141 і 2393 num_output повинен відповідати кількості категорій, тобто кількістю папок в каталозі з зображеннями.
  2. Файл deploy.prototxt. Рядок 2141, num_output повинен відповідати кількості категорій.
  3. Файл solver.prototxt. Важливо змінити наступні значення:
    • display: 20 - друкувати статистику після кожних 20 ітерацій
    • base_lr: 0.0005 - швидкість навчання (learning rate), можна змінювати. base_lr можна адаптувати виходячи з результатів.
    • max_iter: 200000 - максимальна кількість ітерацій для навчання.
    • snapshot: 5000 - як часто буде зберігатися прогрес. Це значення обов'язково потрібно якщо знадобиться зупинити навчання.

Стратегія та методи покращення результату нейронної мережі

ред.
  • Дерева рішень: C4.5. Існує безліч різних алгоритмів на основі дерев рішень. Краще використовувати C4.5, який має деякі переваги в порівнянні з класичним алгоритмом CART. Наприклад, CART працює тільки з бінарними випробуваннями (так/ні), але C4.5 підтримує більш ніж два нащадки вузла.
  • Алгоритм кластеризації методом k–середніх був створений для впорядкування множини об'єктів в порівняно однорідній групі. Дія алгоритму починається з обрання початкових представників кластеру й продовжується ітеративним розподілом даних до кластерів. Послідовність ітерацій виконується до моменту конвергенції.
  • Метод опорних векторів (англ. SVM). На сьогодні цей клас алгоритмів надає користувачам надійні розрахунки для вирішення задач класифікації. Він не вимагає наявності великої кількості тренувальних випадків, добре працює з багатовимірними завданнями, що робить його дуже корисним для роботи з великими даними (англ. Big Data).

Джерела

ред.
  1. Mordvintsev, Alexander; Olah, Christopher; Tyka, Mike (2015)."DeepDream - a code example for visualizing Neural Networks".
  2. Mordvintsev, Alexander; Olah, Christopher; Tyka, Mike (2015)."Inceptionism: Going Deeper into Neural Networks".
  3. Szegedy, Christian; Liu, Wei; Jia, Yangqing; Sermanet, Pierre; Reed, Scott; Anguelov, Dragomir; Erhan, Dumitru; Vanhoucke, Vincent; Rabinovich, Andrew (2014). "Going Deeper with Convolutions" (PDF).Computing Research Repository.
  4. DeepDream наGitHub
  5. "Топ-10 алгоритмів машиного-навчальння та аналізу даних" (англ. Top-10 machine-learning and data-mining algorithms)
  6. Deep learning framework Caffe by the BVLC