Обучение на SVM за определяне на позицията на точка по отношение на две други точки във видеоклип

Бих искал да обуча SVM с opencv c++, така че да изведа позицията на точка в изображението по отношение на две други точки, към които е свързана желаната точка.

По принцип имам траекториите на трите точки по време на цяло видео и бих искал да използвам тези траектории като данни за обучение на SVM.

Аз съм нов в техниките за машинно обучение и след известно четене мисля, че разбрах, че SVM ще върне булев резултат (вярно, ако някои условия са изпълнени едновременно, невярно, ако не). В моя случай имам нужда от позиция в изображението като резултат.

Не съм сигурен как да организирам набора за обучение, мислех да направя нещо подобно:

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