Jump to content
Compvision.ru
Pechkin80

Попытка заглянуть под капот SVM через уменьшение размерности

Recommended Posts

Почему удивительно? SVM чувствителен к шуму, тот же PCA или PLS отлично помогают с этим бороться.

Share this post


Link to post
Share on other sites
1 час назад, Nuzhny сказал:

Почему удивительно? SVM чувствителен к шуму, тот же PCA или LDA отлично помогают с этим бороться.

Потомучто теряется часть информации. Вот взять к примеру дескриптор HOG с картинки 32х32. Размерность вектора будет огого, а чтобы увидеть его хотябы в 3D надо сильно сильно сплющить. И ещё вопрос получиться ли глазами классифицировать такую лепёшку.

Share this post


Link to post
Share on other sites

Тут фишка немного в другом. Я уже говорил, что SVM чувствителен к шуму, особенно линейный. Несколько выбросов могут очень сильно сдвинуть разделяющую гиперплоскость в сторону. Как это можно решить?

1. Можно использовать нелинейный SVM (с RBF ядром, например). Он попытается адаптироваться не только к линейно неразделимым данным, но ещё и к выбросам тоже. Минус нелинейного SVM - он очень медленный.

2. Или же устранить выбросы.

Например как? Например, перейти в другое пространство, где этих выбросов практически не будет. Самый простой способ - это PCA (метод главных компонент). Обычно берут многомерный вектор, делают PCA, а после берут оттуда только те компоненты, сумма значений которых составляет 95% от всех данных. То есть откидывают 5% самых малозначащих данных, которые чаще всего являются шумами. Часто получается, что эти 95% важных данных содержат в себе 10-20% компонент. Эта штука фактически представляет собой способность к обобщению и отлично работает с линейно разделимыми данными и устраняет исключительно шумы.

Что представляет собой PCA в плане изображений - это силуэт, основные черты. То есть своё изображение по нему ты восстановить не сможешь, но будет точно понятно, что это изображение, например, является силуэтом человека. Ты мог видеть такие статьи ге есть усреднённое лицо человека европейской расы или среднее лицо женщины - это всё PCA.

Есть и нелинейные преобразования, позводялющие уменьшить размерность данных и при этом улучшить работу классификатора, например PLS (partial least squares). Вот отличная статья по этому поводу: "Vehicle Detection using Partial Least Squares"

Они добавляют к HOG кучу других фич типа симметрии, делают огрочный features vector, а потом его сильно сокращают с помощью PLS и подают его на линейный SVM. Посмотри на рисунок 5 в статье, как данные стали намного лучше линейно разделяться.

 

Что получаем по производительности.

1. На этапе обучения нам надо:

1.1. "Обучить" - построить преобразование в новое пространство с помощью PCA или PLS: из картинок извлечь feature vector'а размера N, слепить их в один большой и вычислить параметры нового многомерного пространства размера N. Выделить значимое подпространство размера M < N. Сохранить.

1.2. Обучить уже классификатор (SVM) на новых feature vector'ах размера M: вычисляем по картинке HOG, применяем к нему PCA, берём M первых значений результирующего вектора. Обучаем на этих данных SVM и сохраняем.

2. Этап распознавания:

2.1.  Загружаем PCA и SVM.

2.2. Берём изображение, считаем HOG, применяем PCA, берём M первых значений результирующего вектора, подаём в SVM.

Профит!

У нас получается, что SVM обучается быстрее и работает тоже, но добавляется умножение на матрицу NxN. В каждом конкретном случае можем получить как ускорение, так и замедление процесса.

Share this post


Link to post
Share on other sites

Насколько я понимаю у нас шум ограничен снизу некоторой величиной может быть вследствии допустимой погрешности статистически значимой выборки. Может просто данных побольше ? Я сам давно окончил ВУЗ. Извините если где туплю. Надо повторить всё это.

А PCA не самый хорошийалоритм для того исселедования что приведено в статье. SLPP и LPP показают лучшие результаты чем оригинал при детекции глаз и не только. А Умножение матриц должно хорошо распараллеливаться.

 

P.S А RBF ядро уже стало как я понимаю стандартом для SVM. Линейная зависимость только в академических целях используется.

Share this post


Link to post
Share on other sites

О, тут всё зависит от задачи, для каждой свои рецепты. Шум может быть самый разный: если человек стоит на фоне лестницы, то HOG его не задетектит, потому что градиенты на границе будут ужасными. Такой сэмпл в обучающей выборке тоже будет типа выбросом, который сместит разделяющую гиперплоскость в совсем не ту сторону.

Линейный SVM используется потому что быстрый. Тут есть два подхода: либо тщательно подобрать features vector (или сделать для него преобразование типа PCA, PLS....) и использовать линейный SVM или использовать SVM с RBF. Для той же детекции пешеходов используют HOG с линейным SVM, потому что скорость критична.

Share this post


Link to post
Share on other sites
13 минуты назад, Nuzhny сказал:

О, тут всё зависит от задачи, для каждой свои рецепты. Шум может быть самый разный: если человек стоит на фоне лестницы, то HOG его не задетектит, потому что градиенты на границе будут ужасными.

Я просто сомневаюсь в том что нет другого способа оценить шум кроме как опытным путём т.е. после обучения. Мыже можем по выборки случайной последовательности определить статистическую значимость? Можем. Способ наверняка есть а значит не совсем "везде свои рецепты"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×