Подтвердить что ты не робот

Сумка слов обучения и тестирования opencv, matlab

Я реализую Bag Of Words в opencv, используя функции SIFT, чтобы сделать классификацию для конкретного набора данных. До сих пор я был яблоком, чтобы группировать дескрипторы и генерировать словарь. Как я знаю, мне нужно обучать СВМ... но у меня есть некоторые вопросы, которые я действительно смущен ими. Основная проблема заключается в концепции реализации, это мои вопросы:

1 Когда я извлекаю функции, а затем создаю словарь, я должен извлечь функции для всех объектов (пусть говорят 5 объектов) и поместить их в один файл, поэтому я делаю все из них в одном словаре, который есть все слова? и как я буду отделять их позже, когда я сделаю классификацию?

2 Как реализовать SVM? Я знаю функции, которые используются в openCV, но как?

3- Я могу сделать работу в MATLAB, что я подразумеваю для внедрения обучения SVM, но есть ли какой-либо код, который может помочь мне в моей работе? Я видел код, используемый Андреа Ведалди, здесь, но он работает только с одним классом каждый раз, а другой вопрос, что он не показывает, как для создания файла .mat, который он использует в своих упражнениях. Все другие реализации, которые я мог найти, они не используют SVM. Итак, можете ли вы вести и в этом вопросе?

Спасибо

4b9b3361

Ответ 1

Локальные функции

Когда вы работаете с SIFT, вы обычно хотите извлекать локальные функции. Что это значит? У вас есть изображение, и с этого изображения вы найдете точки, из которых вы будете извлекать локальные векторы объектов. Локальный вектор признаков - это просто вектор, состоящий из числовых значений, которые описывают визуальную информацию области изображения, из которой она была извлечена. Хотя количество локальных векторов признаков, которые вы можете извлечь из изображения A, не обязательно должно быть таким же, как число векторов признаков, которые вы можете извлечь из изображения B, числовые компоненты локального вектора признаков (то есть его размерность) всегда то же самое.

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

Сумка визуальных слов

Здесь (очень) упрощенный алгоритм BoW:

  • Извлеките локальные векторные объекты SIFT из вашего набора изображений;

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

  • Примените алгоритм кластеризации (например, k-означает) по множеству локальных векторов признаков, чтобы найти координаты центра и назначить идентификатор каждому центроиду. Этот набор центроидов будет вашим лексиконом;

  • Глобальный вектор признаков будет гистограммой, которая подсчитывает, сколько раз каждый центроид возникал в каждом изображении. Чтобы вычислить гистограмму, найдите ближайший центроид для каждого локального вектор-функции.

Классификация изображений

Здесь я предполагаю, что ваша проблема заключается в следующем:

У вас есть входной набор помеченных изображений и набор немаркированных изображения, которые вы хотите присвоить метке на основе ее визуального появление. Предположим, ваша проблема заключается в классификации пейзажной фотографии. Вы можете использовать ярлыки изображений, например, "горы", "пляж" или "Лес".

Глобальный вектор признаков, извлеченный из каждого изображения (т.е. его мешок визуальных слов), можно рассматривать как набор числовых атрибутов. Этот набор числовых атрибутов, представляющих визуальные характеристики каждого изображения и соответствующие метки изображений, может использоваться для обучения классификатора. Например, вы можете использовать программное обеспечение для интеллектуального анализа данных, такое как Weka, в котором реализована реализация SVM, известного как SMO, для решения вашей проблемы,

В принципе, вам нужно отформатировать глобальные векторы объектов и соответствующие метки изображений в соответствии с файлом ARFF, который, в основном, CSV глобальных векторов признаков, за которыми следует метка изображения.

Ответ 2

Здесь очень хорошая статья, представляющая модель Bag of Words для классификации с использованием OpenCV v2.2. http://app-solut.com/blog/2011/07/the-bag-of-words-model-in-opencv-2-2/

Следующая статья об использовании стандартного классификатора байесов для классификации изображений. http://app-solut.com/blog/2011/07/using-the-normal-bayes-classifier-for-image-categorization-in-opencv/

Также имеется демо-версия с 200-строчным кодом в наборе данных Caltech-256. http://code.google.com/p/open-cv-bow-demo/downloads/detail?name=bowdemo.tar.gz&can=2&q=

Здесь что-то, чтобы получить интуитивное чувство процесса классификации изображений: http://www.robots.ox.ac.uk/~vgg/share/practical-image-classification.htm

Действительно помог мне прояснить много вопросов. Надеюсь, это поможет кому-то.:)