image

Недавно на Хабре проскакивал пост vfdev-5 о DIGITS. Давайте поподробнее разберёмся что это такое и с чём его едят. Если в двух словах. Это среда, которая позволяет решить 30-50% задачек машинного обучения на коленке в течении 5 минут. Без умения программировать. Ну, при наличии базы, конечно. И более-менее адекватной карточки от NVIDIA.

Где взять


Официальная страница. Качается потом всё отсюда. Там же инструкции. Официально поддерживается Ubuntu 14 и Ubuntu 16. Есть deb-пакет для 14ой убунты и докер для неё же. Под 16ую — инструкция по сборке. Собирать нужно сначала caffe, потом DIGITS. Развлекуха где-то на пару часов.

Что такое в трёх словах


DIGITS — это визуальная Front-end обёртка для известных фреймворков (caffe и Torch 7). Позволяет из коробки обучать/дообучать известные/свои сетки. Есть большое число подготовленных кейсов.

По форм-фактору, это веб-сервис который запускается в терминале и доступен потом по адресу «localhost:5000/» на локальной машине. выглядит вот так:


Почему-то навевает Юпитером. Плюс, оно похоже на TensorBoard. К сожалению, я не работал с ним много чтобы сравнить.

Как работать с этим чудом


На главной есть всего две большие кнопочки. Они то нам и нужны. Сначала нужно ткнуть в «New Dataset»:


По умолчанию DIGITS умеет работать с датасетами заточенными под:

  1. Классификацию — обучается распознавать принадлежность N классов изображений
  2. Поиск объектов — обучается искать прямоугольник объекта на изображении. Завтра я опубликую более подробную статью про этот кусок.
  3. Сегментацию — пиксельная сегментация изображения. Есть тьюториал, но я не разбирался.
  4. Процессинг — Не совсем понял что это. Тьюториалов тоже нет.

Рассмотрим классификацию, как самый простой из вариантов.



На этапе подготовки датасета digits пережимает базу в удобный для себя формат, чтобы быстро работать с ним, не напрягая хард миллионами запросов. В принципе, всё ясно:

  • Блок слева — описывает в каком формате будет подготовлено изображение. Стандартное правило machine learning: оно должно выглядеть так, чтобы человек успешно распознавал любое изображение из базы. Не больше и не меньше.

  • Блок справа про базу. Там нужно показать где лежит база. Есть два варианта данных, которые DIGITS может пережевать. Первый формат: N папок, в каждой папке свой класс. Второй формат: изображения лежат где угодно, но есть текстовый файл формата "<путь> <имя класса>". % for validation — какая часть базы будет использоваться для тестирования во время обучения. %for testing — сколько используется для итогового тестирования.

  • Блок снизу — формат базы, которую DIGITS подготовит для себя. По сути пользователя это мало касается.

Результат создания базы будет динамично отображаться. А так же будет выведена итоговая статистика по базе:


Создание базы завершено! Можно перейти к обучению. Переходим в главное меню и вместо «New Dataset» тыкаем «New Model». Опять выбираем Classification. Здесь параметров чуть больше (1,2). Обязательно нужно выбрать:

  • Подготовленную базу в графе Select Dataset
  • Используемую сеть

Есть куча более тонких настроек:

  • Количество эпох обучения (сколько раз прогонится база)
  • Настройка сохранения и тестирования
  • Параметры алгоритма спуска: скорости спуска, их изменение по ходу обучения
  • Возможность настройки сети: можно изменить существующую, а можно задать свою
  • Простейшие приращения датасета: кроп, вычитание среднего

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


Запускаем


Ваш компьютер виснет в мёртвую. Зато вы видите красивые онлайн графички идущего обучения, оценку времени, текущий результат, и.т.д.:



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



Можно отправлять в продакшн;)

Что ещё


В DIGITS ещё неплохая сетка для детектирования объектов (описания: 1, 2). Завтра я выложу отдельную коротенькую статью на её счёт. Там, к сожалению, не всё так хорошо как хочется.




Имеется возможность настроить корректную пиксельную сегментацию. Но у меня сейчас есть настроенные решения — это не очень интересно. А так, целый пример по работе с DICOM изображениями:

image

Решение позиционируется как пригодное для задач сегментации по медицинским данным.

Выводы


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

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

По мне — получился весьма годная обёрточка. Но, что-то его nvidia особо не пиарит и мало поддерживает.
Поделиться с друзьями
-->

Комментарии (22)


  1. Nidirg
    18.10.2016 00:32

    Интересно, такой инструмент можно применить в таком конкурсе от ФПИ?

    Или потребуется больше времени чем 15 минут?

    Конкурс


    1. ZlodeiBaal
      18.10.2016 00:37

      Боюсь ссылка не прикрепилась к вопросу. По лицам который? Нет, это немного другая задача. Для этого шаблона в DIGITS нет)


      1. ZlodeiBaal
        18.10.2016 01:21

        Ссылку увидел. Про сетку которая детектирует объекты я завтра расскажу. С ней не всё так просто.
        А так, всё всегда зависит от датасета. Хороший датасет — можно сетку за пару дней запустить. Плохой — с ним можно месяц провозиться.


  1. Breads
    18.10.2016 04:39

    Уровень знаний упал до «скачал — включил — распознал» уже с появлением caffe, мне кажется. Но, в любой нестандартной ситуации, все-равно необходимо ковырять внутренности в независимости от того, какая библиотека используется.


    1. tomzarubin
      18.10.2016 08:53
      +1

      Так работает если надо понять «котик на картинке или Петя». В конкурсах kaggle такое уже не сработает, в SDC тоже, в медицине аналогично. Т.е., побаловаться да— можно дёшево и имея поверхностное представление о том что делаешь.


      1. Strepetarh
        18.10.2016 17:21

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


        1. tomzarubin
          20.10.2016 11:23

          Не согласен дважды.
          Во-первых, с тем, что Призма— не баловство.
          Во-вторых, что и её можно сделать не разбираясь особо. В копировании стиля художников больше «математики», чем «кода». То же выделение признаков. Не обладая знаниями теории это невозможно: скопировать мазки, цвета, паттерны. И как это превратить в фичи и засунуть в архитектуру сети, ну а потом реализовать в коде.


          1. Strepetarh
            20.10.2016 13:37

            Конечно, style-transfer это сложная математическая задача, бесспорно. Я про то, что разработчики Призмы её не решали (насколько я знаю), а использовали уже готовое решение. А под не-баловством я подразумевал, что это конечный продукт, который может заинтересовать пользователя (пусть даже и в развлекательных целях).


  1. k2m30
    18.10.2016 07:18
    +3

    А есть что-то такое для text processing/generation?


    1. ZlodeiBaal
      18.10.2016 20:19

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


  1. platon23
    18.10.2016 10:12
    +5

    Открыл статью, ушел пить чай на 15 минут, пришел, стал супер-мега-про машинного обучения! *profit*


    1. evil_me
      18.10.2016 14:02

      Не получится, в 15-минутном процессе зашита как минимум развлекуха на пару часов :)


      1. platon23
        18.10.2016 14:38

        На самом деле, у меня ушло пол часа на то что бы разобраться как это собрать.


  1. xenohunter
    18.10.2016 10:25
    +3

    Заголовок настолько отчаянно-жёлтый, что даже и не вызывает отторжения.


  1. SLASH_CyberPunk
    18.10.2016 11:12
    +1

    Надо бы отметить, что это ML по графике и что 30-50% задач по ML, как то много для графики…


  1. defecator
    18.10.2016 11:28

    ни разу не понял следующий момент.
    Ну обучил я сеть, всё пучком, но как использовать потом данные?
    В какую сеть грузить?


    1. ZlodeiBaal
      18.10.2016 11:29

      Сегодня вечером будет пример в следующей статье. Там все просто, строчек 15кода.


      1. Psychosynthesis
        18.10.2016 19:36

        Вы её, пожалуйста, как-нибудь также пожелтее обзовите. Чтоб в глаза бросалось. Ну или сюда отпишите как запостите.

        А то мне тоже не очень понятно, чё дальше-то с полученной моделью делать…


        1. ZlodeiBaal
          18.10.2016 19:57

          Так уже же! https://habrahabr.ru/company/recognitor/blog/312472/
          Или заголовок не настолько жёлтым вышел?
          Модель как использовать там в конце написано.


          1. Psychosynthesis
            18.10.2016 20:30

            А… Это я просто слоупок. Спасибо.


  1. Miay
    18.10.2016 11:33

    А цифры на картинках эта штука быстро разгадает?


    1. ZlodeiBaal
      18.10.2016 11:33

      MNIST быстро:)