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

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

Локальное ранжирование в Google: как проверять эффективность продвижения сайта в разных регионах

Чтобы убедиться, что сайт правильно продвигается, необходимо понимать, как именно он ранжируется в разных региональных сегментах интернета. Команда Links.Sape рассказывает...
Read More

Как совместить карьеру и семью: интервью с сотрудником REG.RU

Режим самоизоляции 2020 года разделил нашу жизнь на «до» и «после». И хоть прошло больше двух лет, многие IT-специалисты так...
Read More

Подборка выпусков подкаста «640 килобайт» для IT-специалистов

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

Близнецы или двойняшки: что такое тайпо-домены

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

Необычная среда разработки Jupyter Notebook

Если вы хотите писать на Python или работать с Data Science, обратите внимание на интерактивную среду разработки с «живым» кодом...
Read More

Как определить фишинг и не попасться на крючок

Праздник к нам приходит, а вместе с ним и два месяца распродаж: 11.11 и «черные» дни недели. К сожалению, также...
Read More

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

Причина популярности облачных технологий в бизнесе — не только безопасность данных и сокращение time-to-market (времени вывода на рынок). Облака позволяют...
Read More

Осенний рецепт для создания крутого сайта

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

Что такое Python-хостинг и какой тип услуги выбрать

В статье мы расскажем о том, что такое Python и как выбрать хостинг для проектов на этом языке. (далее…)
Read More

Элиза, Пэри и Алиса: история и эволюция чат-ботов

За последнее десятилетие чат-боты незаметно влились в нашу жизнь и стали ее неотъемлемой частью. Siri поможет найти ответ на любой...
Read More