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

Нейросети 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.

6 трендовых доменных зон для онлайн-бизнеса

6 трендовых доменных зон для онлайн-бизнеса

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

Обучаем виртуального дракона фигурам высшего пилотажа

В наши дни компьютерная графика присутствует во всех популярных видах визуального контента: от видеороликов YouTube-блогеров до полнометражных фильмов. Но проработка...
Read More
Стэнфордский курс: лекция 9. Архитектуры CNN

Стэнфордский курс: лекция 9. Архитектуры CNN

На прошлом уроке мы узнали о наиболее популярных библиотеках и фреймворках для глубокого обучения, рассмотрели их особенности и области применения....
Read More
GPT-2: нейросеть, которая закончит за вас предложение

GPT-2: нейросеть, которая закончит за вас предложение

Встречали ли вы когда-нибудь собеседника, который после нескольких сказанных вами слов заканчивал за вас предложение? GPT-2 умеет и не такое:...
Read More
Жуткие сайты, которые вызовут у вас мурашки

Жуткие сайты, которые вызовут у вас мурашки

Интернет может не только развлекать вас новыми мемами и видеороликами, но и быть по-настоящему пугающим. В честь Хэллоуина представляем несколько...
Read More
10 ингредиентов надёжной инфраструктуры хостинга REG.RU

10 ингредиентов надёжной инфраструктуры хостинга REG.RU

Привет! На связи редакция блога. И сегодня мы расскажем в деталях об одной из сторон инфраструктуры REG.RU, объясним как работает...
Read More
Голосовой помощник Apple, которому можно доверять

Голосовой помощник Apple, которому можно доверять

Мы гораздо больше доверяем тем людям, общаться с которыми нам легко и приятно. Обычно так происходит, когда их стиль и...
Read More
Как организовать техническую поддержку пользователей

Как организовать техническую поддержку пользователей

Быстрая техподдержка очень важна для клиентов, особенно в критических ситуациях. От скорости и качества решения проблемы зависит лояльность пользователя и...
Read More
Роботы в облаках: совмещение ROS и Jupyter

Роботы в облаках: совмещение ROS и Jupyter

Робототехника — одна из самых популярных и прогрессивно развивающихся отраслей. Ролики Boston Dynamics на YouTube собирают миллионы просмотров. Если вы...
Read More
Стэнфордский курс: лекция 8. ПО для глубокого обучения

Стэнфордский курс: лекция 8. ПО для глубокого обучения

В предыдущих главах мы познакомились с основами обучения нейросетей и выяснили, чему при этом стоит уделять больше внимания. Сегодня вы...
Read More