怎么做考试资料网站,淘宝客网站主题,wordpress后台设置,培训机构网站建设要求在我们前面的系列博文中#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了#xff0c;结合智能化的设备可以实现只能除草等操作#xff0c;玉米作物场景下的杂草检测我们则少有涉及#xff0c;这里本文的主要目的就是想要基于DETR模型来开发构建玉米…在我们前面的系列博文中关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了结合智能化的设备可以实现只能除草等操作玉米作物场景下的杂草检测我们则少有涉及这里本文的主要目的就是想要基于DETR模型来开发构建玉米田间作物场景下的玉米苗和杂草检测识别系统。
春节前后我们已经基于YOLO系列最新的YOLOv8模型开发构建了相应的项目感兴趣可以自行移步阅读
《助力智能化农田作物除草基于轻量级YOLOv8n开发构建农田作物场景下玉米苗、杂草检测识别分析系统》
《助力智能化农田作物除草基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统》
首先看下实例效果 DETR (DEtection TRansformer) 是一种基于Transformer架构的端到端目标检测模型。与传统的基于区域提议的目标检测方法如Faster R-CNN不同DETR采用了全新的思路将目标检测问题转化为一个序列到序列的问题通过Transformer模型实现目标检测和目标分类的联合训练。
DETR的工作流程如下
输入图像通过卷积神经网络CNN提取特征图。 特征图作为编码器输入经过一系列的编码器层得到图像特征的表示。 目标检测问题被建模为一个序列到序列的转换任务其中编码器的输出作为解码器的输入。 解码器使用自注意力机制self-attention对编码器的输出进行处理以获取目标的位置和类别信息。 最终DETR通过一个线性层和softmax函数对解码器的输出进行分类并通过一个线性层预测目标框的坐标。 DETR的优点包括
端到端训练DETR模型能够直接从原始图像到目标检测结果进行端到端训练避免了传统目标检测方法中复杂的区域提议生成和特征对齐的过程简化了模型的设计和训练流程。 不受固定数量的目标限制DETR可以处理变长的输入序列因此不受固定数量目标的限制。这使得DETR能够同时检测图像中的多个目标并且不需要设置预先确定的目标数量。 全局上下文信息DETR通过Transformer的自注意力机制能够捕捉到图像中不同位置的目标之间的关系提供了更大范围的上下文信息。这有助于提高目标检测的准确性和鲁棒性。 然而DETR也存在一些缺点
计算复杂度高由于DETR采用了Transformer模型它在处理大尺寸图像时需要大量的计算资源导致其训练和推理速度相对较慢。 对小目标的检测性能较差DETR模型在处理小目标时容易出现性能下降的情况。这是因为Transformer模型在处理小尺寸目标时可能会丢失细节信息导致难以准确地定位和分类小目标。
简单看下实例数据情况 官方项目地址在这里如下所示 可以看到目前已经收获了超过1.2w的star量还是很不错的了。
如果对如何使用DETR模型来开发构建自己的个性化目标检测模型有疑问的话可以参考我的超详细教程文章如下
《DETR (DEtection TRansformer)基于自建数据集开发构建目标检测模型超详细教程》
DETR整体数据流程示意图如下所示 官方也提供了对应的预训练模型可以自行使用 本文选择的预训练官方权重是detr-r50-e632da11.pth首先需要基于官方的预训练权重开发能够用于自己的 个性化数据集的权重如下所示
pretrained_weights torch.load(./weights/detr-r50-e632da11.pth)
num_class 3 1
pretrained_weights[model][class_embed.weight].resize_(num_class1,256)
pretrained_weights[model][class_embed.bias].resize_(num_class1)
torch.save(pretrained_weights,./weights/detr_r50_%d.pth%num_class)
这里类别数量为3。
终端执行
python main.py --dataset_file coco --coco_path /0000 --epoch 100 --lr1e-4 --batch_size2 --num_workers0 --output_diroutputs --resumeweights/detr_r50_4.pth即可启动训练计算。
终端输出如下 训练计算完成输出如下 将近9个小时完成了训练工作。
等待训练完成后借助于评估模块对结果进行评估对比可视化
iter 000: mAP50 49.1, score0.616, f10.583
iter 050: mAP50 82.5, score0.860, f10.860
iter latest: mAP50 91.6, score0.914, f10.932
iter 000: mAP50 49.1, score0.616, f10.583
iter 050: mAP50 82.5, score0.860, f10.860
iter latest: mAP50 91.6, score0.914, f10.932
接下来详细看下指标详情。
【Precision曲线】 精确率曲线Precision-Recall Curve是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。精确率Precision是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。 【Recall曲线】 召回率曲线Recall Curve是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度Sensitivity或真正例率True Positive Rate。 【F1值曲线】 F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率Precision、召回率Recall和F1分数的关系图来帮助我们理解模型的整体性能。 F1分数是精确率和召回率的调和平均值它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点以选择最佳的阈值。 loss可视化如下所示 感兴趣的话可以自行动手实践尝试下
如果自己不具备开发训练的资源条件或者是没有时间自己去训练的话这里我提供出来对应的训练结果可供自行按需索取。
模型训练结果