Pull to refresh

Comments 23

Спасибо за статью, если правильно помню, все подобные хэши работают нормально до первого кропа (особенно если отрезать чуть сверху). Промежуточным решением тут могут быть ключевые точки, от старых SURF/SIFT до современных нейросетевых, но нишу уже заполняют API варианты "дай мне картинку, дам тебе fingerprint", которые уже end2end сетевые. Так как кроме "дубликатов" многие хотят уже и рекомендации "похожего".
На том же Пикабу их поиск дубликатов, кажется, работает на уровне попиксельного сравнения, почему они до сих пор не решат эту проблему - для меня загадка, хотя у них наверно совсем другие приоритеты. А вот в качестве положительного примера могу привести Pinterest, они на этом очень заморочены (включая научные исследования) и имхо часто выглядят сильно лучше Гугла или Яндекса. Но для просто топорного поиска pHash до сих есть и еще долгу будет работать

Можно подробнее об исследованиях Pinterest ?

я когда пару лет назад смотрел по теме, часто натыкался на научные работы их, вот для точки отсчета, например, https://arxiv.org/pdf/1908.01707.pdf, мб что-то уже и свежее есть

Это многое объясняет, учитывая специфику их сайта (мемасы с одной картинкой но разным текстом не баяны, а кропы артов - баяны) pHash там не подходит от слова совсем.

старожилы, на зубок помнящие мемасики, появившиеся во времена превед‑медведа и олбанского йазыгга.


Это не старожилы :)
(Старожилы помнят, какое отношение Винни Пух имеет к ИТ :)

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

Требования на память и на производительность у нейросеток будут куда серьезнее, чем у методик конца нулевых.

Зависит от того как сделаете. Но это однозначно рабочий вариант, который будет значительно выигрывать в простоте и качестве. В поисковиках поиск по картинке уже давно на схожих принципах работает.

Я был бы признателен вам за ссылки с описанием начального уровня.

Зависит от начального уровня ) если совсем начальный стоит что-то почитать по кейвердам: "convolutional neural network/deep learning", "deep learning embedding" (по сути это те самые "хэши", только более универсальные и устойчивые к различным "трансформациям").

Дальше, вот здесь к примеру с кодом и доступно описан процесс(deep learning image deduplication/similarity search):

https://www.oreilly.com/library/view/practical-deep-learning/9781492034858/ch04.html

https://github.com/idealo/imagededup

Речь, как мне кажется, была про то, что даже самая простая нейронка в разы (десятки, сотни раз) медленнее "метода конца нулевых" и требует больше ресурсов, image processing нейросетями всегда дорогой, увы. Тут скорее выбор между "быстро и тупо" или "качественно". Для личного бложика на VPS нейросети не затащишь, для каждой задачи свой инструмент, и простые хэши все еще актуальны (и долго будут)

Что такое простые хэши? Когда два фала побайтово одинаковы? Если речь про "визуальные хэши" из статьи, то я не уверен, что они сильно быстрее какой-то простой дистилированной нейронки типа Mobilenet.

Вы заблуждаетесь, самый простой вариант "визуального хэша" это 1) уменьшить картинку максимально грубо, сложные алгоритмы рейсайза не нужны 2) сделать простейшее преобразование (вроде вычесть среднее). Все.
Что такое mobilenet - это кроме исходного того же уменьшить картинку (а тут уже алгоритмы уменьшения важны) десятки дорогих сверток, разница в скорости между простейшим хэшом и Mobilenet десятки, если не сотни раз.

Таким образом можно найти только практически одинаковые картинки, так как приведенные вами "хэши", не инвариантны даже к небольшим сдвигам.

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

А размер хэшей у нейросеток получается такой же? В некоторых статьях хранят чуть ли не 128 чисел с плавающей запятой на картинку.

Хэш нейросети, это хэш по смыслу, а по сути это полносвязный слой, его размер может быть любым, популярные значения это 128, 512 и 2048, но это просто для красоты, обычно чем больше, тем точнее, чем меньше, тем быстрее выполнять поиск и идёт торг

float чисел, но если использовать квантизацию в int8 будет и 128 байт :)

@gatoazul огромное спасибо за статью! Я думал в схожем ключе, но до хешей сам не допер (был близок разве). Банально казалось что все осуществляется нейросетями и я просто праздно размышляю о тупиковых концепциях.

Sign up to leave a comment.

Articles