поиска похожих изображений в базе. Решение сделали на нейронках (keras), выдергиваем фичи из картинок при помощи сетки vvg16 (слой 4096). Работает приемлемо на небольших объемах, используем косинусное расстояние.
Проблема в том что база очень большая... около 1млн картинок и это не предел. Вектора на 100.000 весят примерно 5-7 гб. Соответственно на 1млн картинок векторов на 50-70гб. Поиск медленный и база в ОЗУ уже не помещается, а с диска очень долго. Причем база будет пополняться, меняться и хранить ее в виде одного файла hd5 не удобно.
Пока пошли таким путем. Загоняем все вектора в базу данных (MariaDB, innodb/barracuda compressed). Потом загружаются вектора партиями и хешируются решением (https://github.com/pixelogik/NearPy). В памяти остается как бы хеши к базе и айди картинок. Поиск быстрый, весит мало, но не точный (сравниваются уже не косинусы, а похожие находятся по чувствительному хэшу)
Причем вектора/фичи нужны будут потом еще не только искать похожие но и классифицировать объекты.
А как вообще надо делать правильно, есть идеи?
50-70кб на картинку? Мне кажется многовато
Попробуйте снизить размерность. Если большая база то достаточно легко. Например можно сделать PCA проекцию в 1024 или обучить один FC слой по триплетлосу если есть набор похожих и совсем не похожих картинок.
Обсуждают сегодня