Вопрос или проблема
Я ищу алгоритмы извлечения признаков в литературе (либо в обычной компьютерной зрении, либо в нейронных сетях) или готовые движки индексации, подходящие для поиска оригинальных изображений в базе данных при условии, что воспроизведение может быть испорчено/искажено/шумно.
Некоторые сведения о случае использования:
- предполагаемый рабочий процесс: пользователь фотографирует своим телефоном или камерой ПК — скажем, напечатанный экземпляр оригинального изображения; появляется список подходящих кандидатов из базы данных;
- пользователю не нужно подбирать кадр фотографии очень специфическим образом; извлечение должно быть устойчивым к наиболее распространенным искажениям, которые могут возникнуть в этом случае (например, нерелевантные края, небольшие перспективные искажения и вращения, фоновый шум…);
- изображения являются произведениями искусства, поэтому пользователи будут искать точные соответствия по общей визуальной схожести, а не только по схожему содержимому;
- базы данных представляют собой относительно небольшие личные коллекции, и вычисления должны быть выполнимыми на ноутбуках/настольных компьютерах, хотя и не обязательно быстрыми.
Что я рассматривал до сих пор:
- глобальная статистика (например, цветовые моменты, текстура, гистограммы границ, преобразования Фурье, палитры, …): я намерен протестировать их, но меня беспокоит, что они могут быть несколько слишком общими, что приведет к снижению производительности по извлечению;
- устойчивые локальные признаки (например, SIFT): они кажутся несколько избыточными; также я не уверен, подходят ли они для этой задачи, учитывая, что они предназначены для описания структуры содержимого изображения, а не визуального сходства;
- семантические многомодальные векторные вложения (например, CLIP, BLIP и т.д.): помимо трудностей, связанных с развертыванием на небольших машинах, они вычисляют семантическое сходство для гипотетического лингвистического описания содержимого изображения, так что это не совсем то, что я ищу; также, учитывая их общее обучение, я ожидаю более низкого качества извлечения на коллекциях очень специфических изображений; все равно протестирую.
Я ни в коем случае не эксперт, так что если что-то из вышеизложенного неверно, буду рад получить исправления.
Ответ или решение
Для решения задачи извлечения изображений из базы данных на основе потенциально искаженных или зашумленных репродукций, необходимо рассмотреть несколько подходов из области компьютерного зрения (CV) и нейронных сетей.
Предложенные подходы
-
Глобальная статистика изображений:
- Использование таких характеристик, как цветовые моменты, текстурные признаки, гистограммы краев и преобразования Фурье, может быть полезным началом. Однако, как вы отметили, они могут быть слишком общими и не достаточно чувствительными к визуальному сходству. Рекомендуется использовать их в комбинации с более специализированными методами.
-
Робастные локальные признаки:
- Применение алгоритмов, таких как SIFT (Scale-Invariant Feature Transform) или SURF (Speeded-Up Robust Features), может обеспечить защиту от искажений, таких как повороты и изменения масштаба. Эти алгоритмы действительно направлены на изучение структуры контента, однако могут быть адаптированы для оценки визуального сходства, если правильно настроить параметры слоя извлечения признаков.
-
Нейронные сети для извлечения признаков:
- Рассмотрите возможность использования предварительно обученных свёрточных нейронных сетей (CNN), таких как ResNet или VGG. Эти сети можно адаптировать для извлечения высокоуровневых признаков, что будет более предпочтительно для вашей задачи. Можно извлекать векторные представления изображений, а затем использовать методы сравнения (например, косинусное сходство) для определения похожести.
-
Методы на основе векторных представлений:
- Используйте модели, такие как CLIP (Contrastive Language–Image Pre-training), которые эффективно связывают текстовые и визуальные данные. Несмотря на ваше беспокойство относительно сложности развертывания, существуют легковесные версии и варианты, которые можно использовать для вашего случая. Обычно такие модели показывают высокую эффективность, прежде всего в задачах, связанных с визуальным сходством.
-
Постобработка и улучшение изображений:
- Примените предварительную обработку к входному изображению. Используйте алгоритмы коррекции перспективы и фильтры для снижения шумов (например, медианный фильтр). Это может улучшить качество извлечения признаков.
-
Индексация и поиск:
- Для построения базы данных извлеченных признаков стоит использовать эффективные алгоритмы индексации, такие как FAISS (Facebook AI Similarity Search), которые обеспечивают высокую скорость поиска и эффективные алгоритмы нахождения ближайших соседей.
Заключение
Рекомендуется частично комбинировать вышеупомянутые методы для достижения лучших результатов. Начинайте с построения прототипа, используя локальные признаки и нейронные сети для извлечения признаков, и проведите серию тестов на ваших изображениях. Проведение этих экспериментов поможет вам понять, какой метод обеспечивает наилучшее качество для вашей конкретной коллекции произведений искусства.
Успехов вам в разработке вашего решения!