ProgRoman
-
Количество публикаций
190 -
Зарегистрирован
-
Посещение
-
Days Won
7
Сообщения, опубликованные пользователем ProgRoman
-
-
Спасибо большое т.е. как я понял второй параметр по сути является параметром фильтра Калмана показывающий, что более вероятно правильное предсказание по фильтру или же полученные экспериментально данные с детектора..
а зачем нужен первый параметр для увеличения скорости работы? у нас же получается, что мы должны вызывать фильтр не на каждом фрейме, а только тогда когда время срабатывания подошло..
а не будет ли лучше если вместо фильтра Калмана использовать фильтр частиц, я сам пока не разбирался хотелось бы узнать какой будет лучше
-
Добрый день, разбираюсь с проектом MultitargetTracker от Smorodov
Повозился с мультитрекингом, по мотивам лекций student Dave (см. выше).
Хотел трекать тараканов, как у него, но пока ограничился готовыми точками, которые крутятся вокруг курсора, часто пересекаясь, но траектории не перепутываются ( фильтр настроен на довольно медленные перемещения курсора ). Код еще сыроват, но поиграть можно. В аттаче проект под 2010 студию настроенный под x64.
появились вопросы
CTracker(float _dt, float _Accel_noise_mag,...
первый параметр это шаг времени опроса фильтра, по умолчанию равно 0,2. В чём оно задано в милисекундах?
второй параметр не могли бы пояснить, что он означает..
венгерский алгоритм тут используется как "сопоставлялка", ну к примеру есть 20 детектов, т.е. как я понимаю 20 объектов, которые выделил детектор и далее мы этот массив передаём в трекер tracker.Update(centers); и каждому треку уже как бы "выделенному" назначается наиболее похожий детект(это решается с помощью венгерского алгоритма) далее если есть не использованные детекты то создаём для них новые треки так.. а если есть не используемые треки, то удаляем их если если трек долго не используется(ну как в алгоритме)
-
Добрый день, возник вопрос как измерить(понять) насколько эффективен(информативен) дескриптор для объекта.
Т.е у нас есть изображение и вычислено несколько дескрипторов для данного изображения... то есть есть набор дескрипторов D=[d1,d2,..,dn], где n- общее число дескрипторов вот и как найти дескриптор который наилучшим образом описывает объект
-
спасибо, как я понял что бы отдельно распознавать по классам надо строить отдельные базисы лдя каждого класса вот и проецировать в каждый из базисов входное изображение и наверно смотреть к каком базисе к данному классу ближе изображение.. на днях напишу код скину сюда
большими это какими и сколько времени на всё про всё уходит?по времени не знаю сегодня завтра замерю а по размеру около 10000 вот
ещё интересует вопрос есть ли какие-нибудь методы которые понизят размерность и гарантированно улучшат(ну или точно не ухудшат) распознавательные способности алгоритма ну типа сжатия без потерь информации что-то в таком духе... или может есть какие-нибудь методы по извлечению особо информативных областей из дескрипторов..
-
Сейчас реализую PCA для распознавания(применяю его для сокращения размерности) так как дескрипторы могут получаться довольно большими поискал в интернете примеры есть вот вставлю один из примеров использования класса PCA
я брал за основу этот постPCA-opencv как оказалось ссылка http://www.bytefish.de/blog/pca_in_opencv довольно хорошо описывает
но тем не менее возникли вопросы по коду вставлю его ниже
Mat normalize(const Mat& src) { Mat srcnorm; normalize(src, srcnorm, 0, 255, NORM_MINMAX, CV_8UC1); return srcnorm; } int main(int argc, char* argv[]) { string pathD = "E:\\Projects\\ComputerVision\\Data_bases\\att_faces\\"; vector<Mat> db; // load greyscale images (these are from http:// www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html) db.push_back(imread(pathD+"s1\\1.pgm",0)); db.push_back(imread(pathD+"s1\\2.pgm",0)); db.push_back(imread(pathD+"s1\\3.pgm",0)); db.push_back(imread(pathD+"s2\\1.pgm",0)); db.push_back(imread(pathD+"s2\\2.pgm",0)); db.push_back(imread(pathD+"s2\\3.pgm",0)); db.push_back(imread(pathD+"s3\\1.pgm",0)); db.push_back(imread(pathD+"s3\\2.pgm",0)); db.push_back(imread(pathD+"s3\\3.pgm",0)); db.push_back(imread(pathD+"s4\\1.pgm",0)); db.push_back(imread(pathD+"s4\\2.pgm",0)); db.push_back(imread(pathD+"s4\\3.pgm",0)); Mat i1 = imread(pathD+"s4\\5.pgm",0).reshape(1,1).row(0); Mat imt; i1.convertTo(imt, CV_32FC1, 1/255.); int total = db[0].rows * db[0].cols; // build matrix (column) Mat mat(db.size(), total, CV_32FC1); for(int i = 0; i < db.size(); i++) { Mat X = mat.row(i); db[i].reshape(1, 1).row(0).convertTo(X, CV_32FC1, 1/255.); } // Change to the number of principal components you want: int numPrincipalComponents = 12; // Do the PCA: PCA pca(mat, Mat(), CV_PCA_DATA_AS_ROW, numPrincipalComponents); Mat im_pr = pca.project(imt);// это как я понимаю я просто проецирую входное изображение на базис построенный по всей базе // Create the Windows: namedWindow("avg", 1); namedWindow("pc1", 1); namedWindow("pc2", 1); namedWindow("pc3", 1); // Mean face: imshow("avg", pca.mean.reshape(1, db[0].rows)); // First three eigenfaces: imshow("pc1", normalize(pca.eigenvectors.row(0)).reshape(1, db[0].rows)); imshow("pc2", normalize(pca.eigenvectors.row(1)).reshape(1, db[0].rows)); imshow("pc3", normalize(pca.eigenvectors.row(2)).reshape(1, db[0].rows)); // Show the windows: waitKey(0); return 0; }
вопросы такие как я понимаю проецирование тут ведётся на всю базу т.е. можно потом будет сравнивать как далеко данный вектор находится от вектора лица(обобщёного лица), а что бы распознавать отдельно по классам каждое изображение как я понимаю нужно отдельно для каждого класса строить матрицу mat которая будет использована для построения проекции входного изображения..
-
а как обвести рамкой объекты?..
ну это с помощью HOG или Viola-Jones или ещё какими-то алгоритмами..
в ручную просто не очень хотелось бы)
-
ну да честно говоря я тоже так думал) просто подумал может можно как-то перенести хорошие дескрипторы на локальные области для ключевых точек
-
то есть чем больше область тем лучше распознавание?
latent svm там же вроде бы мы окошком пробегаем и применяем несколько фильтров грубый обобщённый для объекта и несколько уточняющих
-
ну да всё так и есть, я просто подумал, что если взять окрестность точки такую что бы она была информативна ну не слишком маленькую и большую вот, и попробовать к ней применить эти дескрипторы может быть получится тоже не плохое распознавание.. то есть грубо говоря тот же hog и lbp только не ко всему изображению, а к точкам вот...
-
да я хотел попробовать взять ключевые точки и подсчитать в окрестности или HOG, или LBP и посмотреть, что получится, но что бы это сделать надо знать размер локальной области по которой и будет вычисляться дескриптор HOG и LBP вот
-
Не совсем понятно как определять оптимальный размер локальной области вокруг ключевой точки
То есть у нас есть набор ключевых точек полученных с помощью FAST как дальше определить размер области по которой можно было бы построить дескриптор
-
порог это к примеру такое задание тут он равен T
float response = svm.predict(descr); if(response>T)//базовый класс else//не базовый
-
У меня ещё один вопрос я не совсем понимаю как можно строить графики зависимости Precision от Recall, как я понимаю они же постоянны для выборки
а тут Classification Results: VOC2007 data
вполне себе строят не понятно как это у них выходит...
-
То что есть оставим тут, если есть желание продолжать, то лучше здесь:
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 одно и то же?...
ещё вопрос можно ведь просто оценить алгоритм так к примеру общее число положительных срабатываний алгоритма на тестовой выборке к общему числу элементов на тестовой выборке, я думал раньше, что так вычисляется точность.. подскажите тогда что это? а то мне кажется я путаюсь
-
-
-
Спасибо материалы очень хорошие, как я понял в случае с C-HOG ячейка берётся квадратной 4*4 и считается, что это окружность, а дальше она разбивается на сектора вроде бы так..
у меня тут ещё вопрос возник при просмотре лекции(второй вашей ссылки)
Полнота (Recall)• Доля правильно распознанных объектов основного
класса среди всех объектов основного класса из
тестовой выборки
я не совсем понимаю как это посчитать для задачи классификации, а не детектирования, сказано что Доля правильно распознанных объектов основного класса среди всех объектов основного класса для классификации не важно же сколько объектов на кадре. Приходит кадр и мы просто говорим да на этом кадре есть человек к примеру или нету, а не подсчитываем сколько их там, 3-ое или четверо.. вот тут проблема, в определении явно сказано, что надо подсчитывать... или для классификации считается если на фото есть объект, то не важно сколько их просто считаем как бы за один объект
и ещё вопрос так же связанный с подсчётом Recall поясните пожалуйста как строить графики такие
Precision/Recall это из VOC-2007 не совсем ясно откуда берётся этот график я думал просто, что точности и полнота вычисляется для класса один раз и всё ну это не изменные величины поясните пожалуйста что не так понимаю
-
-
-
-
действительно всё просто, что-то я сразу не понял спасибо
-
Недавно наткнулся на статью от команды победителя. ссылка ниже там есть и исходники на github
Конкурс «Интернет-математика: Яндекс.Карты» — опыт нашего участия и описание победившего алгоритма
Вот читая статью возникли вопросы возможно кто-нибудь ответит. Авторы используют комбинированный подход на основе гистограмм и ключевых точек, так вот в подходе с гистограммой сперва переходят в пространство YCrCb и берут гистограмму по Y разделённую на 12 бинов, по Cr и Cb на 256 бинов и вводят ещё пространственную координату которую разделяют на 4-е бина. Мне не особо понятно, зачем нам нужны ещё гистограммы по каналам Cr и Cb если нам фактически нужна только яркость... 12-ть бинов в гистограмме по яркости я понимаю наверно экспериментально получены, вот ещё что не ясно так это пространственная привязка гистограмма из 4-ёх бинов..это просто размер изображения поделённый на 4-е части и смотрим из какой части точка... или это на изображение строится сетка 2х2 и смотрим в какую ячейку попадает точка и помечаем номер бина(номер ячейки)
-
Добрый день, изучаю сравнительно новые дескрипторы Freak и BRISK, но есть места которые не понимаю ниже ссылки на описание алгоритмов
Freak там есть ссылка на статью
как в одном так и в другом методе первым этапом идём выделение ключевых точек(FAST) затем уже к ключевым точкам применяются шаблоны для вычисления дескрипторов, они конечно различны, так вопрос в основном в этих шаблонах я не совсем понимаю как их формировать.. и ещё центр каждой окружности это некий пиксель взятый с соответствующим размытием так вот как можно выделить из-изображения такой участок и только его размыть.. если только интерполировать опять же в прямоугольную область..(хотя я думаю, что не прав, тогда бы рисовали решётку всё таки, а не окружности..) не понятен и сам обход ну то есть каким образом выбираем пары окружностей, что бы их сравнить нашей тестовой функцией для формирования кода дескриптора.. также ещё интересно выбирается ли (для сравнения) центр шаблона, то есть как я понимаю сама ключевая точка найденная с помощью FAST
-
у меня ещё вопрос по тестированию алгоритмов я скачал два архива VOCtrainval_06-Nov-2007.tar и VOCtest_06-Nov-2007.tar ну как я понял соответственно для обучения и тестирования зашёл в папку ImageSets\Main и для обучения для каждого из классов есть 3-и файла aeroplane_train.txt aeroplane_trainval.txt и aeroplane_val.txt я не совсем понимаю почему(зачем) их там 3-и)
Трекинг объектов.
в OpenCV
Опубликовано · Report reply
Ок спасибо большое, а в OpenCV есть ли примеры фильтра частиц или может быть у них как-нибудь класс называется