OpenCV плохая производительность классификатора Хаара, обученного мной

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

Я нашел несколько наборов изображений транспортных средств, которые использовались для аналогичных целей (обучение алгоритмов компьютерного зрения), и использовал их для создания собственных XML-файлов. Прошла почти неделя, и некоторые из них закончились, поэтому я попытался их использовать, но результаты были ужасными. Классификаторы, которые я нашел в Интернете, работали прилично, по крайней мере, кажется, что они пытаются обнаруживать транспортные средства и работают достаточно быстро для приложений в реальном времени (возможно, 5-10 кадров в секунду или около того).

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

Где я ошибся при создании файлов? У меня ограниченное время для выполнения этой задачи, и эти классификаторы могут тренироваться целую неделю, поэтому у меня осталось очень мало попыток. Для справки, моя методология (следуя этому учебник):

-Возьмите все положительные и отрицательные изображения; если негативные изображения не предоставлены, возьмите негативные изображения из другого набора данных, по крайней мере, столько негативов, сколько позитивов

-Создать столько образцов, сколько положительных результатов

-Используйте те же параметры, что и предложено, за исключением размера изображения (установите размер изображения в заданном наборе данных) и nstages (установите значение 10, потому что 20 занимает слишком много времени).

-Для параметра npos я использую 1/10 от количества выборок, используя полное количество выборок, что приводит к «ошибке утверждения» через несколько часов, по-видимому, количество выборок не может быть таким же, как npos согласно это Вот я и дал себе запас прочности.

Классификатор TL; DR Haar, который я обучил самостоятельно, работает намного хуже, чем тот, который можно найти в Интернете (с точки зрения времени и точности), нужен совет, как его улучшить, а не тратить еще одну неделю на его обучение.


person Henrick Davis    schedule 06.07.2017    source источник
comment
npos должен составлять около 90% ваших положительных образцов для 20 этапов и minHitRate 0,995. То, что классификатору yozr требуется так много времени для обнаружения, является подсказкой, которая слишком сложна из-за передискретизации. Можете ли вы опубликовать некоторые из ваших положительных образцов, пожалуйста?   -  person Micka    schedule 06.07.2017
comment
Я нашел проект на Github, который, кажется, делает именно то, что вы ищете, основываясь на этом публикация. Судя по всему, он предоставляет файл cars.xml, который используется для обучения алгоритма.   -  person KelvinS    schedule 06.07.2017


Ответы (1)


Здесь есть две проблемы. Во-первых, точность классификатора низкая. Во-вторых, классификатор работает слишком медленно.

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

Как упоминает @Micka, nPos около 90% от исходного количества выборок достаточно хорошо. minHitRate — это параметр, который вы можете изменить. Вы наблюдали за цифрами, которые отображаются во время тренировки? Как улучшилась точность, и ваш классификатор прекратил обучение (или вы используете обученные параметры до окончания обучения?)?

Для низкой скорости обнаружения наиболее вероятная причина заключается в том, что в ваших обучающих данных не было простых функций для быстрого обучения. Пробовали ли вы обнаружение на данных, которые вы использовали для обучения? Каковы были результаты в этом случае? Настройки компилятора или высокое разрешение изображения тоже могут быть проблемой, но если вы пробовали те же входные данные и настройки с другими классификаторами, это маловероятно.

Если вы хотите попробовать другой подход (и иметь графический процессор), YOLO V2 должен быть намного быстрее и точнее для этой задачи.

person Totoro    schedule 10.07.2017