2016-03-27 3 views
7

Мне нужно реализовать простой поиск изображений в моем приложении с помощью TensorFlow. Требования таковы:Создание простого поиска изображений с использованием TensorFlow

  1. Набор данных содержит около одного миллиона изображений, все из того же размера, каждый из которых содержит один уникальный объект и только, что объект.
  2. Параметр поиска - это изображение, сделанное камерой телефона какого-либо объекта, потенциально находящегося в наборе данных.

Мне удалось извлечь изображение с изображения камеры и выпрямить его в прямоугольную форму, и в результате индексный искатель обратного поиска, такой как TinEye, смог найти совпадение.

Теперь я хочу воспроизвести этот индексатор, используя TensorFlow, чтобы создать модель на основе моего набора данных (сделайте имя файла каждого изображения уникальным индексом).

Может ли кто-нибудь указать мне на учебники/код, которые объясняли бы, как достичь такой цели, не уделяя слишком много внимания терминологии компьютерного зрения?

Большое спасибо!

+0

Зачем использовать TensorFlow? Хотя глубокое обучение является отличным инструментом для многих проблем с компьютерным видением, это, вероятно, не подходит для поиска изображений. –

+0

Я открыт для предложений :) – reflog

+0

Стандартный подход: извлечение локальных функций (SIFT или SIFT как) -> вычисление визуальных слов -> поиск изображений с похожими визуальными словами (аналогично поиску документов). необязательно проверить соответствие с использованием гомографии (или другой геометрической модели). Вы можете смотреть онлайн для поиска изображений в словах слов –

ответ

8

Wikipedia article on TinEye говорит, что Perceptual Hashing даст результаты похожие на TinEye's. Они ссылаются на this detailed description of the algorithm. Но TinEye refuses to comment.


Самая большая проблема с подходом Перцептивная Hashing является то, что в то время как он эффективен для идентификации и того же изображения (в зависимости от перекосов, контрастные изменения и т.д.), это не большой на выявление совершенно иной образ тот же объект (например, перед автомобилем против стороны автомобиля).

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

Начните с предварительно обученного NN (например, GoogLeNet) или подготовьте его самостоятельно на таком наборе данных, как ImageNet. Теперь нам дана новая картина, которую мы пытаемся идентифицировать. Подайте это в NN. Посмотрите на активацию довольно глубокого слоя в NN. Этот вектор активаций подобен «отпечатку пальца» для изображения. Найдите изображение в своей базе данных с ближайшим отпечатком пальца. Если это достаточно близко, это, вероятно, один и тот же объект.

Интуиция, стоящая за этим подходом, заключается в том, что в отличие от Perceptual Hashing NN создает высокоуровневое представление изображения, включая идентификацию краев, фигур и важных цветов. Например, отпечаток пальца яблока может включать информацию о его круглой форме, красном цвете и даже его маленьком стебле.


Вы также можете попробовать что-то вроде this 2012 paper on image retrieval который использует убивание подобранных функций, таких как SIFT, региональные цветовые моменты и фрагменты контура объекта. Это, вероятно, гораздо больше работы, и это не то, что TensorFlow лучше всего.


UPDATE

OP предоставил пример пары изображений от его применения:

Image in the database Image from the user. Should match something in the database.

Ниже приведены результаты использования the demo on the pHash.org website на этой паре похожих изображений а также на пару совершенно разных изображений.

Сравнивая два изображения, предоставляемые OP:

Редька (радиальная хэш): pHash determined your images are not similar with PCC = 0.518013

DCT хэш: pHash determined your images are not similar with hamming distance = 32.000000.

Марр/мексиканская шляпа вейвлетов: pHash determined your images are not similar with normalized hamming distance = 0.480903.

Сравнение одного из его изображений со случайным изображением с моей машины:

РЕДИС (радиальная хэш): pHash determined your images are not similar with PCC = 0.690619.

DCT хэш: pHash determined your images are not similar with hamming distance = 27.000000.

Марр/мексиканская шляпа вейвлета: pHash determined your images are not similar with normalized hamming distance = 0.519097.

Заключение

Мы должны проверить больше изображений на действительно знаю. Но пока pHash, кажется, не очень хорошо. С порогами по умолчанию он не считает похожие изображения одинаковыми. И для одного алгоритма он фактически считает, что совершенно случайное изображение более похоже.

+1

Мне интересно, что такое Perceptual Hash, потому что я попробовал проект с открытым исходным кодом pHash, и он дал ужасные результаты ... – reflog

+0

Можете ли вы поделиться ссылкой, кодом или более подробной информацией на том, что вы создали и какие результаты вы получили? – rafaelcosman

+1

Здесь: http://imgur.com/a/be89U первое изображение - это одно в базе данных, второе - это то, что я ищу – reflog

0

https://github.com/wuzhenyusjtu/VisualSearchServer Это простая реализация подобного поиска изображений с использованием моделей TensorFlow и InceptionV3. В коде реализованы два метода: сервер, который обрабатывает поиск изображений, и простой индекс, который выполняет сопоставление Nearest Neighbor на основе извлеченных функций pool3. enter image description here