Мысли о быстром прототипировании и моделировании

При быстром темпе бизнеса, как сегодня, быстрое прототипирование становится чрезвычайно эффективным методом быстрого вывода вашего продукта на рынок, а затем его итерации по мере необходимости или своевременной и качественной реализации вашего проекта. Методология Agile закладывает отличную основу как для работы над продуктом, так и над проектом с точки зрения процесса. Часть кодирования также становится все более доступной и доступной, современные устройства и сервисы обычно хорошо оснащены готовыми к использованию SDK и примерами. С точки зрения искусственного интеллекта и науки о данных также нет недостатка в первоклассных управляемых сервисах или возможностях с открытым исходным кодом, основанных на проверенных подходах SOTA (современные). Одним из примеров является набор Cognitive Services, доступный в облаке Microsoft Azure, который включает (но не ограничивается) возможности Language, Vision, Speech, Decision. Для удобства разработчиков возможности Azure Cognitive Services сгруппированы в соответствующие порталы (студии), где выделены соответствующие варианты использования:

Azure Cognitive Services — Language Studio: https://language.cognitive.azure.com/

Azure Cognitive Services — Vision Studio: https://preview.vision.azure.com/

Azure Cognitive Services — Speech Studio: https://speech.microsoft.com/portal

Дополнительную информацию о Azure Cognitive Services можно найти здесь: https://docs.microsoft.com/en-us/azure/cognitive-services/what-are-cognitive-services.

В дополнение к выделенным выше возможностям Microsoft Azure Cloud предлагает множество других возможностей, таких как OpenAI (в настоящее время в предварительной версии), Cognitive Search, Video Analyzer for Media (fka, Video Indexer), Custom Vision, Azure Machine Learning Studio и т. д. Все это — идеальные строительные блоки для быстрого прототипирования и быстрого и уверенного воплощения вашего решения в жизнь.

Возможности AI/ML в облаке и на периферии позволяют реализовать различные варианты использования в разных отраслях. Одной из быстрорастущих областей в настоящее время является моделирование. Моделирование может иметь множество граней от моделирования абстрактных процессов (теоретическое моделирование) до моделирования конкретных событий или поведения объекта/субъекта (практическое или прикладное моделирование). Большие достижения в XR (расширенной реальности) также способствуют способности разработчиков реализовывать удивительные возможности с помощью симуляций (о которых будет речь в нашей следующей статье :)).

Однако в этой статье мы поделимся нашим опытом реализации более классического варианта использования моделирования событий с использованием AI/ML на примере задачи классификации на основе размеченных данных. Например, мы хотим внедрить сложную систему для получения и анализа информации о толпе, используя классификаторы изображений, алгоритмы временных рядов, расширенные статистические методы и т. д. В части классификации изображений мы стремимся использовать подходы SOTA Computer Vision с помощью Azure Machine. Обучение (АМЛ).

В нашей предыдущей статье (здесь) мы уже делились своим опытом создания классификаторов изображений с помощью машинного обучения Azure (AML) и его замечательной функции AutoML. И в этой статье мы еще больше сузим область нашего интереса до данных, процесса маркировки данных и создания синтетических данных, когда это уместно.

Независимо от того, являетесь ли вы инженером AI / ML или специалистом по данным, вы, вероятно, согласитесь с тем, что сбор качественных данных и правильная (точная) маркировка их для ваших контролируемых задач машинного обучения (включая классификацию изображений Computer Vision) является жизненно необходимым и в то же время самый утомительный процесс из всех. Мы выбрали пример использования аналитики толпы для иллюстрации здесь, потому что мы также хотели подчеркнуть сложность реальных вариантов использования, их высокие требования к разнообразию / представлению ваших обучающих данных для вашего решения, чтобы обобщать достаточно хорошо, а также проблемы вы сталкиваетесь, когда вам нужно масштабировать свое решение.

На приведенной ниже диаграмме показан пример процесса мышления, который можно пройти при решении задачи классификации изображений Computer Vision для случая использования аналитики толпы. В этой статье мы вместе пройдем через различные этапы понимания того, как превратить ваше решение из быстрого прототипа (доказательство концепции = POC) в MVP (минимально жизнеспособный продукт) и на всем пути к масштабируемому продукту или проекту производственного уровня. .

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

Маркировка вручную

Используя функцию маркировки данных машинного обучения Azure (AML), мы можем настроить проект маркировки и вручную пометить наши образцы данных. В зависимости от количества классов для классификации изображений вам может потребоваться пометить довольно много изображений, чтобы иметь достаточное представление для каждого класса и обеспечить надежные результаты вывода. Например, портал Azure Custom Vision предлагает вам иметь минимум ~50 изображений для каждого класса, чтобы иметь несколько надежных результатов вывода (очевидно, это число является простой количественной мерой, а не качественной, поэтому «несколько»). Процесс маркировки данных — утомительный процесс, и когда вы только что подумали, что закончили с маркировкой данных для конкретной рассматриваемой сцены, вы обнаружите, что вам нужно позаботиться о другой сцене — и вот снова. маркировка данных для этой сцены. Излишне упоминать, что характеристики окружающей среды, условия освещения, качество изображения и т. д. могут варьироваться от сцены к сцене, что делает ваши усилия по маркировке движущейся целью. Потом начинаешь думать: может быть, мне поручить эту работу кому-то другому? Это может быть вариантом, но есть ли лучший способ? Или, может быть, мне следует использовать подход обнаружения объектов вместо подхода классификации изображений или даже использовать некоторые уже предварительно обученные модели? Все это законные опасения. Мы продолжим изучать их в следующем разделе.

Но в завершение этого раздела отметим, что как разработчик вы также можете быть заинтересованы в дальнейшем манипулировании своими помеченными данными, возможно, в написании некоторых сценариев автоматизации и т. д. Чтобы лучше понять, как это можно сделать, давайте посмотрим, как Машинное обучение Azure (AML) сохраняет результаты в нашем проекте маркировки данных. На приведенном ниже рисунке показано, как Машинное обучение Azure (AML) позволяет экспортировать помеченные данные в виде файла CSV, файла COCO или набора данных Azure ML.

Если вы решите экспортировать помеченные данные в виде CSV-файла, важно понимать, что фактические изображения, соответствующие меткам, будут храниться в другом месте (например, в связанном хранилище BLOB-объектов Azure, как указано в поле URL-адрес). Таким образом, для будущих манипуляций может быть удобно «объединить» ваши метки и изображения, где имя вашего изображения имеет свою метку в качестве префикса имени файла. Ниже пример скрипта делает именно это:

Совет. Одним из конкретных примеров использования этого метода для нас является то, что мы пометили данные в проекте маркировки данных машинного обучения Azure (AML), экспортировали результаты и импортировали их на портал Custom Vision, чтобы быстро обучить наши классификаторы изображений. и экспериментировать с вещами. Как только на портале Custom Vision будет проведено достаточно экспериментов, мы можем вернуться к Машинному обучению Azure (AML) и настроить постоянные конвейеры обучения модели MLOps, чтобы сделать процесс повторного обучения полностью воспроизводимым.

Autodesk Maya 3D-моделирование

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

Для случаев использования аналитики толпы вы часто работаете с людьми (лицами) в качестве субъектов, но для более широкого варианта использования это могут быть животные или различные объекты, такие как автомобили, мотоциклы, велосипеды и т. д.

В этом разделе мы хотим изучить, что потребуется для моделирования сцены массового скопления людей в 3D и рендеринга из нее помеченного изображения. Если мы сможем запрограммировать создание и рендеринг сцены, мы сможем генерировать необходимые объемы синтетических размеченных данных с помощью кода.

Во-первых, доступно множество программных пакетов для 3D-моделирования: Blender, Maya, Houdini и т. д. Для целей этой статьи мы собираемся использовать Autodesk Maya 2022. Maya имеет богатый набор инструментов для 3D-моделирования и рендеринга (включая Maya Программное обеспечение, аппаратное обеспечение Maya и визуализаторы Arnold).

Следующая задача, которую необходимо решить, — выяснить, как построить модель человека, который будет помещен в 3D-сцену Maya. Для этой цели мы собираемся использовать MakeHuman OSS. Дополнительную информацию о программе MakeHuman можно найти здесь: http://www.makehumancommunity.org/

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

Затем нам нужно будет перенести наши модели MakeHuman в Maya, для которых мы можем использовать формат файлов Filmbox (FBX), поддерживаемый как MakeHuman, так и Maya.

Экспортируйте модель MakeHuman в виде файла FBX:

Затем импортируйте файл FBX в Maya, как показано ниже:

Следует отметить, что модели MakeHuman действительно очень детализированы и реалистичны (особенно если мы посмотрим на количество вершин, граней и треугольников, составляющих одну модель человека, — довольно удивительно). Таким образом, модели MakeHuman предварительно запекаются и при необходимости готовы к настройке.

После того, как мы перенесем одну или несколько шаблонных моделей MakeHuman в Maya, мы сможем использовать Maya Python SDK для автоматизации процесса создания сцены. Мы можем написать сценарий Python и выполнить его в редакторе сценариев Maya или создать собственный подключаемый модуль Maya и запустить его, как показано ниже:

Ниже пример сценария иллюстрирует, как автоматизировать создание сцены в Maya с помощью Python:

В этом скрипте мы используем шаблонные модели MakeHuman, импортированные в Maya в виде мешей, чтобы дублировать их на месте, затем перемещать, вращать и масштабировать их, чтобы добавить элемент случайности, и, наконец, визуализировать помеченные изображения. В результате мы можем сгенерировать много размеченных данных для одной сцены. При добавлении большего количества сцен в микс мы достигаем эффекта мультипликатора с еще большей громкостью. Обратите внимание, что Maya позволяет вам управлять всеми аспектами 3D-сцены, включая положение камеры, условия освещения и т. д.

Генерация синтетических данных с помощью Python

Использование возможностей 3D-моделирования Maya для создания больших объемов синтетических данных очень удобно, но есть некоторые нюансы, которые могут вас запутать. Вот лишь некоторые из них: может быть сложно точно воссоздать саму сцену в Maya, или качество реальных изображений может быть значительно ниже, чем качество визуализированных изображений из Maya. И вообще, достижение фотореалистичного качества 3D-моделей в Maya может быть проблемой.

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

Чтобы лучше проиллюстрировать этот момент, мы использовали коллекцию людей Microsoft Office Cutout и других специально созданных моделей и сохранили их в защищенном частном репозитории GitHub здесь: https://github.com/alexanikiev/cutoutpeople.

Мы использовали программное обеспечение MakeHuman для создания ряда пользовательских моделей, чтобы обеспечить достаточное разнообразие и представление для набора данных поезда. Мы сохранили эти изображения и файлы PNG с прозрачным фоном.

Подсказка: вы можете удалить фон из изображений PNG с помощью простого скрипта Python или одного из онлайн-инструментов, таких как инструмент Adobe: adobe.com/express/feature/image/remove-background.

При работе с синтетическими данными никогда не бывает достаточно вариативности, и всегда хочется большего. Некоторые творческие способы внесения большей вариативности в ваш набор данных включают изменение форм/размеров ваших моделей людей, изменение их расы/позы/и т. д., их различную одежду и т. д. MakeHuman позволяет вносить множество изменений в ваши человеческие модели во время проектирования. время, включая исправление одежды, а некоторые могут быть выполнены во время выполнения с помощью простого сценария Python (одевание моделей в одежду разных цветов).

Мы поделились примером создания минималистичных синтетических изображений сцены в Python на GitHub здесь: https://github.com/alexanikiev/synscenepy

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

Использование облаков точек и сканирования LiDAR

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

К счастью, на рынке уже есть технологии, которые позволяют решить эти проблемы. Одной из заслуживающих внимания технологий в этом контексте является LiDAR (Light Detection and Ranging). Дополнительную информацию о LiDAR можно найти здесь: https://en.wikipedia.org/wiki/Lidar. Сканеры LiDAR позволяют создавать представление трехмерного пространства на основе облака точек. Сканеры LiDAR широко используются в геопространственных исследованиях, но также могут использоваться в различных отраслевых сценариях, включая случаи использования в розничной торговле и краудфандинге. Облако точек — это набор точек данных в пространстве, подумайте о наборе координат (X, Y, Z). Дополнительную информацию об облаке точек можно найти здесь: https://en.wikipedia.org/wiki/Point_cloud. Рекомендуемый формат для представления и обмена данными LiDAR Point Cloud — LAS. Дополнительную информацию о формате LAS можно найти здесь: https://en.wikipedia.org/wiki/LAS_file_format.

Применительно к нашему варианту использования аналитики толпы облако точек может быть представлено в Maya как MASH. После создания элемента MASH на основе сетки в Maya вы можете контролировать количество отображаемых точек через узел MASH_Distribute, как показано ниже:

Теперь, чтобы превратить этот визуальный MASH в массив координат (X, Y, Z), мы можем найти его узел MASH_Python со связанным кодом Python, как показано ниже:

Таким образом, мы можем эффективно моделировать облака точек в Maya. Ниже мы иллюстрируем модель облака точек для MakeHuman с разной степенью точности, от 100 точек данных до 100000 точек данных:

С помощью примера скрипта Python мы визуализируем точки данных Cloud Point в виде графика:

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

Используя сканеры LiDAR (например, этот), изображения (на основе облаков точек), которые вы используете для вывода, будут анонимными, чтобы удовлетворить ваши потенциальные требования к конфиденциальности. В то же время вы можете использовать Maya MASH для моделирования облаков точек для моделей человека для создания помеченного обучающего набора с помощью кода. Очевидно, что при использовании облаков точек для представления людей также будет легче удовлетворить требования к разнообразию и представлению для вашего синтетически сгенерированного тренировочного набора (вы можете в основном сосредоточиться на основных характеристиках человеческих моделей, таких как размер/форма/поза/поза). и т. д.).

Моделирование UX (пользовательский опыт)

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

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

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

Приложения Streamlit реализуют адаптивный дизайн «из коробки» и хорошо выглядят на устройствах с различными форм-факторами, включая настольные компьютеры, ноутбуки и мобильные устройства. При необходимости приложения Streamlit можно легко поместить в контейнер и развернуть в облаке с помощью DevOps (как и другие приложения Python). Ниже приведена иллюстрация интерактивного пользовательского интерфейса для приложения для моделирования, созданного в Streamlit:

Дополнительную информацию о библиотеке Python Streamlit можно найти здесь: https://streamlit.io/.

Также рассмотрите возможность использования Microsoft Azure Power Apps и/или PowerBI для ваших нужд UX. Эти возможности отлично подходят не только для быстрого прототипирования, но и для создания доступных и безопасных приложений в облаке.

Спасибо

PS. Пожалуйста, поддержите Украину 🇺🇦Вооруженные силы ❤️ здесь: https://bank.gov.ua/en/about/support-the-armed-forces.