
В практике внутреннего аудита встречаются задачи, при которых необходимо осуществить проверку по выявлению некорректного ввода данных о клиенте. Одной из таких проблем может быть несоответствие введенных данных и фото клиента, в момент оформления продукта.
К примеру, имеется следующая информация: пол, возраст и ссылка на фото. Для проверки соответствия воспользуемся библиотекой py-agender языка Python.
Работа библиотеки осуществляется в два этапа. На первом, opencv определяет расположение лица на фото. На втором, нейронная сеть архитектуры EfficientNetB3, которая обучена на наборе данных UTKFace DataSet, определяет пол и возраст обладателя лица на фото.
Для начала импортируем необходимые библиотеки:
import cv2
from pyagender import PyAgender
Создадим объект детектора пола и возраста:
agender = PyAgender()
С помощью opencv загрузим фото:
img = cv2.imread("habensky.jpeg")
Далее определим характеристики лица с помощью метода detect_genders_ages объекта agender:
face_info = agender.detect_genders_ages(img)
где переменная face_info содержит следующую информацию:
[{'left': 0,
'top': 5,
'right': 299,
'bottom': 299,
'width': 299,
'height': 294,
'gender': 0.0075379927,
'age': 41.585840644804094}]
Здесь параметры (‘left’, ‘top’, ‘right’, ‘bottom’, ‘width’, ‘height’) характеризуют расположение лица на фото. Параметр gender характеризует принадлежность к определенному полу, где 0 – соответствует мужчине, 1 – женщине. Т.е. после обработки изображений, по порогу 0.5 разделяем обработанную выборку на мужчин и женщин.

Алгоритм определил, что на данном изображении представлен мужчина (значение пола очень близко к нулю: 0.0075379927), а также, что на этом фото ему 41 с половинкой годика (41.5858), не знаю сколько Константину Хабенскому лет на этом фото, но думаю алгоритм близок к истине.
Хороший пример, четкое изображение и довольно впечатляющий результат. Однако, когда начинаешь применять алгоритм к реальным данным, все не так радужно, как хотелось бы. И дело здесь не сколько в алгоритме, а в качестве исходных данных.
В моем случае это был набор из 1542 изображений с разрешением 300х300. Для 64 изображений алгоритм не смог определить характеристики лица. Основная причина – плохая освещенность в момент фотофиксации (лиц почти не видно). Для 1478 изображений медианное значение ошибки определения возраста составило 4,96 года. На рисунке ниже представлено распределение ошибки:

Для 8.5% изображений (125 из 1478) алгоритм совершил ошибку в определении пола человека. Из них в 122 случаях алгоритм ошибочно принял женщину за мужчину. Повторюсь, не стоит винить алгоритм во всех случаях. В большинстве ошибочных примеров встречалось много лиц в очках, которые могут скрывать некоторые особенности лица. На рисунке ниже представлено распределение возраста для набора данных UTKFace DataSet:

Можно заметить, что большая часть набора данных содержит изображения людей c возрастом 20-40 лет. Несмотря на это алгоритм чаще всего ошибался именно для указанного интервала, т.е скорее всего ошибки связаны с особенностью набора данных, для которого был применен алгоритм. На рисунке ниже представлено распределение возраста людей, на которых алгоритм ошибся:

Py-Agender – интересный инструмент, который может помочь автоматизировать ряд рутинных задач или по крайней мере уменьшить размер выборки для ручного анализа. В статье представлена оценка для специфичного набора данных, возможно в вашем случае алгоритм сработает более результативно.
Walker2000
UTKFace очень странный датасет. Большое количество ошибочно размеченных фото. Диапазон фото возрастов от 20 до примерно 50 лет сильно замылены. Много фото из фотобанков с «водяными знаками» на лицах. Качество определения возраста будет низким после обучения на датасете.
NewTechAudit Автор
Спасибо, поделитесь пожалуйста в комментариях или личном диалоге ссылкой на размеченный датасет лучшего качества.