Занимаясь вопросами качества поиска, рано или поздно приходится столкнуться с задачей визуальной валидации продуктов. Опустим простые задачи, с которыми справится обычный классификатор, сосредоточившись на случаях, которые требуют более или менее точной геометрии объекта:



Предположим, необходимо отобрать только хорошие фотографии тех или иных объектов, для последующего использования в e-commerce. Под хорошими будем подразумевать фотографии без лишних деталей с доминирующим основным объектом.

Зачем это нужно?


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

Ниже «разнобой» стилей для одной из категорий тестового магазина



Не усложняя далее, если футболка немного теряется на фотографии, или вы рассматриваете не совсем нужные вам детали — что-то с большой вероятностью пойдет (или уже пошло) не так.

Таким образом, одна из стратегий предварительной валидации может быть сформулирована очень просто: фотографии с доминирующими продуктами побеждают. Дело за малым, необходимо дать им победить.



Ранние результаты выглядели достаточно неплохо и позволили существенно упростить и автоматизировать валидацию:



Что не так bounding box подходом?


Основная проблема — точность результатов. Сложные объекты, нестандартные фотографии, реальная жизнь, ну вы знаете. Таким образом, если у вас есть bounding box — у вас все еще недостаточно информации.



Вывод несколько огорчает, поскольку сразу отметает проверенные и хорошо работающие решения (или делает их существенно сложнее). Например, использование нейросетей для получения сколь-нибудь точной геометрии требует достаточно много ресурсов на подготовку тренировочного набора, не гарантируя необходимую точность.



А ведь имея более или менее точную геометрию, можно было бы использовать более сложную логику анализа и валидации. Да чего уж там, можно и на видео замахнуться (выбор необходимого отрезка, автоматический кроп и т.д.)



Решение


Текущее решение нельзя назвать универсальным из-за достаточно большого количества ограничений и упрощений.

Упрощение №1: контраст


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



Естественно, при необходимости контраст можно повысить, делая решение более стабильным



Кстати, на примере выше реализован поиск имплантированных волос. Очень странная задача, которая появилась на stackoverflow и успешно «отобрала» один вечер.

Упрощение №2: только один объект должен быть доминирующим


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



Сложные случаи


Занимаясь данное темой некоторое время, могу уверенно сказать — все случаи по-своему сложные. Тем не менее, динамичные сцены или сцены с изменяющейся дистанцией создают наибольшие проблемы.

Танцы




Лыжник




Дополнительно:
    Странности 4K Mask RCNN COCO
   YOLOv2 vs YOLOv3 vs Mask RCNN vs Deeplab Xception
   Телеграм: RobotsCanSee
   Instagram: RobotsCanSee

Комментарии (3)


  1. xgbaggins
    12.11.2018 11:23
    +4

    Тема не раскрыта, как решили проблему?


    1. aarner Автор
      12.11.2018 11:26
      -1

      Я бы сказал — частично раскрыта. Точный контур в примерах как раз и является решением. Не буду называть его полным, поскольку решение не является полностью универсальным. Сейчас прорабатывается вариант нейронная сеть обеспечивает object detection и bounding box, после чего в полученном прямоугольнике пытаемся получить четкую геометрию.


    1. aarner Автор
      12.11.2018 11:35
      -1

      Добавил еще один пример, достаточно простой алгоритм позволяет получить следующее: