我使用自己的数据集训练YOLO模型,但没有测试结果

我使用从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毫秒内预测完成。

我尝试了许多图像,但没有一张图像画出边界框。我不明白是它无法检测到,还是我在测试时犯了错误。


回答:

需要注意的几点:

  1. 我怀疑你使用的是旧的已被废弃的仓库,仅根据你示例命令中给出的路径。请注意,AlexeyAB仓库在2021年7月被废弃。 https://www.ccoderun.ca/programming/yolo_faq/#which_repos_to_use_and_avoid

  2. 人们应该使用的新的Darknet/YOLO仓库是由Hank.ai赞助的。所有新的开发都在那里进行。请参见: https://github.com/hank-ai/darknet#table-of-contents

  3. 看起来你的训练图像包含了裁剪的水果图像,对吗?那张几乎占满整个图像的苹果图片…如果你用它进行训练,你是在告诉Darknet/YOLO,你想要检测的对象必须占满图像的~100%。所以如果你随后输入有苹果的图像,它将无法检测到任何东西。详情请见: https://www.ccoderun.ca/programming/yolo_faq/#crop_training_images

  4. 你的训练命令不是推荐的命令。请参见Darknet/YOLO常见问题解答,其中对此进行了解释: https://www.ccoderun.ca/programming/yolo_faq/#training_command

  5. 你还应该发布你的chart.png文件的副本。也许还可以查看一下你的其他chart_*.png文件,看看所有三个类别是否以相同的方式进行训练。但至少,请在尝试找出为什么无法检测到某些东西之前,编辑这个问题并添加你的chart.png文件。

  6. 强烈建议你在训练之前下载并运行DarkMark来测试你的注释。我无法开始计算这些年来它解决了多少问题。它是专门为发现和预防问题而编写的。(免责声明:我是作者。) https://www.ccoderun.ca/programming/yolo_faq/#what_software_is_used

  7. 加入Darknet/YOLO的Discord服务器。那里有很多人可以帮助人们开始。 https://discord.gg/zSq8rtW

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注