Хабрахабр

Превращаем робот-пылесос в универсального солдата

Я посмотрел пару курсов, поучаствовал в соревновании на Kaggle… "чем бы еще заняться?". Все началось с увлечения глубоким обучением, нейронными сетями и далее по списку. Тут мимо как раз по своим делам проползал робот-пылесос (Xiaomi Vacuum Cleaner V1) и подкинул интересную идею…

Длинное вступление

Надеюсь, она будет полезна людям, которые хотят заниматься машинным обучением, но еще не определились, в каком направлении развиваться. Данная статья — промежуточный итог определенному жизненному периоду. На новом месте много говорили про машинное обучение, но в основном менеджеры, желающие попиариться на хайповой теме. Почти год назад я в очередной раз сменил работу и местожительство. Остальные, встречали тему без особого энтузиазма (еще бы, работать-то им).

Спустя год, могу сказать — тема поразительно объемная. Мне стало интересно, что собой представляет машинное обучение. Давайте разберемся, какие конкретно аспекты доступны для применения в жизни и бизнесе.

  1. Классическое машинное обучение.
    Коротко: все, что было до появления хайпа глубокого обучения (Deep Learning). Если у вас табличные данные по продажам, клиентам, транзакциям и вы хотите увеличить продажи, привлечь клиентов, распознать фроды, вам сюда. Вот неплохие лекции, помогающие понять, как анализировать данные и использовать методы вроде случайного леса, K-means или XGBoost. Мне также понравились микрокурсы на Kaggle и сопутствующее соревнование по предсказанию цены дома. Пожалуй, любой бизнес, у которого есть реальные клиенты (а значит база данных) может применять эти методы. Там много интересного.
  2. Deep Learning.
    Беспилотные авто, беспилотные авто и замена головы Джека Николсона на голову Джима Керри. Но если погрузиться глубже, любая голова пойдет кругом. Здесь распознавание лиц, эмоций, положения тела, вытаскивание семантики из видео и всяческие преобразования видеопотока. Авто-транскрипция и авто-перевод, определение болезней и сорняков, ну вы поняли, практически что угодно. Кроме компьютерного зрения есть еще обработка естественного языка (NLP), обработка и симуляция аудио потока, игровые нейронные сети GAN. Какой бы аспект глубокого обучения вы не выбрали, можете потратить время на:

  • Если вам не терпится поэкспериментировать с новой убойной функцией активации, наворотить кастомных слоев, и чтобы learning rate не просто банально уменьшался, а закручивался в трубочку, то эта область глубокого обучения для вас. Углубление в детали архитектуры нейронных сетей.
    Эта область, на мой взгляд, ближе всего к науке и требует соответствующего багажа знаний по математике и информатике. С точки зрения бизнеса, такими вещами могут заниматься компании, готовые конкретно вкладываться в ресерч. Открывайте свежие научные статьи и начинайте экспериментировать. Для шапочного знакомства на ютубе есть лекции стенфордского университета.

  • Выбор железа широкий и ограничен только размером кошелька. Углубление в детали инфраструктуры.
    Обучение заточенных на распознавание образов нейронных сетей требует машинных ресурсов. Слабый CPU или медленный жесткий диск может стать бутылочным горлышком вашей системы. Думаю, GTX 1070 Ti можно считать хорошим стартом, но не забывайте, что одной лишь видеокартой не решить всех проблем, ибо данные еще нужно подготовить и скормить нейросети. Клавиатура, так и быть, сойдет самая дешевая. Поэтому прикупите дополнительно i5 процессор, 16 гигов оперативки и твердотельный жесткий диск. Облачные сервисы предлагают десятки, если не сотни вариантов, с начальной ценой где-то около 50 центов в час за K80 (примерно тоже, что и GTX 1070 Ti). Другой вариант, Google Cloud, Azure, AWS, Kaggle опять же. Azure дает 200$, с Амазоном не приходилось иметь дела. Гугл дает 300$ депозит, на котором можно потренироваться. Сегодня будет V100"). Мне приглянулся вариант Гугла, потому что можно быстро менять видеокарты ("А, гулять так гулять. Небольшой лайфхак, при подключении к машине в облаке используйте проброс портов: you_user@your_host -L 8888:127. Конечно, по сравнению с зарплатами рок-стар дата сайнтестов из вашего ресерч отдела, эти траты будут сущими копейками. 0. 0. Это позволит запускать удаленный Jupyter на локальном компе. Отдельно хочется сказать про гугловские TPU. 1:8888. Когда работаешь с более менее стандартными моделями, все выглядит красиво, но кастомные модели ведут себя непредсказумемо, если вобще запускаются. Их можно использовать совершенно бесплатно прямо из Google Colab, но сможете ли вы их использовать, вот в чем вопрос.

  • Для беспилотных авто или мобильных приложений в таком случае будет важнее скорость принятия решения, а для медицинских нужд скорее всего низкий уровень ошибок второго рода ("Здоров! Углубление в реализацию в продакшене.
    Эксперименты с архитектурой и участие в соревнованиях, весьма полезные штуки, но в реальности не так уж важно, дает ваша модель точность 85% или 87%. То есть на первый план выходит определение приоритетов. Давай, до свидания!"). Все эти проблемы мы уже имеем с нормальным ПО, но теперь они выходят на другой уровень. Плюс, куча технических вопросов: как выкатить и обеспечить непрерывную работу в продуктовой среде, как дообучать модель на новых данных, как мониторить и оценивать результаты работы, как вылавливать и фиксить баги, наконец. Еще один лайфхак: если держать гиперпараметры в отдельных конфиг файлах, то можно легко восстановить успешные эксперименты. Уже появляются инструменты для контроля версий (Git-LFS, Saturn Cloud), заточенные специально под машинное обучение, но общепринятых стандартов пока не существует, в чем безусловно есть своя романтика.

  • Готовых моделей достаточно, пара десятков строк кода и вуаля: разноцветные квадратики бегают по экрану. Использование готовых моделей и transfer learning.
    Самая простая и привлекательная часть машинного обучения, для тех, кто хочет увидеть, как же это все работает в реальности. Есть даже готовые решения в железе, если хочется распознавания on-site (вот кстати отличный обзор на них). Не нужно тратить время и ресурсы на тренировку модели с нуля. Готовые модели тренированы на стандартных датасетах. Кажется, бери да пользуйся, но и тут есть свои ньюансы. Возможно, баба Маша с метлой обойдется бизнесу гораздо дешевле. Поэтому, чтобы узнать, кто ворует сметану у вашего бизнеса: кот Васька или кот Семен, придется таки тюнинговать модель (transfer learning).

Основная часть

К тому времени, когда мимо проехал робот-пылесос, мне хотелось сделать простое функционирующее приложение или устройство с использованием машинного зрения. Тут мы возвращаемся к началу поста. Возможностей применения полно. Так появилась идея, дать пылесосу еще один канал связи с внешним миром.
Если прикрутить к нему небольшую камеру, можно использовать готовые модели или натренировать свою. Можно придумать какую-нибудь игру в физическом пространстве с использованием GAN или поиграться с NLP моделями и научить его разговаривать на манер голосового помощника. От точечной очистки загрязнений до преследования пса. Короче, время обучить собственного домашнего робота.

Например, поискать на Хабре, что уже сделано до нас. Начинать конечно нужно с простых вещей. 04, а значит, при наличии рута, можно, например,управлять с джойстка. Оказывается "у ней внутре" Ubuntu 14. Взять готовую камеру с вайфаем и акуумулятором или плату для inference вроде Jetson Nano? Если дернуть данные лидара, то под рукой окажется не много ни мало, прототип беспилотного авто.
Выбор начинается уже на этом этапе. Каждый подход по своему интересен, но я старался держаться основной цели: сделать простое функционирующее устройство с использованием машинного обучения, поэтому выбрал первый вариант. А может собрать камеру, вайфай и аккум на Raspberry Pi?

Работает отлично, еще осталось время пофантазировать. Пока камера была в пути, рутнул пылесос и покатался на нем. Камера, подвешенная достаточно высоко, фиксирует загрязнение (тут вспомнился челендж про грязные тарелки ) и отправляет координаты пылесосу. Допустим Гектор притащил с улицы палку и дербанит ее, лежа на своем любимом коврике. Достаточно разместить камеру на самом пылесосе и запускать движение вперед при обнаружении пса, затем полный круг и возвращение на базу. С охотой на пса все еще проще.

Сейчас сделаем кое-что совсем простое. Но это планы на будущее. Для этого нам понадобятся два потока, связанные общей очередью. Пусть пылесос издает разные звуки в зависимости от объекта, попавшего в поле зрения камеры.

  • Модель (я использовал одну из готовых моделей TensorFlow model zoo) распознает объект и кладет его название в очередь.
  • Другой поток забирает название объекта из очереди и формирует URL к звуковому файлу.
  • Путь передается пылесосу, а тот стучится по полученному адресу за файлом по ftp или http.
  • В папке каждого объекта несколько файлов для разнообразия. Файл выбирается случайным образом. Кроме того, есть параметр вероятности воспроизведения звука, чтобы пылесос, фиксируя Гектора на скорости 10 fps, не верещал как сумасшедший, а сообщал что-нибудь убедительно и с достоинством.

На схеме выглядит вот так:

Вот так работает:

Промежуточный итог

Я рад, что не стал городить слишком много сразу всего. Цель достигнута: пылесос разговаривает. Следующий шаг связать распознавание образов с потоком, регулирующим движение, а также попробовать transfer learning.

На мой взгляд не существует единой точки входа. Искусственный интеллект, тема настолько объемная, что сложно определить, за что взяться в первую очередь. Выбирайте то, что интересно лично вам, и да пребудет с вами сила довести начатое до конца. Совсем не обязательно начинать с вычисления сложных производных или курсов программирования на Python (хотя и то и другое безусловно полезно).

S. P. Комментарии и пулл реквесты приветствуются. Детали реализации лежат в репозитории.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть