我使用从Kaggle获取的数据集,通过Yolov3模型进行训练。模型训练已经完成,我将新的权重文件添加到了备份文件夹中。我使用训练过的水果之一进行测试,但没有检测到对象。测试图像显示为Prediction.jpg。训练似乎进行得不错,但我不知道为什么无法检测到对象。请帮助我。
训练终端代码:
./darknet detector train /Users/melisabagcivan/darknet/data/obj.data /Users/melisabagcivan/darknet/cfg/yolov3.cfg /Users/melisabagcivan/Desktop/Projects/Bitirmeprojesi/yolov3.weights
测试终端代码:
./darknet detector test /Users/melisabagcivan/darknet/data/obj.data /Users/melisabagcivan/darknet/cfg/yolov3.cfg /Users/melisabagcivan/darknet/backup/yolov3_final.weights -thresh 0.25 -out predictions.jpg
我设置并编辑了obj.data和obj.names以及yolov3.cfg文件。
我有三个类别:苹果、香蕉和橙子。我在cfg文件中正确设置了滤波器和类别值,适应这三个类别。
cfg文件 [net]# 测试batch=64subdivisions=1# 训练subdivisions=16width= 608height=608channels=3momentum=0.9decay=0.0005angle=0saturation = 1.5exposure = 1.5hue=0.3learning_rate=0.001burn_in=1000max_batches = 6000 # classnum * 2000policy=stepssteps=3600,4800 # max_batches num %80, %90 scales=.1,.1
除了数据集中的.jpg图像外,还有同名的yolo格式的.txt文件。
包含所有图像路径的train.txt和test.txt文件也已准备就绪。
当我在终端运行测试命令时,它可以运行,但图片看起来一样,没有检测到对象的边界框。我确定已经安装了Opencv。我使用的是macOS。为什么它检测不到呢?请有人帮助我。我多次通过make clean清理了darknet,并通过make opencv=1运行它,但结果没有变化。
[yolo] 参数: iou损失: mse (2), iou_norm: 0.75, obj_norm: 1.00, cls_norm: 1.00, delta_norm: 1.00, scale_x_y: 1.00总BFLOPS 137.613 avg_outputs = 1052318 从/Users/melisabagcivan/darknet/backup/yolov3_final.weights加载权重... 已查看64,已训练: 32013 K-图像 (500 Kilo-batches_64) 完成!从权重文件加载了107层 输入图像路径: /Users/melisabagcivan/Desktop/Projects/yoloOD/dataset/test/38_Orange.jpg 检测层: 82 - 类型 = 28 检测层: 94 - 类型 = 28 检测层: 106 - 类型 = 28 /Users/melisabagcivan/Desktop/Projects/yoloOD/dataset/test/38_Orange.jpg: 在6738.129000毫秒内预测完成。
我尝试了许多图像,但没有一张图像画出边界框。我不明白是它无法检测到,还是我在测试时犯了错误。
回答:
需要注意的几点:
-
我怀疑你使用的是旧的已被废弃的仓库,仅根据你示例命令中给出的路径。请注意,AlexeyAB仓库在2021年7月被废弃。 https://www.ccoderun.ca/programming/yolo_faq/#which_repos_to_use_and_avoid
-
人们应该使用的新的Darknet/YOLO仓库是由Hank.ai赞助的。所有新的开发都在那里进行。请参见: https://github.com/hank-ai/darknet#table-of-contents
-
看起来你的训练图像包含了裁剪的水果图像,对吗?那张几乎占满整个图像的苹果图片…如果你用它进行训练,你是在告诉Darknet/YOLO,你想要检测的对象必须占满图像的~100%。所以如果你随后输入有苹果的图像,它将无法检测到任何东西。详情请见: https://www.ccoderun.ca/programming/yolo_faq/#crop_training_images
-
你的训练命令不是推荐的命令。请参见Darknet/YOLO常见问题解答,其中对此进行了解释: https://www.ccoderun.ca/programming/yolo_faq/#training_command
-
你还应该发布你的chart.png文件的副本。也许还可以查看一下你的其他chart_*.png文件,看看所有三个类别是否以相同的方式进行训练。但至少,请在尝试找出为什么无法检测到某些东西之前,编辑这个问题并添加你的chart.png文件。
-
我强烈建议你在训练之前下载并运行DarkMark来测试你的注释。我无法开始计算这些年来它解决了多少问题。它是专门为发现和预防问题而编写的。(免责声明:我是作者。) https://www.ccoderun.ca/programming/yolo_faq/#what_software_is_used
-
加入Darknet/YOLO的Discord服务器。那里有很多人可以帮助人们开始。 https://discord.gg/zSq8rtW