Pull to refresh
0

«Узнаю, когда увижу» — изучаем точность Google Cloud Vision с помощью Tumblr и NSFW контента

Reading time 5 min
Views 8.8K

image


Для небольших команд и технологических стартапов облачные сервисы зачастую являются единственным шансом наладить бизнес-процессы и выпустить продукт на рынок в разумные сроки. Такие крупные игроки как Google, Microsoft, Amazon, Яндекс предлагают широкую линейку продуктов всем желающим. И если к надежности корпоративной почты вопросов не возникает, то к сервисам машинного обучения порою следует относиться настороженно.


Особенно тогда, когда вы пытаетесь научить машину различать объекты, разницу между которыми не всегда можно внятно описать даже знающему человеку. Насколько точны алгоритмы, лежащие в основе решений "из коробки" от крупных компаний?


В 1964 Член Верховного Суда США заявил:


Я не стану пытаться сейчас точнее определить материал, подпадающий под это краткое описание [«жёсткая порнография»]; возможно, я никогда не сумею дать этому внятное определение. Однако я узнаю, когда вижу.

Государственная машина в нашей стране периодически впадает в состояние активной борьбы с порнографией в частности и эротикой в целом. Не будем обсуждать цели, содержание и перспективы этой борьбы. Но отметим, что иногда ответить на вопрос — nsfw or not nsfw? — достаточно сложно.
Скромный коллектив smmframe.com давно интересовали вопросы надежности Api от Корпорации Добра и однажды для обкатки нескольких технологий было решено проверить качество работы Google Cloud Vision на примере задачи распознавания эротических и псевдоэротических изображений.


Техническая реализация или "Скачать фото голых девушек"


Первый вопрос — откуда брать датасет? Нам нужен датасет удовлетворяющий трем требованиям:


  • соответствие всех фотографий одному определенному тегу (для быстрого начала работы)
  • наличие нейтральных фотографий по этому тегу
  • наличие отнюдь не нейтральных фотографий по этому тегу
  • желательно обойтись без откровенной порнухи и наготы не спортивно

Наш выбор пал на Tumblr — множество подходящих фотографий по тегу girl и удобное API. Конечно, было бы лучше искать по sexy girl, но тумблр сильно ограничивает выдачу по nsfw тегам.


Сбор данных для оценки качества работы сервиса сам по себе прост. Регистрируемся на сервисе Google Cloud Vision, смотрим ценообразование в строчке Explicit Content Detection. Разбираемся с апи от тумблр.


Читаем документацию и пишем скрипт который будет по cron скачивать фотографии и тут же передавать их Гуглу. Получаем ответ сервиса — оценка вероятности того, что на картинке есть эротика по шкале от 1 до 5. Разбираем ответ сервиса и сохраняем в файлик на будущее.


Остается самый долгий и нудный этап — проставить вручную оценку от 1 до 5 всем фото в датасете. Для удобства просмотра изображений сделали сайт: labs.smmframe.com. Отважный человек, вызвавшийся просмотреть все фотографии, отметил два момента: очень много повторов фотографий и очень много Эммы Уотсон


Странности или почувствуй себя Милоновым


Странностей в результатах от Vision API хватает. Отметим сразу — сервис очень хорошо работает для очевидных граничных случаев.


Безопасная:
image


Небезопасная: (ссылка на саму картинку тут.) А пока просто котик.


image


Почти небезопасная:
image


Отметим, что по выбранному нами тегу girls достаточно часто попадаются изображения маникюрных наборов, цветочков или типичных предметов населяющих женскую сумочку. Всё это классифицируется как Very Unlikely, что правильно. Голые девушки детектируются как Likely — что тоже верно.


Встречаются ли откровенно неверные оценки абсолютно безопасного контента? Конечно! Но сложно описать эти случаи внятно.


Сложности работы с девушками в нижнем белье или тонкая-тонкая грань дозволенного


Ретроспективно, предпосылкой появления статьи стало вот это изображение, случайно попавшее на монитор в одном клубе. Скажем сразу — две милые барышни не вызывают у Google каких либо плохих ассоциаций о чём свидетельствует рейтинг Unlikely.


image


И это по-меньшей мере странно, ведь другие три картинки значительно более пристойного содержания были оценены как близкие к NSFW:


image
Слева направо: Unlikely, Likely, Likely


Это очень странный результат, когда Unlikely проставляется фотографиям с одетыми девушками:


image


Что такое Explicit Content?


Вот к примеру милая картинка отрубленной головы с рожками и достаточно достоверно прорисованной анатомией шеи.
image
Сразу возникает вопрос — почему проставлен тег girls фильтр пропустил это? Обратившись к словарю, можно узнать что понятие Explicit Content не ограничивается непристойными вещами сексуального характера, но включает в себя ярко выраженную агрессию, нецензурную брань, пропаганду вредных привычек, кровь, расчленёнку и много другое, на что не следует обращать внимание особо впечатлительным людям.


Выходит, что Google Cloud Vision в данном случае скорее ошибся, чем оказался прав, ведь картинку не следует показывать детям.


Гифки


Вот более интересный пример — гифка с переливающимися красками, кошкой и голой грудью. Нам неизвестно как именно анализируются gif файлы, но для человека оценка данной картинки как непристойной очевидна. Вероятно, далекий от стандартного цвет кожи и нетипичный ракурс позволили картинке обмануть фильтры — оценка Very Unlikely.


Интересно, что некоторые очевидно пристойные и благонравные вещи в движении могу казаться пикантными. Сравните просто кадр из гифки (пик ниже) и саму гифку


image


Сложности дополненной реальности


Раз мы обсуждаем картинки, то давайте рассмотрим вот такой пример. Два изображения получены в одном и том же известном приложении. Вот только первое расценивается как безопасное, а второе — Likely.


image
Бедный парень признан NSFW.


image
Девушка же просто забавляется.


Почему именно так догадаться сложно, но у Cloud Vision Api нездоровая привычка менять классификацию при сравнительно небольших изменениях выражения лица или позы людей.
Вот ещё несколько примеров:


image
Слева — Unlikely, справа — Likely


image
Слева — Unlikеly, справа — Likely. Есть версия, что дело в плохом фокусе на левом изображение.


image
Слева — Unlikеly, справа — Likely.


image
Слева — Very Unlikеly, справа — Unlikely.


5 баллов или зачем нам градация?


Вам могло показаться, что мы придираемся. Действительно, не всегда можно провести разницу между девушкой в купальнике и спортивном лифчике. Более того, о вкусах не спорят. Поэтому, даже если Google странно ведет себя при казалось бы мало различающихся фотографиях, то давайте покажем где он крут. Тыц и тыц. Всё абсолютно правильно, остается только поражаться проделанной работе и способности замечать детали занимающие столь малую площадь на изображениях.


После первых нескольких сотен фотографий в датасете мы решили не выставлять баллы от 1 до 5 и перейти к градации nsfw / не nsfw. Результаты сопоставления нашей оценки с оценкой Гугл приведены в таблице ниже. Из 13к фотографий после удаления дубликатов получили 11246.


Тип оцeнки Число фотографий Помечено как NSFW Доля
VERY_LIKELY 116 62 0.53445
LIKELY 176 47 0.26705
POSSIBLE 503 44 0.08748
UNLIKELY 3709 112 0.03020
VERY_UNLIKELY 6690 50 0.00747
ERROR 52 2 0.03846

Резюме


В результатах работы любого классификатора всегда встречаются как ложноположительные, так и ложноотрицательные случаи. Первоначально перед нами стояла задача поиска изображений возможно непотребного характера в приличной окружающей обстановке при анализе выдачи изображений из Instagram по определенному хеш-тегу. Это должно было уберечь наших клиентов от демонстрации на экране в каком-либо заведении откровенно неприглядных сцен. В целом, API справляется с своей задачей если пользоваться им на уровне ДА / НЕТ. Более тонкая градация хорошо работает для поиска NSFW контента, а встречающиеся ложноположительные результаты зачастую лучше отфильтровать, чем пропустить — береженого бог бережет.


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


Немного о нас:


Smmframe.com — сервис позволяющий организовать трансляции из фотографий по заданному хештегу. С помощью нашего сервиса, увеселительные заведения могу рекламировать себя в социальных сетях. Мы разработали несколько продвинутых алгоритмов, позволяющих находить самые интересные фотографии которые точно зацепят будущих посетителей.

Tags:
Hubs:
+10
Comments 11
Comments Comments 11

Articles

Information

Website
smmframe.com
Registered
Employees
2–10 employees
Location
Россия