Как отмечают в DataArt, в компании давно сложилось внутреннее комьюнити, участники которого профессионально занимаются машинным обучением. Периодически внутри группы проводятся различные R&D проекты. Накануне несколько участников сообщества решили попробовать подойти к решению задачи создания обобщенного портрета программиста с разных сторон.

Реализация идеи заняла несколько дней, в процессе работы подход к решению задачи менялся несколько раз. Для эксперимента были отобраны фото 1541 мужчин и 512 женщин, которые работают с DataArt в восьми странах мира — Аргентине, Болгарии, Великобритании, Германии, Польше, США, Украине и России. Для анализа использовался метод, описанный Сатьей Маллик и основанный на выделении ключевых 68 точек каждого лица в выборке: координат уголков глаз, бровей, губ, носа и так далее. Далее лица были разбиты на треугольники по ключевым точкам, цвет пикселей внутри полученных треугольников для всех лиц в выборке был усреднен.

Код проекта был написан на языках C++ с использованием фреймворков dlib/opencv.

В результате на первом этапе удалось получить портреты «типичных программистов» — мужчины и женщины.

Типичные программисты - мужчина и женщина
Типичные программисты - мужчина и женщина

Второй этап

На втором этапе исследования инженеры DataArt попытались выяснить, накладывает ли свою печать на внешность разработчика выбор той или иной технологии? Для этого авторы проекта разбили выборку еще на несколько групп и создали портреты типичных программистов, специализирующихся на конкретных языках. В частности, пока авторы проекта экспериментировали с фото разработчиков на Java и в .Net. При этом чтобы сохранить наибольшее число характерных черт при минимуме объединяемых портретов, для каждой группы был применен спектральный анализ векторов, соответствующих определенным чертам лица.

«Довольно известен эксперимент Перетта, посвященный изучению привлекательности лиц. Исследователь пришел к выводу о том, что средний портрет, составленный из многих, не всегда самый привлекательный и уступает портрету, составленному из меньшего количества лиц самых привлекательных представителей. То есть привлекательные лица как правило сильно отличаются от среднего по всем лицам вообще, таким образом, отклонение от медианы — это необходимый признак привлекательного лица. Мы решили развить эту идею и пойти дальше. Мы использовали спектральный анализ и автоматически, без участия людей выбирали лица с наибольшим отклонением от средних показателей — с самыми маленькими или большими носами, очевидно круглые и вытянутые лица и так далее. Таким образом мы добивались выполнения необходимого условия по Перетту и в результате получили не безликие лица, а вполне симпатичных людей с характером», — рассказывают авторы проекта.

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

Типичный Java и .Net разработчик (мужчина)
Типичный Java и .Net разработчик (мужчина)

По словам исследователей, первоначально слияние множества лиц привело к тому, что использование более 20-30 фотографий с усреднением ключевых точек приводит к появлению почти идентичных лиц. Отчасти это можно объяснить тем, что большинство фото – это портреты разработчиков из России и Украины, и лицо стремится к славянскому типу.

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

Типичный Java и .Net разработчик (женщина)
Типичный Java и .Net разработчик (женщина)

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

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

«Судя по всему, у типичного программиста нет какого-то ярко выраженного сдвига во внешности в ту или иную сторону. Этого, в общем, можно ожидать от среднего портрета и в целом соответствует ожиданиям от внешности разработчика. Возможно, 20-30 лет назад портрет среднего программиста бы отличался. Сейчас программист может выглядеть как угодно, это популярная профессия, не требующая каких-то специальных данных и не накладывающая особый отпечаток», — комментирует Дмитрий Соболев, участник проекта, senior developer.

Схемы лиц после триангуляции. Источник: habrahabr.ru
Схемы лиц после триангуляции. Источник: habrahabr.ru

«Трудно сделать обобщение для всех, но уже для промежуточных результатов получилось стопроцентное попадание: знакомый .Net разработчик оказался как две капли воды похожим на усредненный портрет, плюс он действительно носит очки. Неожиданным оказалось то, что требуется объединять так мало фотографий, чтобы получить почти идеальное лицо. Хотя подобное исследование привлекательности и приведено у Перетта, наблюдать то же самое “улучшение” черт лица на ограниченном наборе фото было как минимум любопытно», — подводит итоги Андрей Сорокин, участник проекта, senior developer.