我使用自己的数据集训练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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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