最初构想
目标检测(弃
拍摄设备
- camera: samsung Galaxy S23
- 3000X4000pixel, 12.00MP
图像预处理
- 自动定向:丢弃 EXIF 旋转并标准化像素排序。
- 调整大小:保持纵横比合适的情况下将图像剪切为640X640pixels
数据扩增
-
反转:添加水平或垂直翻转以便于让模型对方向不敏感。
-
旋转:添加 90 度旋转以便于让模型对相机方向不敏感。 此处采用了两种旋转方式:逆时针和顺时针
-
灰度处理:概率地(25%)将灰度应用于训练集的子集
-
亮度调整:为图像亮度添加可变性,以帮助模型更适应照明和相机设置的变化。 具体调整为25%+和25%-
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 对比曲线图。