Machine Learning

AI узнает твое настроение или Perception for Autonomous Systems в действии

Время прочтения: 4 мин.

В этой статье мы расскажем вам о Perception for Autonomous Systems (PAZ) — модели компьютерного зрения, одна из задач которой состоит в обнаружении лиц, классификации по полу и определении эмоций, в том числе в реальном времени.

PAZ, построенная на основе свёрточной нейронной сети (CNN), проводит анализ с точностью 96% в гендерном наборе данных IMDB и 66% в эмоциональном наборе данных FER-2013, который умеет распознавать до 7 различных эмоций («счастье», «гнев», «отвращение», «страх», «удивление», «грусть», «нейтральный»). В PAZ реализована общая схема построения CNN для проектирования в реальном времени, которая обеспечивает распознавание лиц и классификацию по полу со скоростью, соизмеримой с человеческими способностями.

CNN построена по аналогии с принципами работы зрительной коры головного мозга, в которой были открыты так называемые простые клетки, реагирующие на прямые линии под разными углами, и сложные клетки, реакция которых связана с активацией определённого набора простых клеток. Идея CNN заключается в чередовании свёрточных слоёв (convolution) и слоёв подвыборки (subsampling).

Обычно, используемые CNN для извлечения признаков включают в себя набор полносвязных слоев. Например, VGG16 (https://keras.io/api/applications/vgg/) содержит около 90% всех своих параметров в последних полносвязных слоях, а Xception, показывающая на самой современной модели для набора данных FER2-2013 точность 71%, использует около 5 миллионов параметров.

При разработке PAZ количество параметров было сокращено сначала до 600 тысяч, затем до 60 тысяч. А также были удалены полносвязные слои благодаря использованию глобального усреднения (Global Average Pooling). Такой подход значительно сократил количество вычислений.

Окончательная архитектура PAZ представляет собой полную свёрточную нейронную сеть, содержащую 4 остаточные свёртки, разделяемых по глубине. За каждой сверткой следует операция пакетной нормализации и функция активации ReLU. Последний слой применяет глобальное усреднение и функцию активации soft-max для получения прогноза.

Скорость обнаружения лиц, классификации по полу и классификация эмоций занимает 0,22 ±0,0003 мс на процессоре i5-4210M.

Результаты задачи классификации эмоций в реальном времени можно увидеть на рисунке:

PAZ активно дорабатывается. Самыми распространёнными ошибками классификации в данный момент является распознавание «грусти» вместо «страха» и «гнева» вместо «отвращения». Если на лице есть очки, то ошибочно лицо может быть классифицировано как «гнев». Это происходит потому, что метка «сердитый» активизируется, когда она считает, что человек хмурится, а хмурые черты путаются с темной оправой очков. Также очки влияют на изучение других характеристик. Например, в учебных данных большинству изображений людей в очках присвоен ярлык «мужчина». К тому же учебные данные основаны на «западных» лицах, что также влияет на предвзятость результатов.

Проверить на себе работу PAZ довольно просто:

parser = argparse.ArgumentParser(description='Real-time face classifier')
parser.add_argument('-c', '--camera_id', type=int, default=0, help='Camera device ID')
parser.add_argument('-o', '--offset', type=float, default=0.1, help='Scaled offset to be added to bounding boxes')
args = parser.parse_args()

pipeline = DetectMiniXceptionFER([args.offset, args.offset])
camera = Camera(args.camera_id)
player = VideoPlayer((640, 480), pipeline, camera)
player.run()

Результат для веб-камеры:

Для произвольных изображений:

Таким образом, Perception for Autonomous Systems является одной из самых производительных систем классификации лиц в реальном времени. Ускорение обеспечивается за счёт отказа от слоёв и 80-ти кратного уменьшения количества параметров в оставшихся сверточных слоях с помощью разделяемых по глубине сверток.

Как и другие подобные модели PAZ позволяет классифицировать объекты на изображениях: транспорт, животных, а также может определять положение головы и трехмерность любых объектов благодаря системе 6D pose estimation. Но об этом в следующих статьях.

Советуем почитать