Поиск по сайту Поиск

Нейросети VS Правило 34: AI научились скрывать обнажённых людей

В одном из эпизодов сериала «Чёрное зеркало» женщина использовала для своей дочери систему, которая блокировала все жестокие, негативные или неподобающие жизненные реалии. Возможно, скоро нейросети действительно будут помогать в родительском контроле: во всяком случае, исследователь Пранит Бедапуди (Praneeth Bedapudi) уже научил их ставить цензуру на фотографиях с обнажёнными людьми.

Часть 1. Обнаружение наготы с помощью классификации изображений

Классификацию изображений реализовать достаточно легко, если пользоваться библиотеками Deep Learning и огромным числом готовых решений с открытым исходным кодом. То есть, если у вас есть готовый датасет для тестирования и проверки классификационных моделей. Но получить набор данных для конкретной задачи иногда бывает затруднительно. Обнаружение обнажённой натуры и NSFW (Not safe/suitable for work, что означает Небезопасно/неподходящее для работы) — как раз одна из таких проблем, для которых почти нет датасетов в открытом доступе.

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

Что мы делаем: наша цель — создать хороший набор с открытым исходным кодом и предоставить предварительно обученную на нём модель.

Зачем: мы верим, что для этой задачи не нужно изобретать велосипед. На момент публикации статьи мы нашли всего два решения для обнаружения цензуры — open_nsfw от Yahoo и nsfw_model от разработчика с ником GantMan. Модель Yahoo давно устарела, а её исходные данные недоступны. Сеть GantMan появилась, когда мы уже начали наш проект — сравнение с ней можно посмотреть ниже.

Собираем «голые» изображения

Мы решили начать с Reddit. Составили список NSFW разделов, собранных в основном с сайта scroller (его специально сделал разработчик с ником faroix). После загрузки и просмотра (не рекомендуется детям и слабонервным) с помощью приложения RipMe около 1000 изображений из каждого раздела мы обнаружили серьёзную проблему. Почти все фотографии были очень высокого разрешения, и их общий размер составил ~260 ГБ. Но встречались и снимки плохого качества. Чтобы как-то уравновесить их, мы добавили скриншоты из видео с PornHub. Это необходимо для того, чтобы впоследствии нейросеть могла распознавать цензуру на изображениях любого качества.

Пока мы проделывали эту работу, другой энтузиаст GantMan выложил в открытый доступ  модель, обученную на собранных alexkimxyz данных. Поэтому мы связались с ним и получили его датасет.

Используя эти команды для нормализации изображений и удаления дубликатов, мы получили 178601 снимков из PornHub, 121644 из Reddit и 130266 из набора данных GantMan.

Собираем безопасные изображения

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

Поэтому нам понадобились изображения с необнажёнными людьми. Немного подумав, мы решили, что наиболее подходящим для их сбора местом будет Facebook. Мы просканировали фотографии профилей с помощью Graph API и составили список безопасных разделов, отобрав для каждого из них ~1000 изображений с помощью RipMe. После изменения размера и удаления дубликатов мы получили 68948 снимков из Facebook, 98359 из набора данных GantMan и 55137 из Reddit.

Строим конвейер для обработки

Мы использовали отличную библиотеку для дополнения изображений Augmentor вместе с fit_generator из Keras.

Следующий фрагмент кода демонстрирует дополнение обучающей выборки:

Обучаем нейросеть

Для обучения мы использовали GTX 1080Ti, 12 ГБ VRAM и 64 ГБ системной памяти. Размер пакета установлен на 32 с Xception, а размер входных изображений — 256х256.

Примечание: Классификационные модели в Keras не используют регуляризацию. То есть, они не вводят дополнительные ограничения, исключающие ошибки в данных и позволяющие избежать переобучения. Чтобы добавить регуляризацию (Dropout или L2), запустите цикл по каждому слою:

Применяя SGD (стохастический градиентный спуск) с моментом (momentum), модель достигает точности 0.9347 по данным GantMan.

Оцениваем нейросеть

Найти правильные данные для оценки такой модели очень сложно. Визуализация наготы имеет тысячи вариантов (см. Правило 34), и создать всеобъемлющую тестовую выборку практически невозможно. Но хотя бы для понимания того, как работает нейросеть, мы использовали данные, собранные Aditya Ananthram. На самом деле даже они не слишком подходят для тестов. Самый действенный способ протестировать и улучшить подобную модель — использовать помощь сообщества. Поскольку тестовые данные находятся в разных категориях, мы отображаем классы “nsfw_porn”, “nsfw_explicit_nudity”, “nsfw_simulated_porn” в категории «ню» (“nude”), а «sfw» - в «безопасной» (“safe”).

https://cdn-images-1.medium.com/max/800/1*rYQq9oHfNvrgrMokZpDf3A.png
Точность классификатора NudeNet

Для оценки модели с тестовой выборкой GantMan мы отнесли классы “hentai”, “porn” к категории «ню», а “drawings”, “neutral”, “sexy” — к «безопасной». 

https://cdn-images-1.medium.com/max/800/1*JoBSB6MzTbcHJJoIJGWbog.png
Точность модели nsfw_model от GantMan
https://cdn-images-1.medium.com/max/800/1*y_kC3vN5ex_z1XrgsK-5YA.png
Точность модели Open NSFW от Yahoo

Как ни странно, все три проекта получили одинаковые оценки, хотя допускали ошибки на разных изображениях. Например, модель GantMan терпит неудачу со снимками Джеффа Голдблюма, а NudeNet – нет. Точно так же NudeNet не может классифицировать те изображения, с которыми справляется GantMan. За пару месяцев работы над этим проектом мы нашли множество примеров, на которых облачный API от Google с треском провалился. Поскольку большинство из них — NSFW, мы не можем вам их показать.

Спустя некоторое время мы нашли другой набор данных для проверки нейросети. Он показал следующие результаты:

https://cdn-images-1.medium.com/max/800/1*2HNxom63gSHgUZvcnADgIQ.png
Точность NudeNet на наборе данных dataturks

https://cdn-images-1.medium.com/max/800/1*GK7Ht8onoRi3n4Bp1U0NEw.png
Точность модели GantMan на наборе данных dataturks

Часть 2. Нанесение цензуры на обнажённые изображения

Зачем: главный недостаток классификации изображений — отсутствие контроля над деталями. Если мы хотим работать только с определённой частью фотографии, то необходимо использовать алгоритмы по обнаружению объектов.

Предположим, что кто-то допускает размещение снимков с обнажённой грудью или ягодицами, но против демонстрации половых органов или каких-либо других комбинаций частей тела. Достичь этого только с помощью классификации невозможно, поэтому пришлось прибегнуть к распознаванию объектов. Мы использовали данные, собранные Jae Jin и его командой. В них содержится 5789 изображений со следующим распределением меток:

https://cdn-images-1.medium.com/max/800/1*S8pBYOo7yurPVbcvz-p-Aw.png

Мы дополнили датасет, случайным образом добавив к снимкам размытие, смещение и т. д.

Поскольку в данных наблюдается дисбаланс классов, для обнаружения объектов мы решили применить RetinaNet от FAIR. RetinaNet использует изменение кросс-энтропийной потери Focal Loss, которое предназначено для повышения эффективности одноэтапного обнаружения объектов.

Применив resnet-101 в качестве бэкэнда, мы получили представленные ниже результаты тестирования:

https://cdn-images-1.medium.com/max/800/1*TPuOHqY6lHtgu3Za-mGYlA.png

Оцениваем модель

Нейросеть можно использовать как для обнаружения обнажённого тела, так и для цензуры. Поэтому мы тестируем её на тех же датасетах, с которыми проверяли классификатор. Если на изображении обнаружена любая из меток “BUTTOCKS_EXPOSED”, “*_GENETALIA_EXPOSED”, “F_BREAST_EXPOSED”, мы помечаем его как «ню», если нет — как «безопасное». Распределение меток выбрано в соответствии с тестовой выборкой. Например, снимки с обнажённой мужской грудью или животом представлены в категории “sfw”.

https://cdn-images-1.medium.com/max/800/1*C25E8ad1DRuBZ1WcKkB0VA.png
Точность детектора NudeNet

Детектор NudeNet работает лучше, чем Open NSFW, nsfw_model и классификатор NudeNet. В него добавлена функция, закрывающая нежелательные части nsfw-изображений. Пример её работы:

https://cdn-images-1.medium.com/max/800/1*7KOb6bbSupcrzxiXkTUDCg.jpeg

Использование нейросети NudeNet

Проект NudeNet доступен на GitHub.

Предварительно обученные модели можно найти в папке /NudeNet-Models.

Для установки и использования нейросети выполните следующий фрагмент кода:

NudeNet можно использовать для цензурирования обнажённых фигур на любых изображениях, даже если они занимают совсем немного места на фотографии. Как вы могли заметить, сеть работает ещё и с анимационным контентом, что делает её незаменимым инструментом для родительского контроля.

С оригинальной статьёй можно ознакомиться на сайте medium.com.

Победить конкурентов и увеличить выручку: кейс горизонтального масштабирования клиники

Рассказываем путь развития стоматологической клиники к повышению выручки на 40% с сохранением рентабельности.
Read More

Руководство по CI/CD в GitLab для новичка

В статье разбираем, как устроена практика CI/CD, какие у нее нюансы и преимущества использования. А также расписываем пошаговый процесс использования...
Read More

Что такое GitLab, кому нужен, как пользоваться

GitLab — платформа для совместной разработки. Она позволяет командам организовывать свои процессы от планирования до мониторинга и может работать в...
Read More

Как продавать представителям разных поколений

Рассказываем, как работает теория поколений и чем она оказывается полезной для маркетинга в малом и среднем бизнесе.
Read More

Как привлечь новую аудиторию и победить конкурентов. 3 кейса-стратегии

На примере трёх кейсов разбираем трансформацию продуктов на основе методологии jobs-to-be-done.
Read More

Что стоит автоматизировать в бизнесе с самого начала

Экономить силы, время и деньги – это база, а не привилегия. Автоматизируйте процессы и уделяйте внимание стратегическим задачам.
Read More

Как составить бизнес-план: пошаговая инструкция

Бизнес-план — стратегия развития проекта, без которой не стоит начинать ни один бизнес. Рассказываем, как правильно его составить.
Read More

Сильная презентация для инвесторов: от содержания до выступления

Всё про качественную презентацию для инвесторов. Что разместить на слайдах, как держаться на встрече и увеличить свои шансы на сделку.
Read More

Дёшево и эффективно: как малому бизнесу продвигать свой сайт

Как выделиться среди конкурентов и получить внимание потенциальных клиентов. Бюджетные методы продвижения сайта – в этом обзоре.  
Read More

Как перевести бизнес в онлайн: 7 шагов

Пошаговая инструкция по переводу существующего бизнеса в онлайн: от создания сайта до начала продаж и запуска рекламы.
Read More