У нас в гостях специалист с 15-летним опытом в Machine Learning который совмещает пару высокоуровневых должностей в разных компаниях — Head of ML в Cherry Labs и CTO в Rembrain. За полтора часа мы обсудили: позабытые ML-фреймворки и перспективы Reinforcement Learning, выяснили, какие платы с NPU лучше подходят для pet-project и зачем норвежцам роборуки.

Как обычно, для Хабра мы сделали текстовую выжимку всего самого интересного из рассказа Антона. Полную запись смотрите на YouTube.

Когда студенческий стартап выходит из под контроля

Моя профессиональная история началась в ВУЗе, в компании пары одногруппников.

Учились на Физтехе и решили сделать курсовую по защите информации не халтурно, а интересно. Собрали для нее систему распознавания людей по радужке глаза и завертелось

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

Брались за проекты по распознаванию вен на руках, биометрическому сканированию лиц и так далее. То один проект, то другой, то третий — они цеплялись друг за друга. Мы и сами не заметили, как начали помогать разным фирмам с computer vision на начальных этапах развития. До нейронных сетей это были сильно специализированные проекты, но потом дела пошли в гору. В итоге у нас закрепилось два направления: консалтинг и разработка на заказ с формированием команд под каждый проект. Так я и познакомился с Cherry Labs и стал тесно с ними сотрудничать, а затем решил попробовать сделать свой продукт под брендом Rembrain.

Нейронки первые мои

Как вы понимаете, начали мы еще до появления нейронок, и я застал весь этот бум. Мне кажется, более-менее приличные фреймворки начали появляться примерно в 2014 году и то, сперва это были скорее отдельные репозитории с сетками, которые еще нужно умудриться запустить.

Я долго сомневался, стоит ли вообще покупать нормальную видеокарту. Перспективы нейронных сетей тогда казались туманными. Поэтому сперва нашел фреймворк TinyCNN и пытался обучать сверточные сетки на процессоре

Экспериментировал с Theano. Кажется, именно там появились одни из первых сверточных сеток, но это была довольно странная библиотека. Она быстро умерла, и на смену пришел Caffe. Эта среда мне во многом нравилась, потому что там все очень прозрачно, в отличие от высокоуровневых фреймворков, где порой уже не понимаешь, как работают те или иные фичи. 

Следующее, что мы активно использовали – Keras, потому что он вставал поверх других фреймворков, в том числе Caffe. Там уже чувствовалось, что часть функциональности тебе как бы отрубили, а новую еще не дали, но взамен появилась скорость. Однако, у Caffe были фатальные недостатки: нельзя было сделать нормальный дебаггинг сети, не работали рекуррентные сети. От этой среды тоже пришлось отказаться.

Первые версии TensorFlow не вызывали никакого желания ими пользоваться, но альтернатив не было. Некоторые сетки иначе просто не запускались. Сейчас он уже почти помер. Из плюсов все автоматически выгрузится в TensorFlow Lite. А еще там не будет проблем типа «а где это квантизовать по дороге?»

Однако в основном мы все таки используем PyTorch, а дальше тащим свои наработки в подходящий инференс-фреймворк. С выгрузкой в TensorFlow Lite там, кстати, сложнее. Для этого есть два подхода. Первый — через ONNX, дальше в TensorFlow, дальше из TensorFlow в TensorFlow Lite. Разбираться, где что сломалось, надо, соответственно, в трех местах. Второй подход — Pinto Model Zoo, который конвертируется, по-моему, через OpenVino-овский формат.

Так, например, делали Elderly Care — детектор падений со встроенной аналитикой для наблюдения за пожилыми людьми. С помощью One-Shot Learning мы по нескольким примерам прогнозировали, какие события в кадре требуют внимания врача, а какие не являются аномалией в условиях данного дома. Этот алгоритм уже спас несколько человеческих жизней. 

Когда новые фреймворки не нужны

Да, есть всякие интересные штуки, типа фреймворка Google JAX, но мы пока не планируем на них пересаживаться. Дело в том, что мы редко занимаемся исследованиями, скорее делаем конкретные продукты. Можем исследовать отдельную проблему, например поиск key point для детекции жестов — но это будет решение под конкретную задачу, которое просто обходит некоторые углы и работает чуть быстрее и лучше других.

Мы не замахиваемся на какую нибудь сетку с временной памятью — то, чем  любит заниматься, например, DeepMind, а для прикладных задач хватает любого из распространенных фреймворков. В 80% проектов нужна сетка, делающая детекцию, которая найдет кейпоинты, сделает сегментацию. Весь этот backbone берется из репозиториев из предобученных сеток. Максимально много их на PyTorch и чуть поменьше на TensorFlow.

Если JAX окажется эффективным и удобным, MMDetection переползет на этот фреймворк, сохранит всю свою верхнюю инфраструктуру со своими детекционными сетками, и с ним можно будет работать. Но самостоятельно проходить этот путь в рамках наших проектов обычно бессмысленно, разве что заказчик настаивает, что вся работа должна быть сделана на определенном фреймворке или конкретном железе, которое поддерживает только JAX, но это вряд ли.

Когда приходится делать что-то для смартфонов — берешь TensorFlow Lite, а для всего остального есть PyTorch

То же самое касается и нейросетей. Иногда заказчики интересуются, можно ли сделать проект на конкретной версии YOLO. Я каждый раз объясняю, что одно дело — исследовательские статьи и совсем другое — продуктовые фреймворки, которые хорошо конвертируются, стабильно обучаются и дают предсказуемый результат. К ним предъявляются другие требования и не факт, что та пара процентов average precision, которые дает переход на новейшую нейросеть, стоит потенциальных проблем. Конечно, есть задачи, где эксперименты оправданы, но если делаешь например, детекцию людей для сбора статистики — можно обойтись отлаженными решениями. 

«Железный» вопрос

С самого начала занимаемся железом и за 15 лет через наши руки прошла куча разных плат с NPU, начиная с DaVinci, Blackfin, Jetson ТК1, и с ними всегда было больно работать. До сих пор на многих платах сталкиваешься с проблемами с конвертацией сеток. 

Использование таких платформ накладывает сильные ограничения на то, что можно разрабатывать на практике, и, следовательно, на итоговый проект. Например, заказчик хочет сделать бюджетное устройство. Мы понимаем, что под его бюджет подходят 3-4 платформы, но какая из них подойдет под проект? Какую и куда сетку завести, какие должны быть фреймворки?

Однажды нас попросили перенести сетку на один из первых процессоров Qualcomm с NPU. Он кое-как, медленно работал под TensorFlow Lite. Обосновали это тем, что нативная реализация по тестам будет в 5 раз быстрее. Мы решили проверить. Пытаемся портировать туда сетку и видим ошибку: «слой суммирования не поддерживается». Ой блин... Мы что-то придумали, сетку переделали, но было еще сложение двух слоев. И слой сложения тоже не поддерживался. Фактически там нормально работали только полносвязные сетки, свертки и ReLu. И только в одну сторону

Прошлым летом мы с той же фирмой работали на Qualcomm, и надо признать, что ситуация стала лучше. Да, многие сетки не портируются, а другие портируются с ошибками, но как минимум уже заработали concatination и Add. Пропали неопознанные ошибки, портирование стало стабильнее. В общем, работать с computer vision становится приятнее.

Лучшие платы с NPU, или что брать, чтобы не было больно

Я сравнивал популярные платформы по удобству фреймворков, по тому насколько быстро на них можно завести Deep Learning или проект по машинному зрению. Если нужно что-то под хобби или небольшой MVP-проект, то нормальные варианты начинаются от 100$ (смотрите таблицу).

Можно выделить три варианта. Все остальное в основном «китайчатина» с которой нужно долго разбираться и запариваться. 

  1. NVIDIA Jetson, так как проще всего работать с TensorRT и OpenVINO. Однако, даже за рубежом их сейчас сложно купить. 

  2. Второй вариант по простоте — разработки Intel. Neural Compute Ting Stick 2, платы с Movidius Myriad X на борту, либо видеокамеры, в которые встроены ускорители DepthAI OAK от Luxonis.

  3. Еще одно неплохое решение — Google Coral. По крайней мере, это хороший вариант, если не выходить за рамки TensorFlow и не нацеливаться на запуск каких-то крутых нейросетей. С Google Coral все понятно, все просто все запускается, и в сети много примеров и исходников. 

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

Перспектывы коботов и недостающий секретный ингридиент

Робототехника сейчас доступна, как никогда. Много open source-проектов 3D-печатных манипуляторов, а заводского коллаборативного робота (кобота) —  например, роборуку UR3 — можно купить за 3 тыс. долларов. Это будет шестиосевой манипулятор, который безопасен для окружающих людей и может достать до любой точки в определенном радиусе.

Нет никакой магии в том, чтобы сконнектить роборуку с нейросетью. Да, там своя математика, но не что-то сверхсложное, главное — понимать, как правильно упаковать сетки. В результате появляется возможность научить робота чему-то полезному

Первое, что приходит в голову — сортировка посылок на последней миле склада: приходят несколько коробок, из них нужно выбрать правильные объекты, уложить их в большую коробку и отправить заказчику. Другой вариант — machine tending — обслуживание станков и операции с разнообразными металлическими заготовками. На первый взгляд, с такими задачами может справиться обычное машинное зрение, но в таких кейсах каждый день встречаются новые, незнакомые роботу объекты. Тут-то и вступают в дело нейросети. 

Допустим, возникла ситуация в которой робот не знает, что делать. Он вызывает оператора, который удаленно подключается к камерам, берет управление на себя и выполняет необходимые действия. Все команды тут же сохраняются и уходят в обучение.

Для дообучения робота хватает 20-30 показов. Затем машина с вероятностью 95% самостоятельно справлялся с новым объектом, но еще одна неожиданность, и ей снова нужна помощь

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

Думаю, это то, куда мы идем. Роботы создают новые рабочие места, но более высокооплачиваемые и интеллектуальные, потому что машины должен кто-то обслуживать. Например, в прошлом году обложку для одного из выпусков «Cosmopolitan» сгенерировала DALL-E 2. Тогда еще писали, что на это ушло 20 секунд, вот только команда креативщиков из пяти человек два или три дня генерировала идеи, перебирала промты и просматривала тысячи картинок.

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

Пока что разработка упирается в «заварим-ка эмбеддеры для разных входных данных и дальше между ними сделаем трансформер». С другой стороны, мультимодальные Reinforcement Learning-подходы будто бы приближают нас к чему-то подобному, но проблемы, озвученные при появлении этого подхода, актуальны и по сей день. Те же «умные» автомобили дошли до некоторого предела. Они по прежнему теряются, когда им на капот поставят дорожный конус и сейчас фактически стагнируют, как технология. Буст, который мы получили за счет трансформеров, судя по всему, выработался. По крайней мере я не вижу качественных улучшений.

Или другой пример — Google ставит в своих лабораториях десятки роботов, чтобы на их примере научить алгоритм хватать предметы. Выглядит впечатляюще, но в то же время это демонстрирует некую неполноценность Reinforcement Learning. Наглядно видно, как много времени и неуклюжих попыток нужно, чтобы алгоритм, освоил один (!) навык, который маленькие дети приобретают без особого труда.

На данный момент никто не понимает, что с этим делать. Сеточки крутятся, качество улучшается, новые задачи придумываются и потихоньку решаются, но все равно чего-то не хватает. И трансформеры — явно не тот секретный ингредиент. Нейросети отчасти научились «осознавать» окружающий мир, но до сих пор теряются, когда нужно манипулировать объектами в нем. Это значит, нам еще есть над чем работать, роботы — это будущее. Делайте стартапы про роботов

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