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

ProgRoman

Пользователи
  • Количество публикаций

    190
  • Зарегистрирован

  • Посещение

  • Days Won

    7

Сообщения, опубликованные пользователем ProgRoman


  1. Спасибо большое т.е. как я понял второй параметр по сути является параметром фильтра Калмана показывающий, что более вероятно правильное предсказание по фильтру или же полученные экспериментально данные с детектора..

    а зачем нужен первый параметр для увеличения скорости работы? у нас же получается, что мы должны вызывать фильтр не на каждом фрейме, а только тогда когда время срабатывания подошло..

    а не будет ли лучше если вместо фильтра Калмана использовать фильтр частиц, я сам пока не разбирался хотелось бы узнать какой будет лучше


  2. Добрый день, разбираюсь с проектом MultitargetTracker от Smorodov

    Повозился с мультитрекингом, по мотивам лекций student Dave (см. выше).

    Хотел трекать тараканов, как у него, но пока ограничился готовыми точками, которые крутятся вокруг курсора, часто пересекаясь, но траектории не перепутываются ( фильтр настроен на довольно медленные перемещения курсора ). Код еще сыроват, но поиграть можно. В аттаче проект под 2010 студию настроенный под x64.

    появились вопросы

    CTracker(float _dt, float _Accel_noise_mag,...

    первый параметр это шаг времени опроса фильтра, по умолчанию равно 0,2. В чём оно задано в милисекундах?

    второй параметр не могли бы пояснить, что он означает..

    венгерский алгоритм тут используется как "сопоставлялка", ну к примеру есть 20 детектов, т.е. как я понимаю 20 объектов, которые выделил детектор и далее мы этот массив передаём в трекер tracker.Update(centers); и каждому треку уже как бы "выделенному" назначается наиболее похожий детект(это решается с помощью венгерского алгоритма) далее если есть не использованные детекты то создаём для них новые треки так.. а если есть не используемые треки, то удаляем их если если трек долго не используется(ну как в алгоритме)


  3. Добрый день, возник вопрос как измерить(понять) насколько эффективен(информативен) дескриптор для объекта.

    Т.е у нас есть изображение и вычислено несколько дескрипторов для данного изображения... то есть есть набор дескрипторов D=[d1,d2,..,dn], где n- общее число дескрипторов вот и как найти дескриптор который наилучшим образом описывает объект

  4. PCA


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

    большими это какими и сколько времени на всё про всё уходит?

    по времени не знаю сегодня завтра замерю а по размеру около 10000 вот

    ещё интересует вопрос есть ли какие-нибудь методы которые понизят размерность и гарантированно улучшат(ну или точно не ухудшат) распознавательные способности алгоритма ну типа сжатия без потерь информации что-то в таком духе... или может есть какие-нибудь методы по извлечению особо информативных областей из дескрипторов..

  5. PCA


    Сейчас реализую 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 которая будет использована для построения проекции входного изображения..


  6. ну да всё так и есть, я просто подумал, что если взять окрестность точки такую что бы она была информативна ну не слишком маленькую и большую вот, и попробовать к ней применить эти дескрипторы может быть получится тоже не плохое распознавание.. то есть грубо говоря тот же hog и lbp только не ко всему изображению, а к точкам вот...


  7. да я хотел попробовать взять ключевые точки и подсчитать в окрестности или HOG, или LBP и посмотреть, что получится, но что бы это сделать надо знать размер локальной области по которой и будет вычисляться дескриптор HOG и LBP вот :)


  8. Не совсем понятно как определять оптимальный размер локальной области вокруг ключевой точки

    То есть у нас есть набор ключевых точек полученных с помощью FAST как дальше определить размер области по которой можно было бы построить дескриптор


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

    а тут Classification Results: VOC2007 data

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


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

    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 одно и то же?...

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

  11. HOG


    Спасибо материалы очень хорошие, как я понял в случае с C-HOG ячейка берётся квадратной 4*4 и считается, что это окружность, а дальше она разбивается на сектора вроде бы так..

    у меня тут ещё вопрос возник при просмотре лекции(второй вашей ссылки)

    Полнота (Recall)

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

    класса среди всех объектов основного класса из

    тестовой выборки

    я не совсем понимаю как это посчитать для задачи классификации, а не детектирования, сказано что Доля правильно распознанных объектов основного класса среди всех объектов основного класса для классификации не важно же сколько объектов на кадре. Приходит кадр и мы просто говорим да на этом кадре есть человек к примеру или нету, а не подсчитываем сколько их там, 3-ое или четверо.. вот тут проблема, в определении явно сказано, что надо подсчитывать... или для классификации считается если на фото есть объект, то не важно сколько их просто считаем как бы за один объект

    и ещё вопрос так же связанный с подсчётом Recall поясните пожалуйста как строить графики такие

    Precision/Recall это из VOC-2007 не совсем ясно откуда берётся этот график я думал просто, что точности и полнота вычисляется для класса один раз и всё ну это не изменные величины поясните пожалуйста что не так понимаю

  12. HOG


    У меня тут ещё вопрос я не совсем понимаю как делать ячейки, которые разбивают изображение на не прямоугольные формы.. с прямоугольными(R-HOG) всё понятно это просто сетка, а с окружностями я что-то не понимаю...(это для C-HOG) :)

  13. HOG


    Возник вопрос, в реализации opencv используется R-HOG мне так кажется, там же вроде бы прямоугольные блоки, так вот вопрос можно ли как-то изменить на C-HOG для сравнения


  14. Недавно наткнулся на статью от команды победителя. ссылка ниже там есть и исходники на github

    Конкурс «Интернет-математика: Яндекс.Карты» — опыт нашего участия и описание победившего алгоритма

    исходники

    Вот читая статью возникли вопросы возможно кто-нибудь ответит. Авторы используют комбинированный подход на основе гистограмм и ключевых точек, так вот в подходе с гистограммой сперва переходят в пространство YCrCb и берут гистограмму по Y разделённую на 12 бинов, по Cr и Cb на 256 бинов и вводят ещё пространственную координату которую разделяют на 4-е бина. Мне не особо понятно, зачем нам нужны ещё гистограммы по каналам Cr и Cb если нам фактически нужна только яркость... 12-ть бинов в гистограмме по яркости я понимаю наверно экспериментально получены, вот ещё что не ясно так это пространственная привязка гистограмма из 4-ёх бинов..это просто размер изображения поделённый на 4-е части и смотрим из какой части точка... или это на изображение строится сетка 2х2 и смотрим в какую ячейку попадает точка и помечаем номер бина(номер ячейки)


  15. Добрый день, изучаю сравнительно новые дескрипторы Freak и BRISK, но есть места которые не понимаю ниже ссылки на описание алгоритмов

    BRISK

    Freak там есть ссылка на статью

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


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

×