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, распознаванием изображений и анализом объектов с высокой нестабильностью.