оценка пола и возраста
Определение пола ребенка до зачатия
Вы хотите попытаться запланировать зачатие мальчика или девочки? Или вы уже беременны, но не можете дождаться второго скрининга (22-26 недель), на котором уже определенно можно “разглядеть” пол?
Все основные способы планирования пола будущего ребенка, а также некоторые методы определения пола без УЗИ на ранних сроках беременности собраны на этом сайте.
Для чего может понадобиться спланировать пол?
“Главное, чтобы здоровый” — чаще всего будущие родители и бабушки/дедушки говорят именно так. Но бывают случаи, когда важно рождение ребенка определенного пола. Например, когда в семье есть наследственное (генетическое) заболевание, связанное с половой принадлежностью.
Итак, есть несколько наиболее популярных способов, как рассчитать пол будущего ребенка. И еще разные нумерологические вычисления, “приметы”, в которых будущие мамы ищут подтверждение своих предположений и желаний.
Тесты и калькуляторы на сайте ОпределениеПола.ру (список будет пополняться):
Медицинские методики планирования
Если обратиться к биологическим фактам, от чего зависит пол ребенка, то станет понятно: спланировать пол совсем не просто. Недостаточно основываться только на скорости и жизнеспособности сперматозоидов, в медицинской практике применяются сложные и дорогостоящие способы планирования пола.
Первая методика основана на сортировке сперматозоидов с мужскими Y-хромосомами и женскими X-хромосомами. Тип хромосомы определяют путем специального анализа. Сперматозоиды в зависимости от “пола” окрашиваются раствором и разделяются лазером. Метод называется проточная цитометрия и используется при искусственном оплодотворении в сельском хозяйстве примерно с 90-х годов. Но такой метод дает только 80% гарантии, и еще неизвестно, какие последствия могут “выявиться” от воздействия лазера.
Вторая методика — ЭКО с предимплантационной диагностикой. Перед тем, как пересадить женщине полученный “в пробирке” эмбрион, от него отделяют несколько клеток и проводят их детальный анализ — так можно узнать и пол. Использование этого метода ограничено, потому что не каждый доктор без серьезных причин пойдет на “отколупывание” клеток от человеческого эмбриона; кроме того, вся эта процедура стоит дорого, для кого-то даже запредельно дорого. Особенно если учесть, что есть ряд более простых и эффективных методик, по которым можно попытаться бесплатно спланировать пол будущего малыша.
Интересный факт: в некоторых странах Европы, а также в Японии, Австралии, Канаде и Индии медицинские методики планирования пола ребенка запрещены на законодательном уровне — это грозит нарушением баланса. Не приветствуется они и в странах, где есть ограничения на количество детей в семье (например, в Китае).
Популярные методики определения пола будущего ребенка
Пол ребенка начали пытаться как-то заранее спланировать очень давно. Существует гипотеза, что основополагателями методик определения пола были китайские астрологи. Сейчас к китайским “таблицам” добавлено еще несколько способов (некоторые из которых кажутся надуманными) и множество примет (которые, конечно же, на всех срабатывать не могут).
Рассмотрим самые “ходовые” теории, информацию о которых можно найти в Интернете. Методики специально перечислены вразброс, чтобы показать, что в сферы наблюдения при планировании зачатия у людей попало абсолютно все: возраст и кровь родителей, частота секса, фазы Луны, рацион питания, температура окружающей среды.
1. По овуляции (известен под названием метод Честермен-Филлипса и Мартина Янга)
В основе метода лежит тот факт, что Y-сперматозоиды легче, быстрее и подвижнее, чем X-сперматозоиды. Но они не такие “живучие” (менее устойчивы к кислой среде влагалища и матки). Как следствие, мальчика можно зачать с большей вероятностью именно в день овуляции. А зачатие девочки нужно производить за 2-3 дня до овуляции (окончания секретарной фазы).
Через сутки после овуляции попытки следует прекратить: по мнению Мартина Янга это увеличивает риск выкидыша и врожденных уродств.
Методика такого планирования пола ребенка не совсем точна и оправдана, однако процент “попаданий в точку” достаточно высок.
Рассчитать благоприятные дни для зачатия мальчиков и девочек вы можете, воспользовавшись этим калькулятором.
2. По китайскому лунному календарю
Популярный метод, упоминания о котором часто встречаются на женских форумах. Прогнозируемая точность — 75—80%.
По мнению китайцев, пол младенца будет зависеть от лунного возраста матери и даты зачатия. Описание метода (с таблицей) и удобный калькулятор можно найти здесь.
3. Определение пола по обновлению крови
Теория: По этой теории, зародившейся в Европе, кровь мужчины обновляется раз в 4 года, а кровь женщины — раз в 3 года. Чтобы определить пол будущего ребенка надо разделить возраст мужчины на момент зачатия на 4, а возраст женщины — на 3. Потом каждый результат делим пополам. Если остаток у мужчины больше, то будет мальчик; в противном случае — девочка. Вы можете проверить, кого прогнозирует вам этот способ, воспользовавшись онлайн-калькулятором.
Реальность: В пользу того, что метод не правдив, противоречивость данных. В Сети есть варианты, когда результаты трактуются наоборот. То есть пол ребенка определяется тем, какой остаток будет меньшим.
Если вам уже известен результат УЗИ, то помогите, пожалуйста, собрать статистику здесь.
4. Расчеты, основанные на возрасте мамы
Расчеты, как и при определении пола по китайской таблице, основаны на дате рождения женщины. Но вместо таблицы заключены в обычную формулу:
(X+Y+M+3)/2
где X — это количество полных лет женщины,
Y — месяц ее рождения,
M — месяц зачатия ребенка.
Если в результате получилось нечетное число (остаток отбрасывается), то родится мальчик; если четное — девочка.
Проверьте данные и помогите собрать статистику по “точности” на странице с калькулятором.
Этот расчет, конечно же, не имеет под собой научных исследований. Но многие, кто увлекается нумерологией, знают, что расчеты могут быть совершенно разные. Другой нумерологический метод определения пола ребенка — по таблице Пифагора.
5. По возрасту отца
Еще один метод, который трансформировался в формулу: по возрасту отца на дату зачатия. Подробнее об этом методе на странице с онлайн-калькулятором.
6. Частота половых актов: редкие — к девочке, частые — к мальчику
Это одна из “народных примет”, в которой присутствует подтверждение предыдущего метода. Согласно ей зачатие девочки происходит после воздержания, а зачатие мальчика — при частых половых актах. В основе лежит тот факт, что мужские сперматозоиды созревают намного быстрее. Статистики по совпадению прогноза и действительности нет.
7. Температурное влияние
Как температура может оказать влияние на пол будущего малыша? Дело в том, что низкие температуры оказывают негативное влияние на мужских сперматозоидах (женские более “живучи” и не страдают от воздействия холода). Так что при планировании мальчика зимой надо позаботиться, чтобы будущий папа надевал теплое нижнее белье и берегся от переохлаждения.
8. Питание мамы при планировании беременности
Эта теория зародилась у французов. Утверждается, что мама может повлиять на пол будущего ребенка, если будет питаться определенным образом. Диеты надо придерживаться не меньше двух месяцев до зачатия. По французской статистике точность такого планирования около 80%.
Помните, что дефицит тех или иных веществ в организме может плохо сказаться на самочувствии и здоровье.
Рационы питания представлены ниже в таблице:
Нейросети для предсказания возраста и пола
Получение информации о возрасте и гендерной принадлежности человека происходит исключительно по фотографии его лица. Исходя из этого можно разделить нашу задачу на два основных этапа:
Импортируем необходимые библиотеки
Ниже представлен код для проверки работы алгоритмов
Проведем серию экспериментов для проверки качество работы алгоритмов.
— одиночная фотография человека
— Несколько людей на фотографии
— Несколько людей на фотографии, в случае когда взгляд устремлен не в кадр
— Несколько людей на фотографии, когда часть их лица скрыта, например, масками
Можно сделать вывод, что в идеальных условиях(высокая четкость фотографии, лицо направлено строго в кадр) оба алгоритма работают без нареканий, но при малейшем отклонении от этих условий, каскады Хаара начинают сбоить. Поэтому выбор остановился на использовании модели MTCNN.
Теперь, когда разобрались с выбором метода обнаружения лиц на фотографии перейдем непосредственно к самой задаче. Для определения возраста и пола использовались две разные модели, обученные на огромном количестве данных. Обе модели были обучены Леви и Хасснером, первая их работа вышла в 2015 году под названием «Age and Gender Classification Using Convolutional Neural Networks». В своей работе они продемонстрировали, что при обучении с использованием глубоких сверточных нейронных сетей (CNN) можно добиться значительного повышения производительности при выполнении задач предсказывания возраста и пола.
Для определения гендерной принадлежности была взята модель с репозитория, посвященному статье «Understanding and Comparing Deep Neural Networks for Age and Gender Classification».Скачать модели можно по ссылке 1 (*.caffemodel) и по ссылке 2 (*.prototxt). Модель использует архитектуру сети GoogleNet и была предобучена на ImageNet dataset.
Как можно было заметить, каждая модель представлена двумя файлами, это значит что она была обучена с помощью Caffe (фреймворк глубокого машинного обучения нацеленный на простое использование, высокую скорость и модульность).Файл с расширением prototxt отвечает за архитектуру сети, а файл с расширением caffemodel за веса модели.
Ниже кратко представлен основной код, в качестве аргумента в модель передаем определённое выше лицо.
Результаты полученные в ходе отработки алгоритма
Определение пола и возраста по фото
Проект был выполнен для компании Deep.Social
Введение
Для рекламодателей, использующих influencer marketing, важно понимать, у какого блогера аудитория наиболее соответствует рекламируемым товарам и услугам. Довольно бессмысленно рекламировать деловые костюмы девочкам-подросткам, так же как и продвигать женскую косметику среди аудитории мужчин за 30.
Но сам Instagram не предоставляет никакой соцдем информации по аудитории блогера, поэтому рекламодателям приходится работать с блогерами исключительно на основе своих предположений о составе их аудитории. Единственный способ подтвердить эти предположения – просмотреть выборку из фолловеров интересующего блогера и оценить на глаз их возраст и пол. Это долгая, неинтересная, и немасштабируемая работа, к тому же не совсем объективная, т.к. разные люди оценят возраст по разному.
Но почему бы не поручить эту работу машине? Современные технологии Computer Vision уже достаточно развиты, чтобы справиться с этой задачей без участия человека.
Постановка задачи
На входе есть аватары Instagram пользователей. Необходимо понять, есть ли на аватаре люди, и сколько их. Если изображён один человек, предсказать его возраст и пол. При этом масштаб изображения может быть разным: на аватаре может быть портрет или даже часть лица, может быть человек в полный рост, может быть что-то промежуточное. Фото может быть цветным, чёрно-белым, тонированным, пропущенным через искажающие фильтры, с дорисованными частями и т.п.
Естественным образом задача разделяется на две основные части:
Обнаружение людей
Пол и возраст определяется прежде всего по лицу, поэтому обнаружением человека считается наличие лица в кадре. Нога, рука или спина, хотя и говорят о наличии человека на фото, для решаемой задачи не подходят. Безусловно, можно обучить computer vision модель, которая будет отличать мужскую ногу от женской, но на покрытие всех таких ситуаций ушло бы слишком много ресурсов, при сравнительно небольшой отдаче – всё таки лица изображены на аватарах гораздо чаще, чем ноги.
Обнаружение лиц на фото это известная и хорошо проработанная задача computer vision, поэтому здесь работа свелась к поиску подходящей модели и адаптации её под требования проекта. Основными требованиями были приемлемая скорость работы (аудитория блогеров это сотни миллионов пользователей) и наличие уже обученного и готового к использованию варианта (чтобы не тратить время на разметку данных и обучение).
Одним из дополнительных пожеланий было совмещение моделью двух функций: собственно нахождения лиц на фото, и определения опорных точек (face landmarks). Опорные точки это обычно центры глаз, кончик носа, углы губ и другие топологические точки, положение которых на лице может быть однозначно определено. Зачем они нужны?
Свёрточные сети (convolutional networks), используемые в моделях компьютерного зрения, обладают свойством трансляционной инвариантности (translational invariance), но не обладают (или обладают в ограниченном объеме) свойствами масштабной инвариантности (scale invariance) и инвариантности к повороту (rotation invariance). Это означает, что если изображение одного и того же лица смещается на фото в разные положения, то с точки зрения нейросети это будет то же самое лицо (трансляционная инвариантность). Но если лицо поворачивается или изменяется его масштаб, для нейросети это будут разные лица. Поэтому, чтобы облегчить задачу для нейросети, лучше приводить все лица к единому масштабу и единому вертикальному положению, а для этого нужна привязка к надёжным опорным точкам (например, считать стандартным размером лица расстояние в 100 пикселей между горизонталью глаз и горизонталью губ, и приводить все лица к этому масштабу)
Инвариантность для свёрточных сетей
С учетом перечисленных требований, задача свелась к выбору из двух моделей: MTCNN [1] и детектора из библиотеки dlib: CNN Face detector + 5-point landmark detector.
MTCNN vs dlib
Примеры определения границ лица и опорных точек библиотеками MTCNN (зелёный прямоугольник, зелёные точки), dlib (красный прямоугольник, фиолетовые точки), face-alignment (белые миниатюрные точки)
Архитектура MTCNN
MTCNN состоит из трех CNN-“стадий” P-Net, R-Net и O-Net, каждая из которых уточняет результаты предыдущей ступени, и предварительной стадии построения “пирамиды изображений”. Пирамида представляет из себя просто набор уменьшенных копий входного изображения. MTCNN заранее не знает, в каком масштабе будут лица на фото, а свёрточные сети, как уже говорилось выше, не инвариантны к масштабированию. Поэтому приходится готовить несколько версий входного изображения в разных масштабах, и искать лица на каждой версии.
Стадии работы MTCNN
Трёхстадийная архитектура позволяет MTCNN работать быстро, т.к. всю черновую работу делает простая первая ступень, а следующие занимаются только уточнением результатов. Как показали замеры, основное время уходит на построение пирамиды изображений, а не на собственно работу свёрточных сетей. Переход на более быстрые алгоритмы уменьшения изображений позволяет ещё в разы поднять производительность.
Нормализация лиц
Перед тем, как отдавать найденные лица в детектор пола/возраста, их необходимо нормализовать, т.е. привести лица разного масштаба, по разному повёрнутые и наклонённые, к одному стандартному виду “как на паспорт”.
Существует довольно много методик нормализации, от продвинутых, натягивающих лицо как скин на 3D модель и манипулирующих этой моделью в пространстве, чтобы она смотрела прямо в объектив и заполняла весь кадр, находясь в его центре, до простых, ограничивающихся приведением лиц к близкому масштабу. Какую из них выбрать?
Я исходил из принципа минимального вмешательства: нормализация должна выдавать только естественную форму лица, которая встречается в природе. Если нормализация изменяет пропорции раздельно по осям X и Y, изменяет параллельность линий, или тем более натягивает лицо на 3D сетку, то она может принести больше вреда, чем пользы. Это подтверждают исследования [3] результатами которых я активно пользовался при работе над этим проектом.
Примеры нормализации лиц, слева исходное фото, справа результат.
Определение пола и возраста
Выбор модели
Модель для определения пола и возраста подбиралась из примерно тех же критериев, что и модель для обнаружения лиц:
NASNet-A-Mobile-224, сконструированный с помощью “искусственного интеллекта”, содержит примерно в 5 раз параметров, чем ResNet-50. Но на практике он обучался не в 5 раз быстрее, а даже медленнее, чем ResNet-50.
Аналогично mobilenet-1.0-224, несмотря на то, что содержит в разы меньше параметров, чем ResNet-50, на практике обучался со скоростью, сопоставимой с ResNet-50, показывая при этом худшие результаты предсказаний. Видимо, эта архитектура имеет смысл именно для мобильных устройств, а не для стационарных GPU.
В итоге победил ResNet-50, как архитектура, оптимальным образом использующая стационарный GPU (обучение шло на видеокартах GTX 1080TI).
Архитектура
Обучающая выборка
В идеале обучающая выборка должна быть из того же распределения, что и данные, на которых потом модель будет делать предсказания. Это означает ручную разметку фотографий из Instagram, т.к. достоверную информацию о возрасте владельцев аккаунтов взять негде.
Ручная разметка пола это в принципе посильная задача, а вот с возрастом всё не так просто. Люди определяют возраст на глаз крайне субъективно, это означает большую дисперсию и затруднительность контроля результатов. Для того, чтобы получить от работников надёжный результат, обычно одна и та же задача даётся трём-пяти людям, и за верный результат принимается большинство голосов. Работник, часто дающий ошибочные результаты, заменяется. Для возраста такая схема работать не будет, т.к. чтобы получить надёжную картину максимума распределения возрастов для каждого фото и отсеять выбросы, пришлось бы давать оценить каждое фото 10-20 людям, что было бы слишком затратно.
10 оценкам от разных людей) и реальным возрастом. Источник: AgeGuess database, J. A. Barthold Jones et al, 2018, arXiv:1803.10063″ width=»400″ />
Распределение разницы между средним оценочным возрастом (по > 10 оценкам от разных людей) и реальным возрастом. Источник: AgeGuess database, J. A. Barthold Jones et al, 2018, arXiv:1803.10063
Оценка возраста людьми может сильно расходиться с реальным возрастом, см. приведённый рисунок. Кроме того, оценка возраста зависит еще и от национальности и культурного контекста оценщика, т.е. пришлось бы набирать распределённую по разным точкам мира команду.
Поэтому были рассмотрены другие источники. Стандартный dataset, используемый в академических кругах для подобных задач, это IMDB-WIKI [8]
Однако, качество разметки этого dataset-а, особенно в данных из IMDB, крайне низкое, и неприемлемо для проекта, который будет использоваться в production.
В результате самым продуктивным оказался самостоятельный автоматизированный сбор данных из социальных сетей и Интернет-сайтов, с последующей модерацией. Но найти хорошие источники размеченных фотографий для возрастов [11] Максимальный и минимальный learning rate подбирался с помощью техники LR range test [12]
Один полный прогон обучения занимал около пяти дней.
Результаты
Для возраста точность оценивалась по ошибке MAPE (Mean absolute percentage error), показывающей отклонение в процентах определенного моделью возраста от реального.
Собственный dataset
Распределение возрастов соответствует естественному распределению в социальных сетях, откуда были собраны данные.
Service | Gender accuracy, % | Age MAPE, % |
---|---|---|
Ours | 99.3 | 14.4 |
Face++ | 92.2 | 59.3 |
Clarifai | 84.8 | 47.7 |
Azure | 96.9 | 34.2 |
AWS Rekognition | 91.1 | 38.1 |
IMDB-Wiki
Из IMDB-WIKI были отброшены данные IMDB, как содержащие огромное количество неточностей, в данных WIKI был дополнительно вручную исправлен пол там, где были явные ошибки. Для тестов были взяты фото людей в диапазоне возрастов 13-44 года (актуальный диапазон для Instagram). Также были отброшены фотографии, сделанные до 2005 года, т.к. стилистика этих фото (косметика, причёски) отличается от современной, и фото такой давности редко встречаются в соцсетях.
Service | Gender accuracy, % | Age MAPE, % |
---|---|---|
Ours | 98.7 | 14.9 |
Face++ | 92.6 | 36.6 |
Clarifai | 91.9 | 35.9 |
Azure | 89.4 | 24.6 |
AWS Rekognition | 94.0 | 43.8 |
Adience
Возраст в Adience указан в виде диапазона а не точного значения, поэтому для него использовались другие метрики точности:
Если бы целью было показать хороший результат именно на Adience, надо было бы обучить модель на выборке с равномерным сэмплированием по всем возрастам.
На что смотрит модель?
Было бы интересно понять, какие области лица играют главную роль при определении пола/возраста. Большинство традиционных методы выявления областей внимания для этой модели, к сожалению, не выдают наглядных результатов, т.к. в результате нормализации лицо занимает практически весь кадр, и вся его площадь является активной областью. Самые наглядная визуализация получилась при использовании библиотеки SHAP [13] (метод DeepExplainer)
Активные зоны, влияющие на определение пола на мужском и женском лицах
Из собственного практического опыта работы с этой моделью – она смотрит примерно на те же признаки, что и человек, никакого сверхзнания у неё нет. Если показать модели фото мальчика, хорошо загримированного под девочку, модель выдаст ответ “девочка”, и наоборот. Трансгендеры и лица, не до конца определившиеся с выбором визуального пола, вызовут у модели затруднения при определении биологическго пола, такие же, как и у людей.
Эволюция в результате обучения
Ещё один вопрос, на который было интересно ответить – насколько модель далеко ушла в своей эволюции от изначальной модели, обученной на изображениях ImageNet? Поскольку выразить “далеко” или “не очень” в виде числовой оценки затруднительно, лучше получить ответ в виде визуализации. Я использовал визуализацию каналов ResNet с помощью библиотеки Lucid. Суть этой визуализации в том, что с помощью оптимизации подбирается такое входное изображение, которое максимизирует ответ от канала. Содержимое этого изображения будет указывать, на какие паттерны во входном изображении реагирует данный канал.
Визуализация паттернов в первом блоке ResNet, 6-й канал
Визуализация паттернов в первом блоке ResNet, 7-й канал
В первом блоке обрабатываются самые простые паттерны. Видно что паттерны для исходной и нашей модели не сильно отличаются. Тем не менее уже заметно, что паттерны для ImageNet (нижние ряды) имеют более сложную структуру.
Визуализация паттернов во втором блоке ResNet, 5-й канал
Во втором блоке паттерны усложнились, но всё еще похожи друг на друга. Заметно, что в паттернах ImageNet больше цветовое разнообразие, а паттерны нашей модели окрашены в цвета, близкие к телесным.
Визуализация паттернов во третьем блоке ResNet, 4-й канал
Визуализация паттернов во третьем блоке ResNet, 8-й канал
В третьем блоке паттерны продолжают усложняться, и схожесть между ними остаётся только на самом общем уровне. Паттерны ImageNet имеют гораздо более проработанную структуру, которая начинает соответствовать объектам из реального мира.
Визуализация паттернов в четвёртом блоке ResNet, 4-й канал
В последнем блоке паттерны окончательно перестали был похожими друг на друга. В паттернах нашей модели видна структура, соответствующая человеческим губам. в паттерах Imagenet – что то растительное.
Видно, что эволюция в верхних слоях зашла довольно далеко, при этом паттерны нашей модели в целом проще исходных, т.е. произошла некоторая деградация. Возможно, что ResNet-50 избыточен для данной задачи, и можно было использовать более простую сеть.
Интерактивное демо
В статье не публикуются образцы предсказаний модели, т.к. любые предсказания можно сгенерировать самостоятельно, с помощью интерактивного демо, находящегося по адресу https://ag-demo.suilin.ru/.
В демо можно загружать любые фото, где есть лицо одного человека. Поддерживается работа как с компьютеров, так и со смартфонов (можно определять пол и возраст для селфи).
Резюме
Задача распознавания пола и возраста в промышленных масштабах оказалась вполне решаемой. При этом модель угадывает возраст примерно на уровне человека, часто даже точнее.