做网站建设的合同范本,服装定制行业的未来和趋势,推广公司游戏,定制高端网站去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械#xff0c;看着非常震撼#xff0c;但是我们国内农业的发展还是相对比较滞后的#xff0…去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物专家设计出来了很多用于采摘不同农作物的大型机械看着非常震撼但是我们国内农业的发展还是相对比较滞后的小的时候拔草是一个人一列蹲在地里就在那埋头拔草不知道什么时候才能走到地的尽头小块的分散的土地太多基本上都是只能人工手工来取收割大点的连片的土地可以用收割机来收割不过收割机基本都是用来收割小麦的最近几年好像老家也能看到用于收割玉米的机器了不过相对还是比较少的玉米的收割我们基本上还是人工来收割的不仅累效率还低遇上对玉米叶片过敏的就更要命了。。。。闲话就扯到这里了。
有时候经常在想我们的农业机械化自动化什么时候能再向前迈进一大步回顾德国的工业机械在视频展示的效果中其实很关键的主要是两部分一部分是机器视觉定位检测识别另一部分是机械臂传动轴两部分相互配合才能完成采摘工作本文的主要想法是想要基于DETR开发构建用于番茄采摘场景下的目标检测系统前文实践如下
《AI助力农作物自动采摘基于YOLOv7【tiny/l/x】不同系列参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》
《AI助力农作物自动采摘基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》
《AI助力农作物自动采摘基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》
《AI助力农作物自动采摘基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》
首先看下实例效果 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-r50-e632da11.pth首先需要基于官方的预训练权重开发能够用于自己的 个性化数据集的权重如下所示
pretrained_weights torch.load(./weights/detr-r50-e632da11.pth)
num_class 1 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)
因为这里我的类别数量为1所以num_class修改为41根据自己的实际情况修改即可。生成后如下所示 终端执行
python main.py --dataset_file coco --coco_path /0000 --epoch 100 --lr1e-4 --batch_size2 --num_workers0 --output_diroutputs --resumeweights/detr_r50_2.pth
即可启动训练训练启动如下 等待训练完成后借助于评估模块对结果进行评估对比可视化
iter 000: mAP50 61.6, score0.683, f10.694
iter 050: mAP50 71.7, score0.747, f10.772
iter latest: mAP50 75.6, score0.791, f10.797
iter 000: mAP50 61.6, score0.683, f10.694
iter 050: mAP50 71.7, score0.747, f10.772
iter latest: mAP50 75.6, score0.791, f10.797
接下来详细看下指标详情。
【Precision曲线】 精确率曲线Precision-Recall Curve是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。精确率Precision是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。 【Recall曲线】 召回率曲线Recall Curve是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度Sensitivity或真正例率True Positive Rate。 【F1值曲线】 F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率Precision、召回率Recall和F1分数的关系图来帮助我们理解模型的整体性能。 F1分数是精确率和召回率的调和平均值它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点以选择最佳的阈值。 loss可视化如下所示 感兴趣的话可以自行动手实践尝试下