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

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

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

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

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

Спасибо


person Mario    schedule 22.07.2012    source источник
comment
Библиотека VLFeat, которая помимо прочего реализует SIFT для Matlab, имеет превосходный BOW. демо с кодом.   -  person Maurits    schedule 23.07.2012
comment
где это демо? на указанном вами сайте есть только просеять   -  person Mario    schedule 23.07.2012
comment
Я только что увидел вопрос и столкнулся с той же проблемой, что и вы. нашел эту ссылку весьма полезной: masterravi.wordpress.com/2011/03/17/. У него также есть zip-файл Matlab, но он создан для 32-битного процессора.   -  person roni    schedule 06.06.2015


Ответы (2)


Местные особенности

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

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

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

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

  1. Извлеките векторы локальных признаков SIFT из вашего набора изображений;

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

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

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

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

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

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

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

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

person Alceu Costa    schedule 24.07.2012
comment
Ответ еще неполный. Завтра постараюсь завершить. - person Alceu Costa; 24.07.2012
comment
Я жду, когда ты закончишь это - person Mario; 24.07.2012
comment
До сих пор я сделал 3 из 4 шагов, и я знаю, что должен создать гистограмму. Но мне действительно нужно больше узнать об обучении и части тестирования для классификации, это действительно удивительно, что вы написали так далеко.. - person Mario; 24.07.2012
comment
Я не знал, что вы редактируете это очень долго, потому что я не получил уведомления, это такой блестящий ответ, который заявляет мне, что у меня в голове было так много вопросов ... В любом случае, у меня есть несколько вопросов, чтобы задать, они могут быть полезным для меня и других людей.. - person Mario; 12.08.2012
comment
вопросы, я сделал то, что вы сказали о гистограмме, у меня есть файл, содержащий слова кодовой книги, который представляет собой вектор 100 * 128 из функций SIFT для 10 изображений, я сделал это 100 словами, потому что я хочу делать простые затем обновите его позже с моей работой, поэтому мой вопрос: эти слова, скажем, для объектной машины, могу ли я обучить их и принять их как положительные образцы? так как очень простое обучение, всего 2 класса, а второй класс, скажем, мотоцикл.. так что мне нужно сделать еще один файл гистограммы и тренироваться против первого? - person Mario; 12.08.2012
comment
второй вопрос, почему я должен сделать формат файла ARFF, я могу просто пометить его в матлабе, первый файл гистограммы - класс 1, а второй - класс 2, это возможно?? - person Mario; 12.08.2012

Вот очень хорошая статья, представляющая модель 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

Реально помог прояснить многие вопросы. Я надеюсь, что это поможет кому-то. :)

person sagunms    schedule 27.09.2012