Обучение SVM для определения положения точки относительно двух других точек в видео

Я хотел бы обучить SVM с помощью opencv С++, чтобы определить положение точки на изображении по отношению к двум другим точкам, с которыми связана нужная точка.

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

Я новичок в методах машинного обучения, и после некоторых чтений я думаю, что понял, что SVM вернет логический результат (true, если некоторые условия выполняются одновременно, false, если нет). В моем случае мне нужна позиция на изображении в качестве результата.

Я не уверен, как мне организовать тренировочный набор, я думал сделать что-то вроде этого:

Метка T1 T2 T3=1

где T1 T2 и T3 содержат все точки, принадлежащие трем траекториям, которые я считаю правильными;

Метка T1 T2 T4=-1

где T1 и T2 такие же, как и раньше, а T4 содержит случайные точки, не лежащие на траектории T3.

После того, как я обучил SVM с разными траекториями из разных видео, я хотел бы передать три точки: P1 (x, y) и P2 (x, y), соответствующие T1 и T2 в момент времени t и случайную точку P (x, y ), и SVM должен предсказать, находится ли случайная точка в желаемом положении или нет.

кто-нибудь может объяснить мне, если этот подход неверен и почему?

Спасибо


person user2693662    schedule 18.08.2013    source источник
comment
Я не понимаю, зачем использовать машинное обучение для определения положения точки на изображении по отношению к двум другим точкам, с которыми связана искомая точка. Не могли бы вы объяснить?   -  person GilLevi    schedule 18.08.2013
comment
Искомая точка следует траектории, которая похожа от видео к видео, поэтому я хотел бы использовать машинное обучение, чтобы определить положение на этой траектории на основе положения двух связанных точек, которые я знаю.   -  person user2693662    schedule 18.08.2013


Ответы (1)


Этот подход неверен в основном потому, что ваша проблема не является проблемой бинарной классификации. Это скорее проблема регрессии. Желаемый результат — это значение, а не двоичное число, поэтому обучение SVM или любого другого двоичного классификатора — плохая идея. Проблема классификации — это поиск отображения ваших входных данных в некоторый конечный (и небольшой) набор возможных меток (таких как «истина» и «ложь», или «кошка», «собака» или «лицо»). С другой стороны, регрессия - это поиск отображения ваших входных данных в (возможно, многомерное) пространство с действительными значениями, поэтому вместо меток вы ищете фактические значения. В вашем случае вы ищете координаты, которые (как я полагаю) представляют собой два действительных числа. Если вы моделируете свою проблему как бинарную классификацию, то:

  • Не существует разумного способа создания обучающей выборки (у вас есть только «положительные» примеры, вы можете сгенерировать «отрицательные», взяв точки, которые неверны, но большинство из них, было бы лучше обучать одноклассовую SVM, но, как упоминалось ранее, это вообще не проблема классификации)
  • Фактическое тестирование было бы ужасной сложностью, так как вы должны спрашивать по каждому пункту: «Это правильный ответ?»

Вместо этого следует обучать любую регрессионную модель данными в форме

(point_1, point_2) -> point_3

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

  • линейная регрессия
  • нейронная сеть
  • SVR (регрессия опорного вектора)

Короче:

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

Если вам все еще непонятно, предлагаю хорошее видео из Стэнфордского университета: http://www.youtube.com/watch?v=5RLRKkzYWuQ

person lejlot    schedule 23.08.2013
comment
Очень хорошее объяснение. У меня были сомнения по поводу обучения, есть ли способ обучить нейронную сеть определять появление точки??? - person Arjun; 08.01.2021