Задача - написать классификатор нейтрального лица, с упором на его дальнейшее использование в мобильном приложении в real-time. Предлагается в качестве базового варианта опираться на стандартную разметку 68 ключевых точек, которая использовалась в MULTI-PIE. В рамках этого задания мы будем считать, что данная задача разбивается на две: Детектор открытого рта Детектор улыбки
Ограничения:
- не более 200 ms на фотографии с найденными ключевыми точками
- не более 1000 ms на поиск ключевых точек на фотографии
- не более 150 MB
- общераспространенные зависимости (opencv, dlib, numpy, scipy, tensorflow, …) использовать можно, но они должны присутствовать в инструкции по установке
- языки: C++, Python
Ограничения по времени следует считать ориентировочными, можете их понимать как ограничения для конкретного компьютера, на котором вы будете выполнять задание (также допускается их поднятие в случае наличия у вас компьютера, далекого от современных стандартов).
В процессе работы разрешается любые общедоступные датасеты для обучения и/или тестирования. В случае использования 68 ключевых точек разрешается использовать готовые решения для их поиска (их размер не будет учитываться в ограничении на занимаемое место).
Результатом вашей работы является программа, которая по набору путей до фотографий выводит 2 списка (по одному для каждого классификатора) фотографий, проходящих соответствующий фильтр. Также требуется предоставить программный код (лучше в виде приватного репозитория на github), поясняющую документацию для запуска и выборки, использованные для обучения/валидации моделей.
Плюсом будет являться описание того, какие метрики вы использовали при обучении/валидации классификаторов и почему, как бы вы подбирали параметры классификаторов в зависимости от возможных требований (например, при известной цене ошибки первого или второго рода).
Примеры фотографий можно найти здесь https://drive.google.com/file/d/1JcJGUX8NOkZvCUyxinxtkn4qjGD-DgQF/view?usp=sharing (пароль к архиву "Iephohn9" без кавычек).
Так как решение должно быть ориентировано на работу в мобильных устройствах, была выбрана сеть NASNetMobile.
Сеть обучалась на датасете http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html
В файле Annotation присутствует метка только для "Smile", для получения "open_mouth" было размечено около 4-х тысяч изображений.
В качестве оценки алгоритма использовалась F-мера, так как в тестовом датасете наблюдается дисбаланс классов.
Without Landmarks:
Validation score in CelebA: f1_smile - 0.9612, f1_open_mouth - 0.9675
Test score in "example_data": f1_smile - 0.5579, f1_open_mouth - 0.3892
With Landmarks:
Validation score in CelebA: f1_smile - 0.8677, f1_open_mouth - 0.8763
Test score in "example_data": f1_smile - 0.4931, f1_open_mouth - 0.6493
git clone https://github.com/Danil328/Software-engineer-neutral-face-task.git
pip3 install -r requirements.txt
cd Solution\ without\ landmarks/
python main.py "path_to_images" "path_to_submission"
cd Solution\ with\ landmarks/
python main.py "path_to_images" "path_to_submission"