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

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

Улучшаем графику в старых играх и видео с помощью нейросетей

Улучшаем графику в старых играх и видео с помощью нейросетей

Бывало ли с вами такое: вы решили скачать любимую компьютерную игру детства и ненадолго погрузиться в счастливые воспоминания. Установили её,...
Read More
Как создать сайт-портфолио для творческого проекта

Как создать сайт-портфолио для творческого проекта

Резьба по книгам, money art, тканевые скульптуры — искусство может принимать самые разные формы. А благодаря Интернету современные художники могут...
Read More
Нейросеть описывает мир незрячим людям

Нейросеть описывает мир незрячим людям

Голосовые ассистенты могут не только играть в «города» и рассказывать о погоде — они способны на гораздо большее! Например, помогать...
Read More
Экскурсии в дата-центр: как мы провели 300 человек на закрытый объект и почему нас уже не остановить

Экскурсии в дата-центр: как мы провели 300 человек на закрытый объект и почему нас уже не остановить

Отвлекитесь немного от экрана и посмотрите на вещи, которые вас окружают. Стол, кружка, лампа, смартфон, клавиатура — всё это материальные...
Read More
Стэнфордский курс: лекция 3. Функция потерь и оптимизация

Стэнфордский курс: лекция 3. Функция потерь и оптимизация

На прошлой лекции мы разобрались, как работает классификация изображений. Что же может «потеряться» в процессе и можно ли этого избежать?...
Read More
Как ИИ отслеживает небезопасное поведение водителей

Как ИИ отслеживает небезопасное поведение водителей

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

Многозначная классификация с помощью Keras

Можно ли обучить нейросеть делать не один, а сразу несколько прогнозов? Этот вопрос возникает, когда нам необходимо классифицировать изображения по...
Read More
Большая игра, или Загадочная история домена SEX.COM

Большая игра, или Загадочная история домена SEX.COM

“The Internet is for porn” — так пелось в бродвейском мюзикле Avenue Q (пародия на «Улицу Сезам»). И, несмотря на то,...
Read More
Топ-5 голосовых приложений, созданных с помощью GPU

Топ-5 голосовых приложений, созданных с помощью GPU

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

Какие тайны скрывает главный домен для e‑commerce

Домен .SHOP появился в 2016 году и стал прямым ответом индустрии на важный запрос рынка — необходимость в короткой и...
Read More