Ошибка при обнаружении объектов с использованием алгоритма SVM - PullRequest
0 голосов
/ 30 мая 2019

У меня есть программа на Python, которая использует библиотеку Dlib 19.10, классификатор использует xml-файл для изучения изображений, а затем я выполняю следующий код, который создает файл .svm для классификации:

import dlib

opcoes = dlib.simple_object_detector_training_options()
opcoes.add_left_right_image_flips = True
opcoes.C = 5

dlib.train_simple_object_detector("recursos/treinamento_casas.xml", "recursos/detector_casas.svm",opcoes)

Первая проблема возникает в строке 4 (opcoes.add_left_right_image_flips = True), когда False помещается, ошибки не возникает, обычно происходит обучение, однако при установке значения True появляется следующая ошибка:

Traceback(последний вызов был последним): файл "C: /Users/marco/Desktop/Projeto_de_pesquisa/treinamento_casas.py", строка 7, в dlib.train_simple_object_detector ("recursos / treinamento_casas.xml", "recursos / detector_casas.sm")

RuntimeError: Обнаружен невозможный набор меток объектов.Это происходит потому, что ни одно из местоположений объектов, проверенных с помощью прилагаемого сканера изображений, не достаточно близко соответствует одному из блоков истинности в вашем наборе обучающих данных.Чтобы решить эту проблему, вам нужно либо уменьшить match_eps, отрегулировать настройки сканера изображений таким образом, чтобы он мог поразить это поле истинности, либо отрегулировать неправильный прямоугольник истины, чтобы он мог соответствовать текущему сканеру изображений.Кроме того, если вы используете объект scan_fhog_pyramid, вы можете попробовать использовать более точную пирамиду изображения.Кроме того, scan_fhog_pyramid сканирует поле с фиксированным соотношением сторон по изображению при поиске объектов.Поэтому, если вы получаете эту ошибку и используете scan_fhog_pyramid, вполне вероятно, что проблема состоит в том, что ваш обучающий набор данных содержит прямоугольники истинности с широко варьирующимися соотношениями сторон.Решение состоит в том, чтобы все ваши тренировочные блоки имели примерно одинаковое соотношение сторон.

индекс изображения 23 match_eps: 0,5 наилучшее возможное совпадение: 0,496824 истина прямоугольная: [(508, 482) (600, 650)] истинаширина / высота прямоугольника: 0,550296 область прямоугольника истинности: 15717 прямоугольник ближайшего шаблона обнаружения: [(492, 515) (595, 618)] ширина / высота прямоугольника ближайшего шаблона обнаружения: 1 область прямоугольника ближайшего шаблона обнаружения: 10816

Вторая проблема возникает при обнаружении объектов на изображениях, алгоритм не распознает никаких объектов на тестовых изображениях, даже те изображения, которые использовались для обучения, алгоритм должен нарисовать прямоугольник на обнаруженных объектах, и этоне бываетФрагмент кода:

contador = 0
detectorCasa = dlib.simple_object_detector("recursos/detector_casas.svm")
for imagem in glob.glob(os.path.join("imagens/teste", "*.jpg")):
    img = cv2.imread(imagem)
    objetosDetectados = detectorCasa(img)
    for d in objetosDetectados:
        e, t, d, b = (int(d.left()), int(d.top()), int(d.right()), int(d.bottom()))
        cv2.rectangle(img, (e,t), (d, b), (0,0,255), 2)
        contador += 1

    cv2.imshow("Detector de casas", img)
    cv2.waitKey(0)

Будет ли ошибка в XML-файле?

Я понятия не имею, что происходит проблема, и также ничего не найти в Интернете

Пример данных

https://github.com/MarcosPauloSR/questionStackOverflow

...