![image](https://habrastorage.org/getpro/habr/post_images/d28/2c4/752/d282c47520a6219494a2a8e913a44dae.jpg)
Недавно на Хабре проскакивал пост vfdev-5 о DIGITS. Давайте поподробнее разберёмся что это такое и с чём его едят. Если в двух словах. Это среда, которая позволяет решить 30-50% задачек машинного обучения на коленке в течении 5 минут. Без умения программировать. Ну, при наличии базы, конечно. И более-менее адекватной карточки от NVIDIA.
Где взять
Официальная страница. Качается потом всё отсюда. Там же инструкции. Официально поддерживается Ubuntu 14 и Ubuntu 16. Есть deb-пакет для 14ой убунты и докер для неё же. Под 16ую — инструкция по сборке. Собирать нужно сначала caffe, потом DIGITS. Развлекуха где-то на пару часов.
Что такое в трёх словах
DIGITS — это визуальная Front-end обёртка для известных фреймворков (caffe и Torch 7). Позволяет из коробки обучать/дообучать известные/свои сетки. Есть большое число подготовленных кейсов.
По форм-фактору, это веб-сервис который запускается в терминале и доступен потом по адресу «localhost:5000/» на локальной машине. выглядит вот так:
![](https://habrastorage.org/files/ea2/7ad/21c/ea27ad21c14a4e4cb3d75a1ec8793523.png)
Почему-то навевает Юпитером. Плюс, оно похоже на TensorBoard. К сожалению, я не работал с ним много чтобы сравнить.
Как работать с этим чудом
На главной есть всего две большие кнопочки. Они то нам и нужны. Сначала нужно ткнуть в «New Dataset»:
![](https://habrastorage.org/files/6e2/d0e/9d5/6e2d0e9d5ee64cd195499a6c0e4cf385.png)
По умолчанию DIGITS умеет работать с датасетами заточенными под:
- Классификацию — обучается распознавать принадлежность N классов изображений
- Поиск объектов — обучается искать прямоугольник объекта на изображении. Завтра я опубликую более подробную статью про этот кусок.
- Сегментацию — пиксельная сегментация изображения. Есть тьюториал, но я не разбирался.
- Процессинг — Не совсем понял что это. Тьюториалов тоже нет.
Рассмотрим классификацию, как самый простой из вариантов.
![](https://habrastorage.org/files/ee5/a9e/692/ee5a9e69278f4d5dbd411a7942312436.png)
На этапе подготовки датасета digits пережимает базу в удобный для себя формат, чтобы быстро работать с ним, не напрягая хард миллионами запросов. В принципе, всё ясно:
- Блок слева — описывает в каком формате будет подготовлено изображение. Стандартное правило machine learning: оно должно выглядеть так, чтобы человек успешно распознавал любое изображение из базы. Не больше и не меньше.
- Блок справа про базу. Там нужно показать где лежит база. Есть два варианта данных, которые DIGITS может пережевать. Первый формат: N папок, в каждой папке свой класс. Второй формат: изображения лежат где угодно, но есть текстовый файл формата "<путь> <имя класса>". % for validation — какая часть базы будет использоваться для тестирования во время обучения. %for testing — сколько используется для итогового тестирования.
- Блок снизу — формат базы, которую DIGITS подготовит для себя. По сути пользователя это мало касается.
Результат создания базы будет динамично отображаться. А так же будет выведена итоговая статистика по базе:
![](https://habrastorage.org/files/6bf/2fb/00c/6bf2fb00cac04344b1581ecf35cc4b2e.png)
Создание базы завершено! Можно перейти к обучению. Переходим в главное меню и вместо «New Dataset» тыкаем «New Model». Опять выбираем Classification. Здесь параметров чуть больше (1,2). Обязательно нужно выбрать:
- Подготовленную базу в графе Select Dataset
- Используемую сеть
Есть куча более тонких настроек:
- Количество эпох обучения (сколько раз прогонится база)
- Настройка сохранения и тестирования
- Параметры алгоритма спуска: скорости спуска, их изменение по ходу обучения
- Возможность настройки сети: можно изменить существующую, а можно задать свою
- Простейшие приращения датасета: кроп, вычитание среднего
Можно посмотреть как выглядит текущая сеточка:
![](https://habrastorage.org/files/c6d/771/286/c6d7712867d54189918766ff9fcb73f3.png)
Запускаем
Ваш компьютер виснет в мёртвую. Зато вы видите красивые онлайн графички идущего обучения, оценку времени, текущий результат, и.т.д.:
![](https://habrastorage.org/files/13f/932/3be/13f9323bee8f4a10b7d6c060275076b8.png)
После окончания обучения появляется менюшка, которая позволяет сохранить итоговую модельку, распознать одно/несколько изображений. Построить статистику.
![](https://habrastorage.org/files/398/29e/e75/39829ee754da456488ee4040fbebd396.png)
Можно отправлять в продакшн;)
Что ещё
В DIGITS ещё неплохая сетка для детектирования объектов (описания: 1, 2). Завтра я выложу отдельную коротенькую статью на её счёт. Там, к сожалению, не всё так хорошо как хочется.
![](https://habrastorage.org/files/72d/4a6/4b9/72d4a64b915e493291210ee9439739e4.jpeg)
![](https://habrastorage.org/files/be8/281/482/be828148263f434f85ccad8193978a99.jpg)
Имеется возможность настроить корректную пиксельную сегментацию. Но у меня сейчас есть настроенные решения — это не очень интересно. А так, целый пример по работе с DICOM изображениями:
![image](https://habrastorage.org/getpro/habr/post_images/3a3/3ae/194/3a33ae19433e2c0c0f4ee9b590ff5be6.png)
Решение позиционируется как пригодное для задач сегментации по медицинским данным.
Выводы
Уровень знаний необходимый для работы с нейронными сетями потихоньку падает ниже плинтуса. Наверняка есть другие аналоги, или появятся в ближайшее время. Тот же TensorBoard.
Это не значит, что получаемое решение — качественное. Но оно может весьма неплохо работать в некоторых ситуациях. Конечно, хороший тьюнинг, подборка метода, ручная настройка сети — могут значительно улучшить производительность. Но чтобы показать прототип может хватить и DIGITS.
По мне — получился весьма годная обёрточка. Но, что-то его nvidia особо не пиарит и мало поддерживает.