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

Точность и эффективность алгоритмов

Recommended Posts

У меня вопрос о правильном понимании оценок алгоритмов компьютерного зрения

Есть Precision(Это точность) считается как общее число положительных срабатываний алгоритма на выборке к общему числу элементов в выборке

я не очень понимаю чем от Precision отличается Accuracy

Average Precision (AP)(средняя точность) как я понимаю считается просто как среднее арифметическое всех Precision на выборке

Recall как я понял это отношение положительных срабатываний к сумме положительных срабатываний и неверно распознанных объектов.

И ещё такой вопрос не очень понятно почему две таблицы из конкурса PASCAL в 2007 и 2012 годах выглядят настолько различно вроде бы обе в Average Precision

PASCSL 2007

PASCAL 2012

меня интересуют первые таблицы с результатами на этих страницах или их как то по другому надо интерпретировать.

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


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

да там просто в одномслучае поделено на 100, а в другом нет.

т.е. например 0.748 = 74,8%

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


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

спасибо за ответ,

меня что смутило, так это низкие проценты в распознавании в 2007 да и для некоторых категорий в 2012 тоже очень низкие

INRIA_Genetic 0.775 т.е. 77.5% правильно распознанных это в 2007 на aeroplane

NUSPSL_CTX_GPM_SCM 97.3 уже значительно лучше в 2012 тоже на aeroplane

для cow 77.8 в 2012

сейчас думаю, что всё действительно так у самолётов приблизительно даже форма одна и наверно варьируется она не так сильно как к примеру у коровы или у бутылки у которой средняя точность распознавания 60.8

спасибо за ответ

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


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

у меня ещё вопрос по тестированию алгоритмов я скачал два архива VOCtrainval_06-Nov-2007.tar и VOCtest_06-Nov-2007.tar ну как я понял соответственно для обучения и тестирования зашёл в папку ImageSets\Main и для обучения для каждого из классов есть 3-и файла aeroplane_train.txt aeroplane_trainval.txt и aeroplane_val.txt я не совсем понимаю почему(зачем) их там 3-и)

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


Ссылка на сообщение
Поделиться на других сайтах
(i) methods which are trained using only the provided "trainval" (training + validation) data; (ii) methods built or trained using any data except the provided test data

может это?

скорее всего внутри aeroplane_val.txt= aeroplane_train.txt + aeroplane_trainval.txt

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


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

То что есть оставим тут, если есть желание продолжать, то лучше здесь:

http://www.compvisio...?showtopic=1099

Что касается Recall, то это можно объяснить так:

У вас есть всего 200 объектов класса 1 и 200 объектов класса -1.

Класс 1 - это и есть основной класс.

Обучаете классификатор Вы на первой сотне объектов каждого класса, а качество работы классификатора Вы проверяете на тестовой выборке в которой содержится по M=100 объектов, не встречавшихся в обучающей выборке.

Классификатор может ошибаться и ошибки могут быть такие:

Неправильно распознанный объект класса 1 (был принят за объект класса -1)

Неправильно распознанный объект класса -1 (был принят за объект класса 1)

Остальное, это корректно распознанные классы:

Правильно распознанные объекты основного класса это те объекты из тестовой выборки которые имеют класс 1 и были распознаны как класс 1. (количество обозначим как N)

Правильно распознанные объекты неосновного класса это те объекты из тестовой выборки которые имеют класс -1 и были распознаны как класс -1.

Так вот, вернемся к recall, тут получается что Recall=N/M.

то есть получается Recall - это отношение Правильно распознанных объектов основного класса к количеству объектов основного класса из тестовой выборки или просто к количеству объектов из тестовой выборки не важно к основному классу или нет..

ещё тогда не совсем ясно и precision

вот определение

Точность (Precision)

• Доля истинных объектов основного класса среди всех

классифицированных, как первый класс

это из Лекций

получается, что по этим формулировкам и precision, и recall одно и то же?...

ещё вопрос можно ведь просто оценить алгоритм так к примеру общее число положительных срабатываний алгоритма на тестовой выборке к общему числу элементов на тестовой выборке, я думал раньше, что так вычисляется точность.. подскажите тогда что это? а то мне кажется я путаюсь:)

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


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

Так разница видна ? :)

post-1-0-02800200-1360592241_thumb.png

Картинка отсюда: http://en.wikipedia.org/wiki/Precision_and_recall

То есть, если нам важно чтобы результат классификации содержал как можно меньше неправильно принятых за основной класс объектов, то отдаем предпочтение высокой Precision (платим тем, что классифицируем как неосновной класс достаточно много объектов основного класса, т.е. падает Recall).

Если-же нам нужно чтобы классификатор упустил как можно меньше объектов основного класса (платим большим количеством объектов неосновного класса классифицированных как основной класс, т.е. падает Precision), то предпочтение отдаем более высокой Recall.

  • Like 1

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


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

Вот расшифровка (если я ничего не перепутал):

tn-Неосновной класс, классифицированный как неосновной класс, то есть когда классификатор сработал правильно на отсутствие искомого объекта. (объекта нет, и он не обнаружен).

fn-Основной класс, классифицированный как неосновной класс, то есть когда классификатор сработал неправильно на присутствие искомого объекта. (объект есть, но не обнаружен).

fp-Неосновной класс, классифицированный как основной класс, то есть когда классификатор сработал неправильно на отсутствие искомого объекта. (объекта нет, но он обнаружен).

tp-Основной класс, классифицированный как основной класс, то есть когда классификатор сработал правильно на присутствие искомого объекта. (объект есть, и он обнаружен).

  • Like 1

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


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

да это то понятно, но

объекта нет, и он не обнаружен
может быть сколько угодно.

хотя tn вроде в формулах то и не используется.

кстати если речь идет о рамочных детекторах, то интересно как они считают попадание, ведь рамки могут перекрываться просто на какой то процент и всё.

и еще обычно на одном месте находит много ректов, как они их фильтруют в один(вроде там не тупо усреднение).

вообще если немного философски подойти к проблеме, то ведь объект не совсем хорошо описывать в виде рамки.

даже непонятно как точно объект надо обводить рамкой.

для меня например непонятно, что в рамку попадает часть бэкграунда.

есть такой документ к размышлению

What is an object ?

Bogdan Alexe, Thomas Deselaers, Vittorio Ferrari

Computer Vision Laboratory, ETH Zurich

fbogdan, deselaers, ferrarig@vision.ee.ethz.ch

ftp://ftp.vision.ee.ethz.ch/publications/proceedings/eth_biwi_00728.pdf

+еще для объекта важен контекст, но что то я не припомню работ на эту тему.

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


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

У меня ещё один вопрос я не совсем понимаю как можно строить графики зависимости Precision от Recall, как я понимаю они же постоянны для выборки

а тут Classification Results: VOC2007 data

вполне себе строят не понятно как это у них выходит...

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


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

Тут все нормально, предположим снижаем порог срабатывания детектора, получаем рост Recall и падение Precision.

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


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

ну а чтобы настроить наш детектор на нужные параметры Recall\Precision нам получается нужно решить оптимизационную задачу от параметров нашего детектора?

что если как в случае обучения каскада хаара начальный этап длиться долго, можем ли мы как то это изначально запрогнозировать требуемый Recall\Precision?

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


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

Я так понимаю, чтобы построить график, переобучать детектор не нужно.

Просто он выдает степень уверенности, а мы устанавливаем,

на модуле принятия решения нужный нам порог, при превышении которого класс считается основным, чем и задаем Recall\Precision.

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


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

порог это к примеру такое задание тут он равен T


float response = svm.predict(descr);

if(response>T)//базовый класс

else//не базовый

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


Ссылка на сообщение
Поделиться на других сайтах
Я так понимаю, чтобы построить график, переобучать детектор не нужно.

да я даже не совсем об этом.

допустим у нас есть HOG у которого есть N параметров + у нас есть SVM у которой вроде как есть тоже параметры (хотя там вроде как можно как то поставить чтобы они сами выбрались оптимальные? вроде бы kernel learning)

в том же OpenCV

CvSVM::train_auto Trains SVM with optimal parameters.

т.е. я так понимаю там происходит настройка под данные.

так вот можно ли сделать так, чтобы настраивались вообще все параметры и у HOG и у SVM?

т.е. это получается какая то оптимизационная задача чтоли.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×