在我前面的系列博文中,对于目标检测系列的任务写了很多超详细的教程,目的是能够读完文章即可实现自己完整地去开发构建自己的目标检测系统,感兴趣的话可以自行移步阅读:
《基于官方YOLOv4-u5【yolov5风格实现】开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】》
《基于yolov7开发实践实例分割模型超详细教程》
《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》
《DETR (DEtection TRansformer)基于自建数据集开发构建目标检测模型超详细教程》
《基于yolov5-v7.0开发实践实例分割模型超详细教程》
《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》
《轻量级模型NanoDet基于自己的数据集【接打电话检测】从零构建模型超详细教程》
《基于YOLOv5-v6.2全新版本模型构建自己的图像识别模型超详细教程》
《基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程》
《超轻量级目标检测模型Yolo-FastestV2基于自建数据集【手写汉字检测】构建模型训练、推理完整流程超详细教程》
《基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】》
《基于官方YOLOv4开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】》
继YOLOv9大作发布不到三个月的时间,清华大佬们携最新的端到端实时目标检测成果YOLOv10来袭,在前文,我们借助于翻译软件简读了YOLOv10的论文内容,感兴趣的话可以看下:
《卷出新高度,直呼太强!时隔三月,YOLO再度进化升级:《YOLOv10—实时端到端目标检测》重磅来袭》
今天本文的主要目的就是想要迫不及待的上手使用最细的YOLOv10模型来基于自己的私有化数据集开发构建自己的个性化目标检测模型了。
官方项目地址在这里,如下所示:
接下来我们进入正文,手把手一步一步基于YOLOv10来开发自己的目标检测模型。
1、下载项目
首先就是下载项目资源,官方目前已经发布了v1.1分支版本,在这里,如下所示:
不难看出:代码更新的活跃度还是挺高的,社区提的issues也都在跟进解决。
下载源代码,如下:
下载完成:
在官方的README里面,官方介绍了,YOLOv10主要是依托于YOLOv8项目和RT-DETR算法模型进行开发的,所以YOLOv10整体的项目使用与YOLOv8应该是没有太大区别的。
2、项目数据准备
下载得到所需要的项目之后,一般习惯去除暂时用不到的内容,简化项目结构的同时便于整理,另外部分数据需要提前准备好,比如:官方的预训练权重文件,提前下载好存储在相应的目录中。
本地解压缩后如下所示:
暂时去除用不到内容,按照YOLOv8项目的开发流程,创建data目录、dataset目录、weights目录,最终结果如下:
data目录里面主要是存放self.yaml,这是用于模型训练的数据配置文件,如下:
self.yaml内容如下:
# path
train: /yolov10-projects/uav-yolov10/dataset/images/train/
val: /yolov10-projects/uav-yolov10/dataset/images/test/
# number of classes
nc: 1
# class names
names: ['uav']
weights目录主要是用于存放官方发布的基于COCO数据集的预训练模型权重,模型一共有:n/s/m/b/l/x六种尺寸,可以自行下载即可,模型下载链接如下:
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
下载下来存放到weights目录即可,如下:
dataset目录用于存放自己自建的数据集,如何创建自己的数据集我前面各篇超详细的文章里面有十分详细的手把手教程,这里就不再赘述, 直接来看下dataset目录:
images目录:
labels目录:
本文是基于我自建远红外场景下的低空无人机检测数据集来开发实践项目的, 数据实例如下:
3、模型训练
完成前述2部分的工作后就可以开始训练模型,前面我们讲过YOLOv10是基于YOLOv8项目构建的,所以整体的使用风格就是YOLOv8项目的使用方式,我们自己在项目同级目录下面创建train.py,内容如下:
#n
model = YOLO("weights/yolov10n.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=16,workers=0,name="yolov10n")
#s
model = YOLO("weights/yolov10s.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=16,workers=0,name="yolov10s")
#m
model = YOLO("weights/yolov10m.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=8,workers=0,name="yolov10m")
#b
model = YOLO("weights/yolov10b.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=8,workers=0,name="yolov10b")
#l
model = YOLO("weights/yolov10l.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=4,workers=0,name="yolov10l")
#x
model = YOLO("weights/yolov10x.pt")
results = model.train(data='data/self.yaml', epochs=100, device=0,batch=4,workers=0,name="yolov10x")
非常简单简洁明了的方式。
终端执行train.py,日志输出如下所示:
因为我这里并没有按照对应的框架版本去安装,所以这里看到有不少的Warning信息,不过暂且是不影响模型的开发训练的。
随着训练epoch的迭代进行,模型的精度不断提升:
训练完成如下:
完整结果文件详情如下:
标签类别数据可视化分布如下:
【混淆矩阵】
混淆矩阵(Confusion Matrix)也称误差矩阵,是表示精度评价的一种标准格式,通常以n行n列的矩阵形式来表示。在混淆矩阵中,行代表实际的类别,而列代表预测的类别。每个单元格的值表示实际类别为行对应类别、预测类别为列对应类别的样本数量。通过这种方式,混淆矩阵能够清晰地展示模型在各类别上的表现,包括正确分类和错误分类的数量。矩阵的每个单元格则包含了在该实际类别和预测类别下的样本数量。混淆矩阵的可视化结果中,对角线上的数字越大越好,代表模型在该类的预测结果更好。颜色越深通常表示该类的预测结果越好。而其他地方的数值则代表预测错误的情况,数值越小、颜色越浅说明模型在该类别的预测上表现越好。
【Precision曲线】
精确率曲线(Precision Curve)是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。
精确率(Precision)是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。
绘制精确率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率和召回率。
将每个阈值下的精确率和召回率绘制在同一个图表上,形成精确率曲线。
根据精确率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察精确率曲线,我们可以根据需求确定最佳的阈值,以平衡精确率和召回率。较高的精确率意味着较少的误报,而较高的召回率则表示较少的漏报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
精确率曲线通常与召回率曲线(Recall Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。
【Recall曲线】
召回率曲线(Recall Curve)是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。
召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度(Sensitivity)或真正例率(True Positive Rate)。
绘制召回率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的召回率和对应的精确率。
将每个阈值下的召回率和精确率绘制在同一个图表上,形成召回率曲线。
根据召回率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察召回率曲线,我们可以根据需求确定最佳的阈值,以平衡召回率和精确率。较高的召回率表示较少的漏报,而较高的精确率意味着较少的误报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
召回率曲线通常与精确率曲线(Precision Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。
【PR曲线】
精确率-召回率曲线(Precision-Recall Curve)是一种用于评估二分类模型性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)和召回率(Recall)之间的关系图来帮助我们了解模型在不同阈值下的表现。
精确率是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。
绘制精确率-召回率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率和召回率。
将每个阈值下的精确率和召回率绘制在同一个图表上,形成精确率-召回率曲线。
根据曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
精确率-召回率曲线提供了更全面的模型性能分析,特别适用于处理不平衡数据集和关注正例预测的场景。曲线下面积(Area Under the Curve, AUC)可以作为评估模型性能的指标,AUC值越高表示模型的性能越好。
通过观察精确率-召回率曲线,我们可以根据需求选择合适的阈值来权衡精确率和召回率之间的平衡点。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
【F1值曲线】
F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)、召回率(Recall)和F1分数的关系图来帮助我们理解模型的整体性能。
F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。
绘制F1值曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率、召回率和F1分数。
将每个阈值下的精确率、召回率和F1分数绘制在同一个图表上,形成F1值曲线。
根据F1值曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
F1值曲线通常与接收者操作特征曲线(ROC曲线)一起使用,以帮助评估和比较不同模型的性能。它们提供了更全面的分类器性能分析,可以根据具体应用场景来选择合适的模型和阈值设置。
整体综合各指标来看效果还是蛮不错的。
【整体训练过程可视化】
模型推理的话可以借鉴前文YOLOv8超详细的开发流程即可,因为这个使用方式是一样的。
到这里基于YOLO家族最新发表的YOLOv10模型基于自建数据集开发构建自己的完整目标检测模型就完成了,感兴趣的话都可以自行尝试下!
标签:正例,阈值,检测,模型,曲线,目标,构建,精确,召回 From: https://blog.csdn.net/Together_CZ/article/details/139233064