ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于YOLO v3与DIoU的生姜种芽朝向检测:小目标实时识别与嵌入式移植

基于YOLO v3与DIoU的生姜种芽朝向检测:小目标实时识别与嵌入式移植 简介这份PDF文献面向农业机械自动化、计算机视觉方向的研究人员与工程技术人员聚焦生姜机械化播种中种芽朝向难以保持一致的实际难题提出一套基于深度学习的快速识别与朝向判定方案。全文以YOLO v3网络为基础结合Mosaic在线数据增强、DIoU边框回归损失函数以及基于IoU的K-means聚类先验框设计并给出壮芽选取与朝向判定的完整流程。测试结果显示平均精度与F1值分别达到98.2%和94.9%GPU加速后检测速度可达112帧/s较原网络有明显提升。资源包共1个PDF文件约4.64MB内容涵盖数据集构建、网络搭建、实验对比与结果分析结构完整适合作为算法复现、论文写作与农业智能装备研究的参考文献。目前已有147人学习可为生姜自动化精确播种及相关目标检测应用提供技术参考。1. 生姜种芽朝向判定从 1100 张工业相机图到 112 帧/s 的检测链路生姜播种有个反直觉的农艺要求姜种必须平放种芽朝向要一致——东西向沟芽一律朝南南北向沟芽一律朝西为的是出苗整齐和后期遮光。这事人工干弯腰低头一颗颗摆效率低到拖累整个产业。但让机器干第一个卡点不是机械臂而是眼睛姜种形状极不规则播种前还要药物浸泡芽体颜色随光照剧烈漂移颜色空间分割这条路基本走不通。这份来自《农业工程学报》2021 年第 37 卷第 1 期的研究给的就是一套能落地的视觉方案用 YOLO v3 做种芽识别引入 DIoU 边框回归损失和基于 IoU 的 K-means 聚类先验框在 1100 幅工业相机图像上做到平均精度 98.2%、F1 值 94.9%GPU 加速后检测速度 112 帧/s。它适合做农业自动化播种、农产品视觉分选、以及想把 YOLO 系列改到小数据集上的工程师——尤其是那些被小样本 不规则目标 实时性三座山压着的场景。2. 数据集构建从 5472×3672 原图到 416×416 输入2.1 采集硬件与样本标准图像采集系统搭在摄影棚里核心是一台海康威视 MV-CE200-10GC CMOS 工业相机输出 JPG分辨率 5472×3672。棚内两侧各放一个倾斜补光灯目的是提供均匀稳定光源——这一点很关键因为后面要模拟光照不足的田间场景光源可控才能做对照。采集地点在山东潍坊安丘生姜种植基地品种安丘娃娃姜。样本选取有硬标准芽身粗壮芽长 0.52.0 cm芽粗 0.61.0 cm只保留 1 个壮芽少数情况保留 2 个。试验共 550 个姜种因为生姜两面特征不一致每面各拍一幅共 1100 幅图像。这个两面各拍的设计不是凑数而是因为种芽和姜种连接处的边界特征才是识别关键单面采集会丢信息。2.2 预处理流程让姜种永远居中姜种形状极不规则如果直接送进网络目标位置随机后期方位角计算会乱。所以预处理的目标只有一个把姜种摆到图像中心。流程是串行的对比度增强拉开芽体与背景的差异灰度化后阈值分割得到二值图查找轮廓用形态学处理 轮廓面积比较去掉杂质生成的孔洞得到只含姜种轮廓的二值图二值图与彩色图做与运算得到待分割图像提取轮廓的最小外接矩形裁出矩形区域边缘填充得到最终待处理图像。这套流程用 OpenCV 3.4.5 实现形态学处理是去孔洞的主力。常见坑是阈值选高了芽体断裂、选低了背景杂质混入实操中我一般先用 Otsu 自动阈值跑一遍看效果再决定是否手动微调。2.3 标注规范与数据集划分标注工具用 LabelImg v1.8.3输出 PASCAL VOC 格式的 xml存图像路径、宽高、通道数以及种芽标注框位置。这里有个容易忽略的细节标注范围不是只框芽尖而是种芽及其与姜种的连接处因为连接处边界特征最丰富只标芽尖会丢判别信息。数据集划分1000 幅按 80%/20% 随机分训练和验证100 幅做测试三者无重复。另外为测泛化用手机和工业相机在田间各采 150 幅工业相机那组故意用较暗补光灯模拟光照不足。提示小数据集做目标检测划分时务必保证训练/验证/测试三者图像不重叠否则精度虚高上线就翻车。2.4 输入尺寸与仿射变换YOLO v3 要求固定输入这里缩到 416×416。做法是仿射变换长边用双三次插值压到 416 像素短边按相同倍数缩放后用灰色像素填充。为什么是灰色而不是黑色因为灰色填充对卷积响应的干扰比纯黑小能减少边缘伪影。这一步在 Darknet 框架里由letterbox函数完成自己写的话注意保持长宽比别直接 resize 导致目标变形。3. 种芽识别网络改造DIoU 损失与 K-means 先验框3.1 为什么原版 YOLO v3 不够用YOLO v3 是单阶段端到端检测Darknet-53 主干提特征3 个尺度特征图13²、26²、52²各配 3 个先验框共 9 个。原版损失函数用均方误差算边框回归先验框是 COCO 数据集上聚类出来的尺寸偏大。生姜种芽是小目标且姜种形状不规则导致预测框和真实框经常出现包含关系——这时候 IoU 和 GIoU 都会退化回归效果说不清。具体说当真实框和预测框是包含关系时GIoU 里的最小外接矩形面积趋近于并集面积GIoU 几乎退化成 IoU。三种不同的包含形式 IoU 值相同但实际回归效果差很多中心点距离大的回归最差中心点重合的回归最好。种芽位置直接决定后续抓取和调向这个误差不能忍。3.2 DIoU 边框回归损失DIoU 的思路是在 IoU 基础上加一个惩罚项直接度量真实框和预测框中心点的距离DIoU IoU - ρ²(gt, dr) / c²其中 gt 和 dr 分别是真实框和预测框中心点ρ 是两点欧氏距离c 是最小外接矩形对角线长度。这样即使两框是包含或不相交关系DIoU 也能推着预测框往真实框中心靠收敛更快。改造后的损失函数只含边界回归损失和置信度损失因为只识别种芽一个类没有分类损失Loss λcoord · ΣΣ 1ij^obj · (1 - IoU ρ²(gt,dr)/c²) λnoobj · ΣΣ 1ij^noobj · BCE(Ci, Ĉi) ΣΣ 1ij^obj · BCE(Ci, Ĉi)λcoord 和 λnoobj 是惩罚系数BCE 是二元交叉熵。注意原版用均方误差算置信度这里换成了 BCE对置信度这种 0/1 目标更合适。3.3 基于 IoU 的 K-means 聚类先验框原版 9 个先验框是 COCO 上聚出来的直接拿来用会拖慢收敛甚至陷入局部最优。这里用基于 IoU 的度量距离重新聚类目标函数是最小化标注框与聚类中心的距离。k 从 2 试到 12画 k 与平均 IoU 的关系曲线按肘部法则选 k9。但直接聚类出来的框尺寸太集中体现不出多尺度输出的优势。所以做线性尺度缩放把宽高拉伸开Wt W1 (W9 - W1) · (t-1) / 8 Ht Ht · Wt / Wtm 和 n 是缩放系数取 0.5 和 1.5。最终 9 个先验框宽高为(13,10)、(40,25)、(29,25)、(22,26)、(45,37)、(38,41)、(66,51)、(47,60)、(85,73)。这组数直接拿去初始化 YOLO v3 的 anchor能明显减少先验框带来的误差。3.4 在线数据增强Mosaic 是主力小数据集最大的敌人是过拟合。这里用在线数据增强在图像送入模型前按概率随机做色调、饱和度、明度增强再做旋转、平移、缩放、剪切最后上 Mosaic。Mosaic 和 CutMix 的区别CutMix 拼 2 张图Mosaic 拼 4 张。4 张图随机裁剪后拼成一张在不引入非信息像素的前提下极大丰富了检测背景而且做批归一化时一次能算 4 张图的信息。在线增强不增加图像数量但通过增加迭代次数间接丰富了数据量。3.5 训练超参与迁移学习训练用 SGDbatch size 16动量 0.95权值衰减 0.0005初始学习率 0.01。学习率更新用余弦退火lr lr0 · (1 cos(π · Tcur / Ti)) / 2 · y ...迁移学习用 ImageNet 预训练的 Darknet-53取前 74 层卷积权重初始化再在生姜数据集上微调。对照实验显示相比从头训练精准率提升 2.1%平均精度提升 1%F1 提升 0.7%训练时间还少了 0.147 h。损失曲线显示训练早期损失高达 13100 轮后降到 1.6500 轮后验证集损失略微上升说明开始过拟合。所以 500 轮定为终止条件。这个验证集损失拐点即停的习惯比固定轮数靠谱得多。4. 壮芽选取与朝向判定从预测框到旋转角4.1 壮芽选取逻辑识别出种芽位置后部分姜种有多个芽。选壮芽的依据是预测框面积——只保留面积最大的那个预测框。逻辑简单粗暴但有效因为壮芽通常芽体粗壮检测框面积自然大。少数保留 2 个壮芽的情况按业务需求决定是否都保留。4.2 方位角计算以图像中心点 (208, 208) 为原点建直角坐标系0° 基线为 x 轴正向逆时针旋转到预测框中心点 A 的角度定义为方位角 α范围 0°≤α360°。计算分两步import math def calc_azimuth(cx, cy, img_center(208, 208)): dx cx - img_center[0] dy cy - img_center[1] # 注意 y 轴方向图像坐标系 y 向下 if dx 0 and dy 0: alpha math.degrees(math.atan(dy / dx)) elif dx 0: alpha math.degrees(math.atan(dy / dx)) 180 elif dx 0 and dy 0: alpha math.degrees(math.atan(dy / dx)) 360 elif dx 0 and dy 0: alpha 90 elif dx 0 and dy 0: alpha 270 else: alpha 0 return alpha % 360这段代码的关键是处理 atan 的分段dx 正负、dy 正负、以及 dx0 的边界。图像坐标系 y 轴向下和数学坐标系相反所以判断条件要按图像坐标来。算完 α 后末端执行设备抓取姜种顺时针旋转 β 角β α - 90° 南北向沟芽朝西 β α - 180° 东西向沟芽朝南具体减多少取决于沟向和农艺要求核心是让芽朝向统一。4.3 实测结果测试集上IoU 阈值 0.6 时平均精度和 F1 分别达 98.2% 和 94.9%。置信度阈值取 0.001 时预测结果最佳——这个值低得反直觉但论文解释是低阈值能保住召回率高阈值会让 F1 和平均精度迅速下降。实际部署时这个阈值要按误检容忍度调。三个典型样本左图选箭头 1 处壮芽中心点 (120,244)α202°中图仅一个芽中心点 (140,140)α135°右图选箭头 3 处中心点 (268,125)α54°。无芽生姜和芽断裂的生姜也能正确区分——左图未识别到芽中图和右图正常检测。4.4 数据集大小与增强消融数据集大小对性能影响很大100 张时 F1 只有 73.3%检测速度 40 帧/s700 张时 F1 到 95.6%速度 112 帧/s1000 张时 F1 反而略降到 94.9%。说明 700 张左右是性价比拐点再加数据收益递减。增强方法消融移除 Mosaic 后精准率从 93.9% 掉到 84.9%F1 从 94.9% 掉到 91.9%是影响最大的单项移除色调、饱和度、明度的影响依次减小。所以如果只能保留一种增强选 Mosaic。5. 避坑与排查五个真实翻车点5.1 现象训练损失降不下去验证损失早早抬头原因数据集太小或增强不够模型在训练集上死记硬背。生姜数据集只有 1000 张如果不做 Mosaic 和颜色增强300 轮左右就过拟合。解决先上 Mosaic 色调/饱和度/明度增强再开迁移学习。验证集损失连续 50 轮不降就停别硬撑到固定轮数。5.2 现象检测框位置飘壮芽选错原因先验框尺寸和种芽实际尺寸不匹配。原版 COCO 先验框偏大小目标回归不准。解决用基于 IoU 的 K-means 重新聚类k 按肘部法则选再做线性尺度缩放拉开尺寸分布。这组 9 个框直接替换原 anchor。5.3 现象光照一暗就漏检原因训练集全是摄影棚均匀光源模型没学过暗光特征。解决采集时故意用暗补光灯拍 150 张田间图加入测试训练时色调/明度增强要开足。如果部署环境光照变化大建议单独采一批暗光训练图。5.4 现象方位角算出来差 180°原因图像坐标系 y 轴向下和数学坐标系相反atan 分段判断写反了。解决按图像坐标写判断条件dx、dy 的正负组合要覆盖全dx0 和 dy0 单独处理。算完用几个已知点验证比如中心点正上方应该是 270° 还是 90°跑一遍就知道。5.5 现象置信度阈值调高后召回率暴跌原因种芽是小目标置信度普遍偏低阈值一高就把真芽滤掉了。解决论文取 0.001 是有道理的低阈值保召回。实际部署按误检容忍度调宁可多检几个再靠面积筛壮芽也别漏检。F1 值在阈值大于 0.5 后迅速下降这个拐点要盯住。6. 把模型塞进嵌入式设备验证与移植的实操习惯论文最后提到为后期将模型移植到嵌入式设备做准备这是这套方案真正的落地终点。实验室 112 帧/s 是 GTX 2080Ti 跑出来的嵌入式设备算力差一个量级直接搬过去大概率跑不动。我一般会走三步验证。第一步先做模型瘦身验证。Darknet-53 主干对种芽这种单类小目标是过量的可以换轻量主干或剪枝用 TensorRT 量化到 FP16/INT8。验证方法不是看精度掉了多少而是看召回率——种芽识别漏检比误检代价大得多召回率守住 95% 以上再谈速度。第二步把方位角计算从 Python 挪到 C 或设备端。这段逻辑不依赖深度学习框架纯几何运算移植成本低。但要注意图像坐标系和相机内参的对应关系工业相机和手机拍的分辨率不同5472×3672 vs 4096×3000 vs 4032×3024中心点坐标要按实际分辨率归一化不能硬编码 (208,208)。第三步做端到端联调。识别出壮芽方位角后末端执行设备抓取、旋转、放置这一串动作的时序要和检测帧率对齐。112 帧/s 意味着每帧 8.9 ms如果机械臂响应慢检测再快也没用。我一般会在设备端加一个环形缓冲区检测结果先入队执行机构按自己的节奏取避免丢帧。验证清单可以按这个表走验证项方法通过标准量化后精度TensorRT INT8 推理测试集召回率 ≥ 95%方位角一致性已知点回算对比误差 ≤ 2°端到端延迟从采图到执行机构动作≤ 50 ms暗光鲁棒性暗补光灯田间图漏检率 ≤ 5%有个血泪经验别在实验室调好就直接下地。田间光照、震动、灰尘都会影响相机成像我见过实验室 98% 精度到田间掉到 80% 的案例。下地前至少采 200 张真实场景图做回归测试重点看暗光和反光条件下的表现。从那以后我每次做农业视觉项目都强制走一遍实验室→暗光→田间三级验证少一级都不敢说模型能用。这套生姜种芽方案的价值不在于 98.2% 这个数字而在于它把小数据集 不规则目标 实时性三个约束下的改造路径讲清楚了——DIoU 解决包含关系回归K-means 解决先验框匹配Mosaic 解决小样本过拟合每一步都有消融数据撑着。照着复现坑基本都在第 5 章列的那五条里。希望帮到你。本文还有配套的精品资源点击获取
返回列表