Як навчити і застосувати свою першу глибоку нейронну мережу

Покрокове керівництво з навчання нейронної мережі.

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

У цій статті і в супутньому веб-касти я розповім вам, як використовувати заздалегідь навчену нейронну мережу, а потім поясню, як навчити свою власну. В кінці статті я описав всі необхідні кроки, які дозволять вам встановити і налаштувати повний комплект програмного забезпечення. Але з огляду на те, що цей процес досить складний, я рекомендую вам завантажити віртуальну машину Vagrant, де я вже встановив все, що потрібно. Віртуальна машина позбавить вас від головного болю, пов'язаного з установкою компонентів, і дозволить зосередитися на навчанні і застосуванні нейронних мереж.

Встановлюємо віртуальну машину

Для роботи з віртуальною машиною нам знадобиться комп'ютер з OS X або Linux і вільне ПЗ для віртуалізації Vagrant. Якщо у вас ще немає Vagrant, перейдіть за посиланням і виконайте кроки з розділу «Getting Started» ( «Приступаючи до роботи»).

Після установки Vagrant відкриваємо нове вікно терміналу і створюємо каталог для віртуальної машини за допомогою наступних команд:

Тепер завантажуємо образ віртуальної машини. Розмір образу становить майже 2 ГБ, тому процес завантаження може зайняти деякий час.

Завантаживши образ, запускаємо новий віртуальний сервер:

Входимо в віртуальну машину:

Використовуємо попередньо навчену нейронну мережу

Я покажу вам, як працювати з фреймворком для глибокого навчання Caffe. розробленим Янціном Цзя (Yangqing Jia) і командою Berkeley Vision and Learning Center (BVLC). Даний фреймворк має активне співтовариство розробників, повністю відкритий вихідний код (в той же час попередньо навчені моделі не можна використовувати в комерційних цілях), а також масу документації, так що він може послужити хорошою відправною точкою. Щоб почати роботу, переходимо в каталог фреймворка:

Ми побачимо ряд інформаційних повідомлень, останнє з яких матиме такий вигляд:

Як навчити і застосувати свою першу глибоку нейронну мережу

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

У файлової системи віртуальної машини вони з'являться в наступному каталозі:

Самостійно навчаємо нейронну мережу

Однією з перших завдань, для вирішення яких були застосовані згорткові нейронні мережі (convolutional neural network), була задача розпізнавання рукописних цифр. Ян Лекун (Yann LeCun) зробив великий внесок в цю область знань в 90-і роки, а версія його архітектури LeNet включена до складу Caffe. Завантажимо набір даних MNIST. що складається з 70 000 зображень рукописних цифр:

Буде виведено велику кількість інформаційних повідомлень, і через кілька хвилин процес завершиться. Тепер виконаємо команду:

Ми повинні побачити створений файл з наступним ім'ям:

Даний файл містить ваги навченої нейронної мережі. Тепер можна протестувати мережу на різних зображеннях. Я підготував кілька тестових зображень у віртуальній машині, але ви можете використовувати будь-яке зображення білої цифри на чорному тлі.

В результаті отримаємо повідомлення про те, що з імовірністю 100% це цифра 4, що відповідає дійсності!

Керівництво по установці

Нижче представлені команди, які я виконав, щоб створити віртуальну машину, описану вище. Якщо ви використовуєте Vagrant, створіть чистий образ Ubuntu 14.04:

Після створення і ініціалізації віртуальної машини, входимо в неї і запускаємо процес установки CUDA. Щоб зібрати Caffe, необхідні заголовки та бібліотеки CUDA, навіть якщо ми збираємося працювати тільки на CPU. Тому нам не обійтися без пакета CUDA, розмір якого становить 900 МБ.

В процесі установки ми повинні задати різні параметри. Необхідно відмовитися від установки драйвера (оскільки у віртуальній машині ми не можемо використовувати GPU), але при цьому встановити приклади і SDK, залишивши шляху за замовчуванням. Після цього потрібно додати в змінну середовища LD_LIBRARY_PATH шлях до SDK.

Тепер встановимо ряд залежностей за допомогою apt-get:

Фреймворк для журналирования від Google недоступний через репозиторій, тому його необхідно зібрати з вихідних кодів:

Завантажуємо вихідний код Caffe:

CUDA має проблеми з компілятором за замовчуванням gcc 4.8, тому потрібно замінити його на gcc 4.6:

Для роботи Caffe також потрібен цілий ряд модулів Python, які можна встановити згідно зі списком за допомогою pip. Цей процес може зайняти деякий час:

sudo pip install -r python / requirements.txt

У поточній версії Caffe не передбачена можливість зміни компілятора, тому необхідно внести деякі зміни в make-файли:

Нарешті, завантажуємо попередньо навчену нейронну мережу і мітки: