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

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

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

Использование синтетических данных

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

Чтобы создать полный тренировочный набор, вам нужно неоднократно менять положение дрона в разных средах и условиях освещения. Это можно сделать с помощью изображений с расширенным динамическим диапазоном (HDRI); HDRI можно рассматривать как 360-градусное панорамное изображение, которое охватывает все возможные углы из одного положения, а также фиксирует информацию об освещении сцены. Удобно, что есть большой выбор HDRI, доступных бесплатно в Интернете. Вот пример с polyhaven.com:

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

Blenderproc предоставляет библиотеку Python, которая позволяет нам легко запрограммировать этот процесс, а также автоматизировать процесс аннотирования визуализированного изображения. Для этого примера мы создали 5 000 обучающих изображений с использованием 10 различных фонов примерно за 1 час на графическом процессоре NVIDIA RTX 3090. Вот пример сгенерированных данных:

Blenderproc предоставляет библиотеку Python, которая позволяет нам легко запрограммировать этот процесс, а также автоматизировать процесс аннотирования визуализированного изображения. Для этого примера мы создали 5 000 обучающих изображений с использованием 10 различных фонов примерно за 1 час на графическом процессоре NVIDIA RTX 3090. Вот пример сгенерированных данных:

Теперь, когда у нас есть аннотированный набор данных, мы можем обучить модель на нем.

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

Для этого примера команда Rowden ML взяла архитектуру модели обнаружения объектов под названием YOLOv5, которая была предварительно обучена для идентификации и обнаружения 80 различных классов повседневных объектов, таких как транспортные средства и животные. Во время обучения переносу мы замораживаем большую часть модели и позволяем модели корректировать веса только последних слоев сети, чтобы настроить модель на наш набор данных дронов.

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

Мы смогли настроить предварительно обученную модель YOLOv5 с хорошей точностью за 10 минут с использованием графического процессора NVIDIA 3090 RTX. Эта модель может быть улучшена за счет большего количества времени и данных. Вот пример его прогнозов, сделанных на основе данных, показанных выше:

Развертывание в режиме реального времени на периферии

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

Серия оборудования NVIDIA Jetson специально предназначена для периферийных сценариев машинного обучения и представляет собой автономное устройство малого форм-фактора с графическим процессором NVIDIA. В этом примере наша команда использовала самое маленькое из устройств Jetson, Jetson Nano, но обычно ориентировалась на более производительные платформы, такие как NVIDIA AGX, для производственных сред.

NVIDIA предоставляет SDK под названием DeepStream, который оптимизирует использование встроенного графического процессора как для декодирования видео, так и для вывода модели, позволяя устройству Jetson одновременно аннотировать несколько видеопотоков, передавая их через глубокую нейронную сеть в режиме реального времени. Поскольку все происходит локально на устройстве, модель можно развертывать в средах без доступа к Интернету или в сценариях, требующих быстрого реагирования на прогнозы модели.

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

Вот как модель работала на реальном видеопотоке после обучения на синтетическом наборе данных:

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

Заключение

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

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