Обновить

Комментарии 33

Спасибо большое за статью! Узнал новое про r-mac пудинг. Используются ли в работе трансформеры и attention модели? Особенно интересны модели, связывающие текст и картинки. вроде бы из общих соображений CLIP, от
openai например, должен особенно хорошо значимые фичи выделять

Спасибо за отзыв.
Да, CLIP может использоваться для мэтчинга текст-изображение. Сейчас мы используем трансформеры для вычисления объединённого эмбеддинга по нескольким фотографиям чертежей с разных видов. Аналогично, можно применять к товарам маркетплейса.


Visual Transformer как бэкбон у нас пока не показал качество лучше, чем ResNet/EfficientNet, но ещё вернёмся к более глубокому анализу

А tineye работает на похожем алгоритме? Я несколько лет назад был сильно удивлен когда он по моей картинке нашел оригинальную и оказалось что мой экземпляр — это кроп от оригинала. Это уже не похоже на алгоритм фингерпринта.

Думаю, что tineye работает примерно так же. В простейшем случае он вообще может использовать что-то типа perceptual hash, в этой библиотеке есть несколько подобных алгоритмов: https://github.com/idealo/imagededup

А в какой БД можно хранить миллиарды таких хешей и еще искать близкие по дистанции?

Можно все в тех же индексах, которые я указал — nmslib, faiss, annoy, scann. Если нужно постоянное хранилище, то в принципе и обычная база подойдёт типа Postgres. Но понятно, в ней поиск делать не надо, просто выгружать/загружать хэши

Непонятно логика, зачем хранить отдельно от поиска. Каждый раз когда надо поискать — надо куда-то загружать? А индексы сами не могут выступить в качестве БД с записью на диск или они только in-memory?

Сразу не заметил комментарий. Да, отдельная БД нужна для сохранения на диск. Это делается на этапе инициализации / добавления новых данных на индексирование, так что не поиске не делается

Можно посмотреть на https://www.milvus.io/.

Да, давненько про него слышал, ещё не дошли руки попробовать. Спасибо!

Они сделали алгоритм задолго до всех этих нейроночек, не думаю, что они стали бы что-то менять, что итак работает.
Очень интересная статья, спасибо!
А как вообще выглядит датасет для тренировки? Это множество фотографий на каждый объект? И как вы его размечали?

Спасибо!
У нас около 600 тыс изображений, размеченных следующим образом. Эксперты выполняли поиски в базе логотипов, используя один из существующих алгоритмов поиска (фильтрация по классам, словесный поиск и пр.). Для каждого изображения проставлено, в каких поисках оно встречалось. Одно и то же изображение могло встретиться в разных поисковых выдачах. Из этого мы сделали multilabel разметку, и дальше уже учили парные лоссы с разными алгоритмами hard negative mining. Кстати, могу упомянуть метод XBM для майнинга (https://arxiv.org/abs/1912.06798) — нам очень хорошо зашёл

Еще вопрос, а можете порекомендовать конкретную архитектуру, которая сравнивает вектора фичей от изображений?

Дтасет тут зависит от выбранной функции потерь, если это Contrastive Loss то генерируются пары, положительные и отрицательные. Если triplet loss, то три изображения — анкор, поизитв, негатив. Каждая такая пара или тройка это уже и есть разметка.

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за отсылку к классике. Действительно, BoW может помочь при низком объёме данных и его проще дообучать на новый тип объектов — требуется меньше данных опять же. В нашем случае данных было достаточно и deep learning поднял качество очень существенно

Есть мнение, что поиск Яндекса просто еще не успел закрыть некоторые киллер-фичи от публики по ряду причин. На Хабре кто-то прикладывал свои наблюдения, что Google мол раньше искал по лицам например — а потом вдруг раз и перестал.


Но это как говорится — неточно. Уверен, что если поискать будут даже статьи на эту тему.

Contrastive Loss
Triplet Loss
N-tupled Loss
Angular Additive Margin (ArcFace)

Интересно, что автор столько внимания уделил разным "модным" лоссам, но не уделил внимания слону в комнате. В прошлом году вышла такая прекрасная статья — https://arxiv.org/abs/2003.08505


Срыв покровов — модные методы особо не играют особой роли, роль играет сама сетка, аугментации и так называемый curriculum и то, как мы управляем "сложностью" тренировки.

Спасибо за статью, посмотрю. Если говорить про парные лоссы, то я не стал в этой статье упоминать метод XBM (https://arxiv.org/abs/1912.06798) с CVPR2020, ориентируясь на более поверхностный материал. Хотя метод действительно мощно поднимает качество. Думаю, глубокий анализ сходимости обучения лучше провести в отдельной статье

Прочитал статью. Красивый разнос. Мы тоже наблюдали незначительную разницу при переходе на более современный метод. Наконец-то кто-то оценил вклад методов через кросс-валидацию и универсальный подход к обучению. Причем этот кто-то — разработчик PML. Еще бы такой анализ провести по пулингам, а не только по лоссам

Я так понимаю что статья была написана примерно одновременно с либой во время его стажировки
Оно там у него сильно разрослось с тех пор
Но прикольно, что оно есть

Пример реализованного проекта
Примеры работы
Валидация
Метрики

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


Но возникает очевидный вопрос — какова цель статьи, где результаты работы и наработки автора и его команды? Реальные метрики на каких-то датасетах, публичные (не обязательно на 100% OSS с репликацией) релизы pre-trained сеток, публикации датасетов, какие-то веб / колаб демки? Что угодно?


Мы тоже много публикуем на Хабре, но мы ставим цель каждым постом реально сделать какой-то вклад, вот буквально пара примеров:


  • Тут мы делаем уникальную некоммерческую систему синтеза речи и делимся ей со всем комьюнити бесплатно — https://habr.com/ru/post/549480/
  • Тут мы публикуем модели распознавания речи, которые лучше премиум моделей Google — https://habr.com/ru/post/519564/

Да, я читаю некоторые ваши статьи и канал в Телеграме. Хорошая работа.


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

Выкладывать метрики был бы смысл, если мы делали замеры на публичных датасетах, как вы сказали. Но это надо корректно поставить эксперименты и вести полноценную исследовательскую работу с дальнейшей публикацией научной статьи. А чтобы просто узнать относительный прирост качества в каждом из методов, достаточно посмотреть сами статьи — в них есть все замеры на Oxford5k, CARS200, Stanford Online Products и пр.

Ну или как вариант запилить свои "in the wild" датасеты, если академические слишком всратые.

Идеология открытого чего-то еще подразумевает, что если кто-то просто выложил сетку "для логотипов" без датасета — от публики особо не убудет (кроме злых буратино), и может кто-то даже публично затестит.

В статье довольно неплохо описывается, как работает подобная система. Так что статья реально полезная и классная. Метрики, сетки и прочее часто закрыто NDА, так что такого и не ждем.
в компании EORA.AI

Интересно, раньше Хабр тупо банил за рекламные коммерческих компаний посты не в хабе "Я пиарюсь" или в платном корпоративном блоге.


Сейчас что-то изменилось в политике? Я тоже обратил внимание, что они стали меньше "душить" авторов, интересно почему. Я видел какую-то статью в блоге Хабра на эту тему, но у Хабра нет каких-то public values.


Корп блоги — ок, ализаровщина — ок, реклама гомеопатии или лженауки — тоже ок.

Я общался с модератором, указать компанию в статье можно, а вот ссылку на сайт уже нельзя. И в этом есть логика — всё-таки от анонима статья выглядит недостаточно убедительной. А тут, у меня была возможность указать, что у нас есть некий опыт разработки таких систем

Прикольно

Отличная статья!

А REMAP для пулинга не пробовали в бою?
Multi-scale эмбеддинг у нас стоит в бэклоге, но эту статью не видели. Классный подход, спасибо за ссылку!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации