0

我有一个使用 Dlib 库 19.10 的 Python 程序,分类器使用 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 时出现以下错误:

回溯(最后一次调用):文件“C:/Users/marco/Desktop/Projeto_de_pesquisa/treinamento_casas.py”,第 7 行,在 dlib.train_simple_object_detector("recursos/treinamento_casas.xml", "recursos/detector_casas.svm",奥普科斯)

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

4

0 回答 0