ᕕ( ᐛ )ᕗ Wu555's blog

最初构想

目标检测(弃

拍摄设备

图像预处理

数据扩增

YOLOv5模型优化

输入端

YOLOv5 的输入端主要包括马赛克(Mosaic)数据增强、自适应计算锚框和自适应缩放图像三个部分。马赛克数据增强是在模型训练阶段使用的,将四张图片按照随机缩放、随机裁剪和随机排布的方式进行拼接。

去除Mosaic数据增强

引入se注意力模块需要去除这玩意才有效果,不知道原因

主干网络

模型的 Backbone 主要由 C3(改 进 后 的 BottleneckCSP)和空间金字塔池化(spatial pyramid pooling,SPP模块组成。

引入压缩和激励网络(SE,Squeeze-and-Excitation)

构建一个融入SE模块的C3,与原C3不同的是,C3SE模块的bottleneck中融入了se模块。

我的想法是希望建模特征通道之间的相互依赖关系,采用了一种全新的「特征重标定」策略,具体来说,就是通过学习全局信息的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

参考论文:1709.01507.pdf (arxiv.org)

Neck 模块

暂时未做改进

输出端

输出端采用 GIOU 函数作为边界框的损失函数,在目标检测后处理过程中,使用非极大值抑制(non maximum suppression,NMS)来对多目标框进行筛选,增强了多目标和遮挡目标的检测能力。

将GIOU函数替换为SIOU函数

鉴于GIOU没有考虑到所需真实框与预测框之间不匹配的方向。这种不足导致收敛速度较慢且效率较低,因为预测框可能在训练过程中“四处游荡”并最终产生更差的模型。所以我选用了新的损失函数 SIoU,其中考虑到所需回归之间的向量角度,重新定义了损失指标。

参考论文:[2205.12740] SIoU Loss: More Powerful Learning for Bounding Box Regression (arxiv.org)

改进后的YOLOv5网络结构

表中的 from 列表示输入来自哪一层,列中−1表示来自上一层的输出,params 列表示参数的大小,module 为子模块,arguments 表示模块参数的信息,包括输入通道数、输出通道数、卷积核大小、步长信息等。

评价指标

召回率(Recall)、精确度(Precision)、 平均精度 AP(average precision)、平均精度均值 mAP (mean average precision)。

结果与分析

YOLOv5 模型和改进 YOLOv5 模型训练过程中,均使用相同的数据集和相同的参数设置, 根据训练过程中保存的日志文件来绘制出两个模型训练 Loss 对比曲线图。