В этом материале рассказывается история разработки демонстрационного стенда, использующего возможности глубокого обучения. Разработка велась совместно с партнерами «Ниеншанц-Автоматика» - командой BrainGarden.
В статье отмечен каждый этап разработки, основная идея и, конечно же, трудности, которые возникали в процессе. Команда BrainGarden поделилась своими впечатлением по работе с новым для них оборудованием – ускорителями серии MUSTANG.
BrainGarden - это команда специалистов в области разработки интеллектуальных систем, в том числе систем компьютерного зрения. Команда работает как R’n’D лаборатория, решая сложные задачи для своих клиентов, связанные с робототехникой и автоматизацией производства, а также вкладывается в собственные проекты. Один из основных подходов, которого придерживается команда, это активное использование технологий симуляции (VR). BrainGarden обучает модели на синтетических данных, которые генерируются с помощью 3D-редакторов, например, Unreal Engine или Blender.
Концепт для демостенда начал зарождаться в конце 2018 года, когда были получены первые образцы плат MUSTANG-V100-MX8, и начались эксперименты с OpenVINO.
С помощью инструментов в тулките и набором готовых моделей из «зоопарка» (прим. Open Model Zoo), стало возможно с минимальными затратами запустить несколько нейросетей для видеоаналитики, например, идентификация людей в кадре и определения нескольких атрибутов: пол, возраст, эмоциональный настрой. Это решение мы показали на нашем ежегодном техническом мероприятии в Новосибирске. По большому количеству отзывов и вопросов во время мероприятия стало очевидно, что развивать направление необходимо с курсом автоматизацию промышленных процессов, и необходимо подготовить решение, которое можно будет легко представить в реалиях производства.
После долгих обсуждений и экспериментов с оборудованием в офисе, к разработке была привлечена команда BrainGarden, которым было предложено сделать оценку сложности реализации, подготовленных черновых идей и помочь в их реализации. Как итог, был выбран концепт «дефектоскопа» – алгоритма, способного классифицировать несколько типов деталей, а также проводить инспекцию поверхности на наличие вмятин, царапин и дефектов покраски.
На этапе проектирования было рассмотрено несколько вариантов реализации алгоритма поиска дефектов, но в итоге был выбран весьма эффективный подход – синтез классического компьютерного зрения и глубокого обучения там, где каждый из этих подходов будет наиболее рационален.
Алгоритм можно разделить на несколько стадий: поиск детали на кадре, получение текстуры детали, поиск дефектов на текстуре и постобработка результатов.
Как происходит поиск детали? Сначала используется информация о том, что деталь лежит на синей подложке, и строится маска по синим пикселям кадра. Но на кадре могут быть шумы, а на подложке есть белые полосы и буквы – всё это подавляется путём расширения маски во все стороны с неким радиусом. На кадре остаётся лишний фон, ведь подложка может не заполнять всю площадь кадра. Этот фон подавляется с помощью заливки маски, начиная от краёв картинки. После этого остаётся лишь перебрать оставшиеся вне маски компоненты связности и выбрать наибольшую – это и есть маска детали.
Дальше по маске строится обрамляющий контур детали. По этому контуру конструируется наиболее подходящий четырёхугольник, из которого с помощью гомографии вырезается текстура поверхности детали в ортогональную картинку фиксированного размера. Кстати, на этом этапе помощью небольшой нейросети определяется тип детали.
Вырезанная текстура приводится к градациям серого, а после подаётся на инференс модели YOLOv3 для поиска дефектов. В итоге YOLOv3 возвращает гипотезы дефектов, то есть прямоугольники с показателями уверенности.
Дефекты найдены (или не найдены), но ими ещё нельзя воспользоваться. Их необходимо отфильтровать по степени уверенности и с помощью обратной гомографии перевести из системы координат вырезанной текстуры в систему координат исходного кадра. Зная тип детали и её габариты, возможно вычислить линейные размеры дефектов. Детекции дефектов подаются на вход в трекер дефектов, который фильтрует ложные срабатывания и поддерживает истинные между кадрами.
Остаётся только графически отразить полученные результаты в пользовательском интерфейсе.
В целом получается, что каждую из стадий алгоритма можно легко отладить по отдельности. Нейросеть также можно обучить на отдельных текстурах, не захватывая ничего лишнего. В итоге обученная модель достаточно универсальна, её можно использовать для других сценариев, главное правильно вырезать текстуры.
Основная сложность – качество изображений с используемой камеры Intel RealSense D435i. С одной стороны, эта камера на голову превосходит по качеству кадров и стримингу дешёвые ip-камеры. С другой стороны, камеры многих современных смартфонов в режиме фото делают более качественные кадры. На D435i изображения получаются достаточно зашумлёнными, и очень важно равномерно освещать сцену. От использования Depth канала камеры, было решено отказаться из-за низкой точности и ограниченного диапазона рабочих расстояний (минимальное допустимое расстояние до объекта – 40 см). При разработке тиражируемого решения можно было бы предложить сравнить кадры альтернативных камер по качеству картинки, и, возможно, взять серьёзные промышленные камеры.
Была неопределённость, связанная с самим обучением моделей для поиска дефектов. Решением стал вариант не тратить слишком много времени на подготовку данных для обучения, ведь разметка больших наборов данных – титанический труд. Поэтому на начальном этапе обучения и отладки использовались только синтетические данные: в Blender рендерилась сцена с подложкой, деталью и дефектами на ней.
На следующем этапе было решено разнообразить обучающую выборку и добавить в обучение несколько открытых датасетов с разнообразными дефектами. Заранее не было ясно, насколько хорошо будет работать обученная модель на новых деталях, текстуры поверхности которых не похожи на обучающую выборку. Добиться желаемого результата получилось за счет аугментация данных (генерирование более разнообразной выборки за счет различных операций над изображением).
Разметка датасетов с дефектами осложняется фундаментальной проблемой – если размечать дефекты объемлющими прямоугольниками, то одни и те же дефекты можно разметить разным образом, и сложно сказать, какой из способов правильнее. К примеру, можно всю группу царапин обводить общим прямоугольником дефекта, а можно обвести каждую царапину по отдельности. Получается, что часть выразительной силы обучаемой модели тратится на попытки предсказать, почему при разметке был выбран именно такой вариант. В качестве альтернативы можно размечать/обучать семантическую сегментацию на уровне пикселей, но такая разметка производится гораздо дороже и дольше.
Одна из проблем – разные предусловия для запуска специфичных слоёв под разными девайсами для инференса. В целом получалось, что инференс YOLO на CPU запустить было сложнее, чем под плагин HDDL. Для использования специфичных YOLO-слоёв требовалось явно «билдить» расширение под плагин CPU, отдельно подключать нужные хедеры с описанием расширения. Но при этом очень не хотелось добавлять в проект дополнительные зависимости и каким-либо образом усложнять сборку ради чисто отладочного (в нашем сценарии) CPU режима. В итоге зафиксировали модель и проверили её интеграцию на CPU, а потом убрали лишние зависимости и перенесли на HDDL.
Команде было интересно обучить и перенести именно модель YOLOv3, но найти и завести работающий конвертер весов получилось не сразу. Некоторые конвертеры с открытым исходным кодом формально конвертировали, но полученная модель потом просто не загружалась в OpenVINO. Видимо, они просто устарели или в них были какие-то ошибки. Когда получилось найти работающий конвертер и успешно загрузить модель, процесс стал повторяемым, и больше проблем не было.
Для начинающих пользователей OpenVINO можно посоветовать не усложнять себе задачу и конвертировать явно поддерживаемые модели из списка доступных топологий, которых, на самом деле, очень много. Либо надо стараться не использовать специфичные слои, которых может не быть в других фреймворках.
В целом, возникающие проблемы и вопросы достаточно быстро получалось разрешать за счёт форумов OpenVINO.
Основной плюс OpenVINO – возможность унифицировать весь «зоопарк» DNN моделей и использовать их в продакшене, при этом не задействовать всевозможные нейросетевые фреймворки. Но чтобы этот плюс ощутить, желательно обладать уже существующим продакшеном с весомым опытом. Гораздо проще установить на устаревшей платформе OpenVINO, чем «сбилдить» под неё тот же самый TensorFlow.
Ещё одним плюсом OpenVINO можно считать его специализированность. Можно ожидать, что инструмент от Intel для инференса под собственные «железки» будет при прочих равных условиях обеспечивать лучшую производительность, чем менее специализированные инструменты. Применительно к нашей задаче для обучения YOLOv3 на GPU использовалась реализация на darknet. При этом общеизвестно, что нынешние версии darknet плохо оптимизированы под инференс на CPU, и, возможно, никогда и не будут оптимизированы (на инференс YOLOv3/darknet на CPU может уходить 10-30 секунд в зависимости от CPU и параметров конфигурации). После переноса модели по цепочке darknet → TF protobuf → IR OpenVINO инференс модели на CPU и на HDDL в OpenVINO стал работать в режиме реального времени. Иными словами, достаточно перегнать веса, а дальше специализированный инструмент сделает своё дело.
Оно работает. Сбоку на платке есть цифровое табло, где приветливо улыбается красная циферка – установленный в системе номер карточки.
В целом - отдельно взятый вычислитель Myriad X медленнее мощного CPU, но их на плате 8, поэтому имеет смысл либо обрабатывать параллельно 8 независимых запросов на инференс, либо вести конвейерную обработку данных (это могут быть не только кадры) с задержками на конвейере. При этом CPU остаётся свободен для других операций, а плат можно установить несколько.
По числу операций на все 8 вычислителей Mustang V100 сопоставим с high-end видеокартами, при этом энергопотребление у него почти на порядок меньше.
В итоге, для максимально эффективной работы этого ускорителя следует его использовать в интенсивных задачах, где требуется постоянная обработка, но не критична задержка.
Также низкое энергопотребление карточки позволяет её использовать в сценариях, где есть ограничения по потребляемой мощности системы. Например, если нет возможности перепроектировать электросеть (компьютер висит на столбе или питается от солнечных батарей), если мощность бортового источника питания ограничена (компьютер установлен на автомобиле или беспилотнике).
Видя, как работает демостенд, становится проще представить, как применить эти технологии на существующем производстве, и выбранный сценарий, безусловно, помогает в этом.
Сценарии применения могут быть самые различные: выявление поверхностных дефектов на производстве листового металла или на покрасочной линии. Производителей полиэтиленовых плёнок и даже изготовителей конфет такое решение, несомненно, заинтересует. Ещё два интересных примера, которые появились во время общения посетителей с инженерами «Ниеншанц-Автоматика» на выставке Securika 2019, связаны с железными дорогами: распознавание номеров вагонов и выявление дефектов рельсов, например, выкрашивание металла, выколы, трещины и прочее. Как правило, оборудование для таких задач должно соответствовать высоким требованиям к уровню надежности и иметь специальные сертификаты.
Вместе с компанией TRA Robotics BrainGarden делает систему компьютерного зрения для гибкой фабрики, задача которой – обнаружить в кадре деталь сборочного процесса, зная лишь ее CAD-модель и текстуры. Сложность - это должно работать быстро, устойчиво и иметь возможность также быстро учиться новым типам деталей. Другие проекты включают в себя алгоритм управления домашним роботом, проблемы позиционирования и локализации, визуальной одометрии для роботов. Ещё есть проект - Botkin.AI, в котором участвуют члены команды BrainGarden, посвящённый поиску патологических образований на медицинских изображениях. Команда BrainGarden попробовала себя в FashionTech, результатом чего стало приложение OutfitMind, рекомендующее сочетания одежды.Оно находит в онлайн-магазинах одежду, наилучшим образом подходящую гардеробу пользователя. В целом, в команде собрались люди с опытом применения AI в совершенно различных сферах: производство, логистика, биотех и drug-discovery, финтех, робототехника.
Стоит оговориться, что ИИ - это маркетинговый термин. То, что сейчас происходит в экономике в целом, это огромная революция автоматизации, которую можно сравнить с освоением огня или изобретением парового двигателя. Ключевая особенность текущей революции - современные математические методы, в том числе нейронные сети, которые позволяют автоматизировать плохо формализуемые процессы, что классическим алгоритмическим подходам удается не очень, и всегда было задачей, которую решал человек. Например, определять степень похожести объектов друг на друга по визуальной или аудиальной информации, принимать решения в условиях зашумленных данных.
Среди наиболее востребованных технологий можно выделить глубокое обучение (Deep Learning), обучение с подкреплением (Reinforcement Learning) и механизмы коллективного принятия решений, коллективного управления (Multi-agent Systems).
Именно глубокое обучение предоставляет наиболее эффективные методы работы с зашумленными данными и слабой формализацией.
Обучение с подкреплением дает мощный инструмент для создания систем, способных к самостоятельному поиску наиболее эффективных стратегий действия, самообучению, что позволяет создавать действительно автономные системы. Примером служат алгоритмы, разрабатываемые организациями DeepMind и OpenAI - боты для игры в Go, Dota2 или Starcraft.
Область коллективного принятия решений - мультиагентные системыпозволяют создавать автономные группы роботов (рой, swarm), способных выполнять конкретные задачи. Например, так устроены новые склады компании Amazon.
В итоге, совместная разработка «Ниеншанц-Автоматика» и «BrainGarden» привела к появлению прототипа актуального промышленного решения, которое без труда может найти свое применение на большом количестве производств, учитывая мировую тенденцию к автоматизации и развитие систем машинного зрения. На момент публикации статьи, дэмо решение было показано на многих мероприятиях, в том числе и на конференции посвящённой AI & IoT технологиям. Используемые при этом новые ускорители MUSTANG показали хорошие результаты как по производительности, так и по энергоэффективности. Особое внимание при этом стоит обратить на легкость в освоении командой «BrainGarden» нового для них оборудования. Несомненно, это было возможно благодаря богатому опыту разработчиков и инструментарию OpenVino toolkit, который постоянно дорабатывается компанией Intel.