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

    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 — сервис позволяющий организовать трансляции из фотографий по заданному хештегу. С помощью нашего сервиса, увеселительные заведения могу рекламировать себя в социальных сетях. Мы разработали несколько продвинутых алгоритмов, позволяющих находить самые интересные фотографии которые точно зацепят будущих посетителей.

    SMMFrame 8,32
    Компания
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 10
      0
      Вы не пробовали фото из раздела ERROR скормить гуглу повторно? Он так же возвращал ошибку?
        0
        Ссылку на страницу с размеченным датасетом лучше выделить сильнее, а то теряется.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Сетка работает достаточно просто — определяет открытую кожу (по оттенку), и всякие «пикантные» части тела, которые должны быть скрыты.

          Большинство приведённых в статье картинок сфейлилось именно по критерию — доля оголённой кожи. Или, кожа, которая не распозналась как кожа из-за особенностей освещения.

          Довольно простой критерий.
            0
            Бедный парень признан NSFW.
            Девушка же просто забавляется.
            Вот только «девушка» — это тот же «бедный парень».
              0
              Если для вас существуют картинки NSFW — то вы не ту W выбрали :)

              Меня всегда забавляли два наблюдения отношений к сиськам и сексу:

              1) Дети до 3 лет вполне себе могут пялиться на голую женскую грудь — при кормлении, но вот потом до 16+ им низзя!

              2) Детям «до 16» вполне себе доступны занятия, которыми занимаются «16+». Но тем неменее — запрещают и огораживают, что делает объект запрета ещё более интересным.
                +1
                Думаю, ТС не для себя фильтровали. У них же сервис для отображения картинок по тегам на экранах заведений. Очевидно большая часть клиентов захочет показывать только «приличное»… Но тогда совсем не раскрыт вопрос фильтрации рекламы конкурирующих заведений, что куда сложнее. Или только ручками все просматривать? Тогда смысл в фильтре NSFW? Фильтровали бы ручками сразу все, точнее вышло бы.
                  0
                  Ручная фильтрация предусмотрена, очень востребованной была автоматическая модерация изображений эротического характера. Поэтому мы добавили такую возможность в наш сервис. Ее как опцию можно выбрать при создании заказа.
                +1
                Технологии на страже мракобесия.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое