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

Smorodov

Главные администраторы
  • Количество публикаций

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

  • Посещение

  • Days Won

    346

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


  1. Если вы знаете где точка находилась на предыдущем кадре, знаете оптический поток для этой точки, то координаты точки на текущем  кадре будут равны координатам точки на предыдущем кадре плюс оптический поток в этой точке.


  2. Есть еще "MS-Celeb-1M Dataset" но не помню есть там метки обозначающие персону или нет. 

    Вообще да, CASIA довольно грязный и неравномерный датасет, строил гистограмму получается что то похожее на экспоненту.

    То есть одних фоток во много раз больше чем других.

    UPD: глянул, вроде должны быть метки: https://msceleb.github.io/celeb1m/1m 

     


  3. Цитата

    kNN сейчас тоже курю...:-)) вот интересно есть некие алгоритмы, встроенные сразу в несколько СУБД( MSSQL, postgres), вроде MSSQL Analysis Services(както так) и вроде бы эти алгоритмы как раз так и называются: Поиск ближайшего соседа(ей). Я бегло гуглил примеру работы с ними - они все для геоданных, у которых размерность маленькая.. и чесно говоря непонятно, можно ли натянуть их на задачу поиска среди 128ммерных данных.. Может кто слышал об этом что-нить?? Хорошо наверно было бы запользовать готовый велосипед.. С

    Я как-то занимался чем то подобным, из готовых БД скорее https://support.hdfgroup.org/HDF5/ подходит, а поиск соседей делать ручками. Но в конце остановился на простой загрузке векторов из файла в память, в моем случае этого вполне достаточно было, ну и поиск OpenCV-шным kNN.


  4. Да со сферой то ничего сложного, для каждого лица есть 128-мерный вектор, длина которого равна единице.

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

    Так как векторы нормированные, то косинус угла будет равен скалярному произведению.  

    Вот косинус и будет определять насколько похожи лица с точки зрения OpenFace.

     

    Естественно при добавлении новых данных качество поиска будет падать.

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

    К тому же SVM плохо доучивается, да, есть разные извращения по этому поводу, но широкого применения я почему то не вижу.

    То есть, добавил человека, переучивай SVM. 

     

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

     

     


  5. Так то так, но это если пространство правильно деформировано и имеет правильную размерность, тогда лица каждого человека будут формировать гиперсферы одинакового радиуса. Но вот это как раз и есть сферический конь в вакууме, такое редко бывает на практике. 

    Обычно получется так что точки для одного человека ложатся в виде N-мерной гиперколбасы и гиперколбасы эти переплетены между собой узлами. Так вот, чтобы понять где чье лицо нужно создать границы (не сферические), чтобы классификатор мог отличить где кто. Вот при обучении SVM и обучается классифицировать кто какой гиперколбасе принадлежит. 

    А вообще, насколько я помню, OpenFace выдает вектор на 128-мерной гиперсфере радиуса 1, и можно измерять углы между векторами, чтобы узнать кто на кого похож.

    Есть еще t-sne, которые могут выкладывать гиперпространство на плоскости или в 3-D.  


  6. По поводу svm.get_support_vector, в SVM по определению расстояния до опорных векторов  вроде как всегда равно единице (ну или величине зазора, если они не нормированы, но одинаковые), в SVM c "мягкой" (soft margin svm) границей возможны варианты. Параметр С, насколько я помню, как раз и задает "жесткость" границы.

    Не параметр целочисленный, а, возможно, сетка целочисленная используется при решении, поэтому и расстояния целые.

    Я расстояния до границы не использовал в SVM, так что могу только предполагать.


  7. В смысле целые числа, так-то функция возвращает float. 

    Попробуйте запустить OpenCV-шный пример points_classifier, для SVM ну допилить чуть, чтобы выдавал расстояние, до границы, сможете визуально проверить то он выдает или нет.

    Глянул еще раз документацию, похоже оптимизация идет на сетке

    Generates a grid for SVM parameters.

    C++: CvParamGrid CvSVM::get_default_grid(int param_id)
    Parameters:
    • param_id 

      SVM parameters IDs that must be one of the following:

      • CvSVM::C
      • CvSVM::GAMMA
      • CvSVM::P
      • CvSVM::NU
      • CvSVM::COEF
      • CvSVM::DEGREE

      The grid is generated for the parameter with this ID.

    The function generates a grid for the specified parameter of the SVM algorithm. The grid may be passed to the function CvSVM::train_auto().

    Сетка строится по параметрам, которые вы задаете, возможно она в вашем случае целочисленная. 

     

    Но вообще там double

    CvParamGrid::CvParamGrid

    The constructors.

    C++: CvParamGrid::CvParamGrid()
     
    C++: CvParamGrid::CvParamGrid(double min_val, double max_val, double log_step)
     

    The full constructor initializes corresponding members. The default constructor creates a dummy grid:

    CvParamGrid::CvParamGrid()
    {
        min_val = max_val = step = 0;
    }

     


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

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


  9. Поток GUI работает в цикле WinMain, там обрабатываются сообщения системы, чтобы закрыть, нужно отправить соответствующее сообщение. Тогда программа завершит этот цикл и теоретически должна закрыться.  Но может надо просто камеру вначале закрыть, она тоже может держать программу. 


  10. Упс, цикл у вас в обработчике нажатия кнопки. Не ну это так не делается. В обработчиках событий должен быть короткий быстро выполняющийся код, ну никак не вечный цикл. То что у вас сделано, это очень плохо. Посмотрите, на форуме есть примеры вывода видео на форму. 

×