Перейти к содержимому
Compvision.ru
Pechkin80

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

Recommended Posts

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Nuzhny сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут фишка немного в другом. Я уже говорил, что 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. В каждом конкретном случае можем получить как ускорение, так и замедление процесса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, Nuzhny сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×