Savant 0.2.4 поставляется с новым образцом, демонстрирующим конвейер распознавания возраста/пола. В конвейере используются две модели: YOLOV5-Face, определяющая лицо и лицевые ориентиры, и настраиваемая MobileNetV2, предсказывающая возраст и пол лица.

Конвейер довольно сложен, потому что он реализует эффективное преобразование лица в графическом процессоре на основе ориентиров со встроенными функциями Savant и интеграцией OpenCV CUDA. Наконец, для получения стабильных результатов конвейер нормализует возраст и пол по треку, что приводит к взвешенному прогнозу; отслеживание реализовано с помощью трекера Nvidia DeepStream.

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

Несмотря на свою сложность, конвейер обладает высокой производительностью: он достигает 250+ FPS на современном оборудовании Nvidia, таком как RTX A4000, и 40+ FPS на Jetson NX.

Образец находится на GitHub в репозитории Savant: https://github.com/insight-platform/Savant/tree/develop/samples/age_gender_recognition

Одноминутный рывок

Вы можете быстро запустить образец с помощью одной команды Docker-compose, показанной в следующем листинге (не забудьте настроить среду выполнения, как описано в руководстве):

git clone --depth 1 --branch v0.2.4 https://github.com/insight-platform/Savant.git
cd Savant/samples/age_gender_recognition
git lfs pull

# if x86
../../utils/check-environment-compatible && docker compose -f docker-compose.x86.yml up

# if Jetson
../../utils/check-environment-compatible && docker compose -f docker-compose.l4t.yml up

# open 'rtsp://127.0.0.1:554/stream' in your player
# or visit 'http://127.0.0.1:888/stream/' (LL-HLS)

# Ctrl+C to stop running the compose bundle

Если вы хотите узнать больше о Savant, изучите наши предыдущие статьи о том, как использовать фреймворк:

  • Встречайте Savant: новый высокопроизводительный фреймворк Python для видеоаналитики для оборудования Nvidia [ссылка];
  • Создание конвейера ускоренного удаления фона со скоростью более 500 кадров в секунду на Python с помощью Savant и OpenCV CUDA MOG2 [ссылка];
  • Создание конвейера высокопроизводительной классификации автомобилей с помощью Savant [ссылка];
  • Эффективный учет городского трафика с помощью PeopleNet/YOLOv8, Savant и Grafana в масштабе [ссылка];

Не забудьте подписаться на наш Твиттер, чтобы получать обновления о Savant. Также у нас есть Discord, где мы помогаем пользователям войти в систему.

Обсудим отличительные черты, делающие этот пайплайн очень интересным.

Постобработка выходных данных пользовательской модели

Наиболее интересные модели дают предполагаемые результаты в сложных форматах, которые необходимо правильно проанализировать и подвергнуть последующей обработке перед использованием. В выборке обе модели YOLOV5-Face и AgeGender дают такие результаты.

YOLOV5-Face выводит ограничивающие рамки обнаруженных лиц и пять ориентиров: глаза, нос и уголки рта. Savant поддерживает такие модели с блоком nvinfer@complex_model.

AgeGender основан на широко известном MobileNetV2, дополненном двумя кастомными головками: первая выводит возраст, а вторая — пол. Savant предоставляет специальный блок. nvinfer@attribute_model удобен для постобработки выходных данных, приводящих к скалярным значениям.

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

Позиция трекера в конвейере

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

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

AgeGender использует это преимущество: он помогает модели делать более точные прогнозы с меньшим количеством отклонений.

Предварительная обработка изображения

Предварительная обработка изображений часто встречается в конвейерах, связанных с распознаванием. Вы можете найти такую ​​задачу в распознавании автомобильных номеров, штрих-кодов, QR-кодов и всех сложных задачах OCR. Задачи, связанные с распознаванием лиц, такие как ReID лица, предсказание возраста и пола, также требуют предварительной обработки изображения.

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

Такие операции обычно неэффективно выполняются на ЦП; однако наиболее эффективным способом является использование графического процессора. В примере мы демонстрируем мощь интеграции DeepStream и OpenCV CUDA от Savant, позволяющую выполнять операции ориентации лица на основе ориентиров на графическом процессоре без копирования изображения в ЦП. Этот метод оптимизации значительно повышает производительность логического вывода.

Нормализация значений

Прогнозирование возраста/пола представляет собой класс задач, которые выигрывают от нескольких наблюдений. Человеческое лицо — это объект, который никогда не выглядит одинаково из-за постоянного движения. Это делает модель менее уверенной в прогнозах: значения могут значительно различаться. Таким образом, для получения более согласованных результатов мы часто используем метод нормализации, который вычисляет средние значения за период наблюдений. Но что такое «период наблюдений»?

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

Заключение

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