Похожие чаты

Добрый день. Подскажите, пожалуйста, кто имел дело с нейронками для

изображений. Стоит задача находить похожие изображения по базе (Image Search Engine). Использую VGG16 на imagenet, заэкстрактил фичи для 500к изображений (файлы *.npy). все в RAM сервера не помещаются. При расчёте эвклидового расстояния между векторами также порой RAM не хватает, что бы в нём поместился результат вычисления. И без того использую пакетную обработку по 1000 фич гружу в оперативную память, но поиск занимает порой по 10 минут. Пытался предварительно фильтровать по перцептивному хешу изображения. Помогло со скоростью, но точность детекта знатно упала. База фоток в основном состоит из товаров одежды (кроссовки, футболки, шорты, куртки и т.д.).

В ML и DL средний новичёк, много чего пробовал, но боевая задача это первая. Возможно стоит провести кластеризацию датасета и сперва находить ближайший центроид, а уже потом среди изображений в этом кластере находить все расстояния?

15 ответов

31 просмотр
Юрий-Якименко Автор вопроса

Если на более мощном ПК делаю (16 GB RAM), то работает быстрее. Точность устраивает в случае, когда я нахожу все 500к эвклидовых расстояний и сортирую их от самого близкого к дальнему и беру первые 10 результатов, к примеру. Но я понимаю, что искать куртки среди кроссовок - как минимум глупо и неэффективно. подскажите, в каком направлении двигаться?

Юрий-Якименко Автор вопроса
Юрий Якименко
Если на более мощном ПК делаю (16 GB RAM), то рабо...

Уточню, что фичи у меня размера (4096, ), открываю их через np.load('file/path', mmap_mode='r'), эвклидово нахожу через np.linalg.norm(features - query, axis=1)

Юрий-Якименко Автор вопроса
Evgenii Zheltonozhskii🇮🇱
Faiss какой-нибудь

"clustering of dense vectors", скорее всего это оно, спасибо. Сейчас буду пробовать.

Evgenii Zheltonozhskii🇮🇱
Faiss какой-нибудь

Там случаем не тот же самый кластеринг с помощью VQ?

Юрий Якименко
Уточню, что фичи у меня размера (4096, ), открываю...

Из очевидного - можно рассчитывать все 500 к расстояний, но не хранить в памяти все, а просто всегда хранить top-10 ( ключ- значение, где ключ - расстояние). При получении очередного расстояния одной операцией сравнения узнаем, нужно ли что-то добавить. Ещё можно посмотреть в сторону k-means

Юрий-Якименко Автор вопроса
Viktor
Из очевидного - можно рассчитывать все 500 к расст...

благодарю, на Faiss почти написал уже, скоро попробую на реальных данных. добавлю и это для экономии памяти

Юрий Якименко
Уточню, что фичи у меня размера (4096, ), открываю...

можно сделать так: 1. возьми global avg pool за два слоя до 512х7х7 -> 512 выигрыш по памяти в 4 раза. 2. (если нужно точнее) выберешь так (на основе 512 мерных), например, 10000 кандидатов из 500К изображений потом для этих 10000 кандидатов возьмёшь 4096 мерные вектора вычитаешь в оперативку и отсортируешь по евклидову

Юрий-Якименко Автор вопроса
Эм Константинов
можно сделать так: 1. возьми global avg pool за дв...

спасибо, понял, о чем речь, вектора будут занимать меньше RAM, меньше точность, зато вся выборка. попробую так, если с faiss не получится оптимизировать

Юрий-Якименко Автор вопроса
Лис Электронщик
Там случаем не тот же самый кластеринг с помощью V...

как я понял, в аббревиатуре IVFPQ - VQ, как раз то, о чем вы говорили

Юрий-Якименко Автор вопроса
Эм Константинов
можно сделать так: 1. возьми global avg pool за дв...

возможно глупый вопрос. но не имея уже на руках исходников изображений (придётся перекачивать, если необходимо), то из вектора с 4096 признаками никак нельзя сделать сжатый вектор 512-мерный ? может через PCA понизить размерность? или это так не работает?

Юрий Якименко
возможно глупый вопрос. но не имея уже на руках ис...

Как я понял, у Вас уже есть 4096 мерные вектора для каждого изображения. Я так понимаю, что вы их подучили путём прогона изображений через сеть. Для этого множества из 500К Вы можете еще раз прогнать (батчами, чтобы было быстрее) все картинки и на этот раз вытащить не только 4096 мерные вектора, но и выход (пердпердпредпоследнего) слоя размерностью 512х7х7 и применить global avg pooling (на всякий случай, это среднее по всем пространственным размерностям тензора) и получите 512х1х1 другими словами 512-мерные вектора. Они будут вполне себе хорошими для векторной репрезентации признаков и объектов, присущих фото для задачи сравнения. Да, можно и pca, но чтобы его честно сделать, вам надо будет работать с 500000х4096 матрицей. конечно тут тоже можно подразбить.. Но первый вариант кажется более естественным, особенно если потом сделать второй стейдж и на кандидатах выбрать лучших уже на 4096-мерных векторах. Будет у Вас в оперативке 500000х512, что должно влезть и ускорит поиск и 500000х4096 на диске. А потом вы быстро найдёте кандидатов по индексу и загрузите в оперативку. Если кандидатов будет около 5000 - 10000, то это будет очень очень быстро.

Юрий-Якименко Автор вопроса
Эм Константинов
Как я понял, у Вас уже есть 4096 мерные вектора дл...

Согласен, пробовал ранее через перцептивный хеш и расстояние Хэмминга, сужал до 12к изображений и работало быстро. смущало только качество поиска. очень приблизительное. и если товар был кропнутый на изображении либо с другого ракурса, то не находило. поэтому стал искать альтернативы

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Карта сайта