YOLO11实战 第018期-基于yolo11的水果甜瓜目标检测实战文档(详细教程)
目录
基于yolo11的水果甜瓜目标检测
1.数据阶段
1.1数据集准备
1.2数据集结构组织
1.3数据集下载
1.4环境安装
2.训练阶段
2.1配置文件修改
2.2执行训练命令
2.3结果图展示分析
3.推理阶段
3.1开始推理
3.2输出展示
结束语
基于yolo11的水果甜瓜目标检测
1.数据阶段
1.1数据集准备
水果甜瓜数据集是一个用于目标检测任务的数据集。该数据集的可能应用领域为农业。样例如下图所示:
数据集介绍:从侧面、正面等多个角度拍摄,确保模型能够提取全面的甜瓜特征。在早晨、中午、下午等不同时间段拍摄,覆盖不同光照条件(如阴影和强光)。根据甜瓜的成熟度分为两类,未成熟(immature):果皮呈绿色,与叶片颜色相近,果实较小;成熟(mature):果皮逐渐变为黄色,完全成熟时呈金黄色,表面光滑或带有不稳定的网状纹路。
数据集是一个高质量、多样化的甜瓜成熟度检测数据集,涵盖了田间环境中常见的复杂场景。其高分辨率、多角度和多时间段的拍摄方式为模型训练提供了丰富的数据支持。数据集主要针对特定温室环境下的甜瓜,可能无法完全覆盖其他品种或开放环境下的甜瓜。
1.2数据集结构组织
YOLO格式数据集结构如下:
datasets/
- images
-- train
-- valid
- labels
-- train
-- valid
训练集图像有3040张高质量jpg图像,验证集图像有760张高质量jpg图象。
1.3数据集下载
【注意:准备好的datasets文件夹,应该与下面的工程项目yolov11_det位于同级目录,不要将datasets文件夹放置在工程项目里面】
☆可直接获取转换完成的yolo格式数据集(如下图),获取方式见文末
1.4环境安装
执行下面指令:
pip install ultralytics==8.3.59 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.训练阶段
2.1配置文件修改
【前提条件:cuda、torch、ultralytics版本匹配且可用,使用yolo11 m型号预训练模型】
【需要进入工程项目yolov11_det里面】
修改数据配置文件./custom.yaml,训练集/验证集路径设定,类别数和类别名称需一致
2.2执行训练命令
【按需修改train.py文件里的训练参数,例如:windows系统,workers应该设置为0;linux系统,可设置为8;其他参数按照硬件配置需求做修改】
执行训练指令:
python train.py
训练200 epoch后(含有早停机制,187 epochs),模型保存在runs/detect/train/weights文件夹
2.3结果图展示分析
1)F1_curve.png(F1分数)
由图可知,当confidence为0.626时,all classes的F1分数为0.96;表示该模型在0.626的置信度预测类时整体表现良好,具有一定的准确性和召回率。
什么是F1分数?F1分数是精确率(Precision)和召回率(Recall)的调和平均值,它同时考虑了模型预测的准确性和覆盖面。
2)P_curve.png(精确率曲线)
图中的深蓝色折线代表整体的精度,随着置信度的增加,精确度也增加,在置信度为0.973时,精确度达到了1.00。其余2条线分别表示2个类别在不同的置信度下的精度。
精确率曲线,帮助分析模型在检测任务中的表现,特别是在不同置信度设置下的精确性表现。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。
3)PR_curve.png(精确率-召回率曲线)
图中的曲线为Precision-Recall Curve(精确度-召回率曲线),展示了不同阈值下分类器的精确度和召回率。具体来说,横轴表示Recall(召回率),范围从0.0到1.0;纵轴表示Precision(精确度),范围从0.0到1.0。图中主要有3条曲线:
(1)彩色线代表2个类别的精确度-召回率曲线,每个类别的精确度各有差异;
(2)深蓝色线代表所有类别的平均精确度-召回率曲线,其精确度也在0.987左右保持稳定。
这3条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。
通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的表现越稳定。
4)R_curve.png(召回率曲线)
图中的R曲线为Recall-Confidence Curve(召回率-置信度曲线),它展示了不同置信度下的召回率。具体来说,横轴表示置信度,从0.0到1.0;纵轴表示召回率,从0.0到1.0。图中主要有3条曲线:
(1)2条彩色线:代表2个类别的召回率随置信度的变化情况。这条曲线显示了随着置信度的增加,每个类别的召回率先变化较小,然后在某个点之后迅速下降。
(2)深蓝色线:代表所有类别的平均召回率随置信度的变化情况。
展示模型在不同的置信度阈值(confidence thresholds)下的召回率表现。召回率曲线帮助评估模型在目标检测任务中,检测到真正目标的能力。通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。如果召回率曲线在较低的置信度下表现较好,说明模型可以有效检测大多数目标;如果曲线下降较快,可能需要调整模型或数据集,避免漏检问题。
5)results.png(结果指标曲线)
这个图像文件,显示了训练过程中关键指标(如损失、mAP)的变化趋势。
box_loss:定位损失曲线
含义:边界框损失,衡量预测的边界框与真实边界框之间的误差。包括边界框的中心位置、宽度、高度等。
图表:通常显示为训练轮次或步数上的损失值曲线,较低的损失值表明模型对边界框的预测更加准确。
dfl_loss:目标检测损失曲线
含义:分布式定位损失(Distribution Focal Loss),处理定位任务中的类别不平衡问题。帮助模型更加关注难以预测的目标。
图表:显示为训练轮次或步数上的损失值曲线,较低的损失值表示分布式定位任务的效果较好。
cls_loss:分类损失曲线
含义:类别损失,衡量预测的类别标签与真实类别标签之间的差距。反映了分类器的准确性。
图表:显示为训练轮次或步数上的损失值曲线,较低的损失值表示分类器性能较好。
Precision (B):精度曲线
含义:精确度(B类),表示模型预测的正样本中有多少比例是真正的正样本。B类通常是指背景类。
图表:显示为训练轮次或步数上的精确度曲线,较高的精确度表示模型在背景类检测中的准确性较高。
Recall (B):召回率曲线
含义:召回率(B类),表示模型检测到的实际正样本中的比例。B类通常是指背景类。
图表:显示为训练轮次或步数上的召回率曲线,较高的召回率表示模型对背景类的检测能力较强。
mAP50 (B):IoU阈值为0.5时的平均精度
含义:在IoU(Intersection over Union)阈值为0.5时的平均精度(B类),反映了模型在此IoU阈值下的精度。
图表:显示为训练轮次或步数上的mAP50值曲线,较高的mAP50值表示模型在背景类的检测精度较高。
mAP50-95 (B):IoU阈值在0.5到0.95之间的平均精度
含义:在IoU阈值从0.5到0.95范围内的平均精度(B类),评估模型在不同IoU阈值下的检测性能。
图表:显示为训练轮次或步数上的mAP50-95值曲线,较高的mAP50-95值表示模型在背景类的整体性能较强。
3.推理阶段
3.1开始推理
使用训练好的模型进行预测(输入测试图片文件夹input_test_images):
执行下面指令:
python predict.py
检测完成后,结果保存在output_results文件夹。
3.2输出展示
样例输出如下:
结束语
感谢您的耐心阅读!若文中存在错误,恳请指出,我会努力改进。若您有更优方法,也请不吝分享,让我们共同进步!
【⭐⭐⭐源码或数据集需求,请访问 基于yolo11的水果甜瓜目标检测】