как использовать файл модели svmlight для обнаружения объекта в opencv с помощью С++

Я использую OpenCV, C++ и пытаюсь обнаружить объект на изображениях. До сих пор, что я сделал.

1. из небольшого патча изображения (108x64) я извлек желаемую функцию 6200 (из одного патча). Затем я написал эти функции в файлах train.txt и test.txt в формате svmLight.

.2 Затем я передал train.txt в svmLight и получил файл модели. Используя этот файл модели, я могу проверить точность классификации, которая составляет примерно 90%. До сих пор я делал это в Ubuntu, OpenCV и C++. и это обучение командной строки и тестирование обоих.

3. Теперь я хочу обнаружить объект на исходных изображениях (480x640), используя файл модели, созданный во время обучения.

НО проблема в том, что я не знаю, как использовать файл модели для обнаружения объекта из исходного изображения (640x480). Мне нужна очень простая/фундаментальная вещь: как использовать этот файл модели для обнаружения с помощью простого скользящего окна (108x64) и svmLight или (LatentSVM или cvSVM). Пожалуйста, не говорите мне, что я должен изменить размер моего исходного изображения (пирамида изображения) для хорошей точности, и я должен использовать ADM (активная деформируемая модель/змея). Не говорите мне о подавлении локальных максимумов для удаления лишнего прямоугольника. Просто скажите мне, как обнаружить (пошаговая полная реализация) и получить прямоугольник. Заранее спасибо, жду ответа специалистов.


person Kaushal Joshi    schedule 11.03.2015    source источник
comment
Пожалуйста, расскажите мне все возможные способы, я прочитал предыдущий ответ, но не понял полностью.   -  person Kaushal Joshi    schedule 11.03.2015


Ответы (1)


Слава Богу, я сделал это. что у меня было в моем проекте обнаружения объектов, что

  1. Сначала я реализовал часть извлечения функций. Поэтому, используя небольшой патч изображения, я извлек желаемую функцию и записал ее в файл train.txt в формате SVMLight. Я использовал C++, это очень просто. Я использовал патч из 10 изображений, поэтому 10 строк я написал в файле .txt с соответствующей меткой (1 или -1) с размерностью каждого вектора признаков 6200 (поэтому каждая строка в файле train.txt имеет индекс 6200 и соответствующее значение).
  2. Во-вторых, таким же образом я создаю файл test.txt. Здесь метка не нужна, но тогда вам нужно поставить 0 в качестве метки вместо 1 или -1

    1. У меня есть исполняемый файл SVMLight. Так просто я использую команду $./svm_learn train.txt model.txt в Ubuntu. после этого я получил файл модели.

    2. Я сделал классификацию с помощью команды $./svm_classify test.txt model.txt Predict.txt, и она показала точность и скорость точности/отзыва. У меня точность 95%. Это будет зависеть от количества образцов, которые вы используете для обучения. позже я использовал 800 положительных и 800 отрицательных, тогда я получил точность 97%. Я был очень счастлив .

До сих пор я сделал. Получила результат и очень довольна. но после этого я не знаю, что делать и как делать. Затем я прочитал много документов и статей, чтобы использовать этот файл модели для обнаружения объекта в исходном изображении (размер 512x512). Главное, я понятия не имел, как использовать Modelfile. После прочтения множества статей в Интернете и stackoverflow я действительно запутался. Но где-то в stackoverflow я прочитал, что берут код из SVMLight и интегрируют его с вашим приложением. То же самое я сделал.

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

  1. сначала я загружаю исходный код SVMLight. Пытался это понять. Затем я пришел к выводу, что в моем приложении используется только модуль svm_classify. Затем я скопировал выбранный фрагмент кода из svm_classify.c в свое приложение, или можно сказать, что я интегрировал/объединил svm_classify.c в своем приложении.

Не беспокойтесь о файле модели, svm_classify загрузит его и сделает всю работу за вас.

  1. Затем вы получите обработанное значение (переменную) для каждого небольшого окна обнаружения или входного вектора или для каждой строки в test.txt. имя переменной "dist" . если это +ve, то объект присутствует в окне обнаружения или в test_input_vector, иначе объект отсутствует.

ПРИМЕЧАНИЕ. SVMLight можно использовать бесплатно только в некоммерческих целях. Я использую его в качестве исследовательского проекта M-tech (некоммерческого) в государственном университете. Если я избегаю какого-либо правила, пожалуйста, дайте мне знать.

Если у кого есть сомнения. наиболее желанный.

person Kaushal Joshi    schedule 13.03.2015