小目标检测——YOLOV8
一、引言
- 背景介绍
(1)目标检测的重要性
目标检测在许多领域都具有极其重要的作用。在自动驾驶中,目标检测能够识别道路上的障碍物和行人,确保行车安全。在视频监控中,目标检测能够实时发现异常情况,提高安全防范能力。在工业自动化中,目标检测能够准确识别物料和产品,提高生产效率。在医疗影像中,目标检测能够辅助医生诊断疾病,提高诊断准确率。在各个领域都发挥着不可或缺的作用。
(2)深度学习在目标检测领域的应用
深度学习在目标检测领域应用广泛,通过训练深度神经网络识别图像中的目标并定位其位置。卷积神经网络(CNN)是目标检测的基础,通过滑动窗口和候选区域等方法提取特征,结合分类器和回归器实现目标检测和定位。
(3)YOLOv8模型介绍
Yolov8是一种目标检测算法,它通过独特的双路径预测和紧密的连接的卷积网络进行目标检测。该算法采用了轻量级网络结构,同时保持了较高的性能,因此具有高效的特点。此外,Yolov8还采用了级联和金字塔的思想,使算法能够处理不同大小的目标。
在Yolov8中,目标检测任务被分解为两个独立的子任务,即分类和定位。每个子任务都有自己的网络路径,这使得算法能够更好地处理不同大小的目标。在网络结构方面,Yolov8采用了轻量级网络结构,如MobileNetV2等,使得它能够在移动设备上运行得更加流畅。
- 实验目的
(1)探究YOLOv8模型在自定义数据集上的性能
(2)通过模型改进、数据增强和迁移学习提高模型性能
二、实验环境与数据集
- 实验环境配置
(1)硬件配置
Linux
GeForce RTX 2080 Ti
- 软件配置
Pycharm 2018 Community
- 自定义数据集介绍
- 数据集来源
比赛数据集:第五届全国高校计算机能力挑战赛-人工智能
- 数据集规模
决赛数据集:
大小:2.1 GB
类别:2
检测类型:遥感图像 舰船、飞机
- 数据集预处理
对原有标签进行数据集转换。
三、模型改进方法
- BiFNP-p2
(1)简介
BiFPN是一种用于目标检测和语义分割的神经网络架构,旨在改善FPN的性能。 以下是BiFPN的关键特点和工作原理:①双向连接:BiFPN引入了双向连接,允许信息在不同分辨率级别之间双向传播。②自适应特征调整:BiFPN采用自适应的特征调整机制,可以学习权重,以调整不同层级的特征以更好地匹配不同任务的需求。③模块化设计:BiFPN的模块化设计使其易于嵌入到各种深度神经网络架构中。④高效性:BiFPN被设计为高效的模型,适用于嵌入式设备和实际部署。⑤提高性能:BiFPN的引入通常能够显著提高对象检测和分割任务的性能。
(2)改进YOLOv8模型,包括更换BiFPN和融合yolov8-P2小目标检测层,以下是更改后的配置文件
- CA注意力机制
(1)简介
CA(Coordinate Attention)注意力机制用于加强深度学习模型对输入数据的空间结构理解。
CA注意力机制的核心思想是引入坐标信息,以便模型可以更好地理解不同位置之间的关系。具体流程如下:①输入特征②全局平均池化③合并宽高特征④卷积+标准化+激活函数⑤再次分开⑥转置⑦通道调整和Sigmoid - 应用注意力
(2)YOLOv8添加CA注意力机制
CA注意力机制代码包括h_sigmoid、h_swish、CoordAtt等组件,用于处理空间结构信息。
- 在conv.py文件中添加CA注意力机制
- 注册和引用CA注意力机制
- 更改yaml配置文件
- SCConv
- 简介
SCConv(Spatial and Channel Reconstruction Convolution)是一种用于卷积神经网络(CNN)的新型卷积模块,旨在减少特征图中的冗余信息,从而提高模型的效率和性能。它通过空间重建单元(SRU)和通道重建单元(CRU)来抑制空间和通道上的冗余信息,可轻松替代标准卷积层,降低模型参数和计算复杂度,同时保持或提高模型性能。
- YOLOv8 C2f融合SCConv模块
- 加入融合ScConv的C2f模块,在ultralytics包中的nn包的modules中的block.py文件中添加改进模块。
- 注册和引用融合ScConv的C2f模块
- 更改后的配置文件
四、数据增强
- 数据增强方法
- 随机丢弃 (Dropout)
- 锐化 (Sharpen)
- 仿射变换 (Affine)
- 亮度调整 (AddToBrightness)
- 色调调整 (AddToHue)
- 水平翻转 (Fliplr)
- 数据增强效果
通过坐标转换、标签处理和图像增强,有效的扩充了数据集,将原来的1500个图像和标签文件,扩充到了9000个,目的是①增加训练数据数量②提高模型性能③增强模型鲁棒性。
五、迁移学习
- 迁移学习方法
(1)预训练模型与训练模型的构建
- 实现思路
使用yolov8x.yaml的模型配置作为教师模型,学生模型采用yolov8n.yaml
- 预训练模型参数
模型结构:268 layers
参数数量:68125494 parameters
计算性能:257.4 GFLOPs
- 训练模型参数
模型结构:400 layers
参数数量:1336652 parameters
计算性能:13.2 GFLOPs
六、实验结果与分析
- 超参数设置
- Epochs=500
- Device=GPU
- Imgsz=640
- Batch=16
- 实验结果展示
(1)改进前后的模型性能对比
- 原始模型
模型结构:168 layers
参数数量:3006038 parameters
计算性能:8.1 GFLOPs
训练时间:0.209小时
最终模型大小:6.3 MB
- BiFNP-p2
模型结构:215 layers
参数数量:2225880 parameters
计算性能:17.2 GFLOPs
训练时间:0.181小时
最终模型大小:4.9 MB
- CA注意力机制
模型结构:198 layers
参数数量:3017758 parameters
计算性能:8.1 GFLOPs
训练时间:0.118小时
最终模型大小:6.3MB
- SCConv
模型结构:222 layers
参数数量:2813846 parameters
计算性能:7.5 GFLOPs
训练时间:0.144小时
最终模型大小:5.9 MB
在综合模型大小、速度和精度之下,最终了选择BiFNP-p2改进后的网络模型,作为最优的网络模型。
- 数据增强对模型性能的影响——以原始模型为例
数据增强前:
数据增强后:
可以看出使用数据增强技术之后,对模型的性能有了较为明显的提升,mAP50从0.927,提升到了0.938;mAP50-95从0.65提升到了0.669。因此,根据检测类型,选择合适的网络模型配合数据增强技术可以有效的提高模型的性能。
- 迁移学习对模型性能的提升——以原始模型为例
模型结构:168 layers
参数数量:3006038 parameters
计算性能:8.1 GFLOPs
训练时间:0.109小时
最终模型大小:6.3 MB
由此可见,迁移学习也对模型性能有较大的提升。
- 结果分析讨论
在上面进行的改进中,可以看到,不同的检测类别有不同的网络模型,通过找到合适的网络模型可以有效的提升模型在目标检测中的性能;同时,在样本量不足的情况下,数据增强技术也能够有效地提升模型的性能;最后,迁移学习中的预训练模型能够很好地辅助模型进行训练,从能提高模型的性能。
通过结合三种方法,最终能够得到一个性能相对较好的模型。只不过,对于不同的检测类别来说,探索的时间大不相同。在本例的实验中,由于是遥感图像小目标检测,难度相对来说较大,并且有一定的概率问题,所以时间较长(11天),并且还没有达到最好的效果。
当然上面提到的改进方法,只是选取的一部分,在实验中还有很多没有成功的案例(例如ghostNet等等)。如果想要达到最好的效果,应该多花费一些功夫在网络模型的改进上面,能够找到最适合自己的目标检测网络模型。因为目标的种类繁多,所以对于不同的目标肯定有不同的网络模型,所以我认为直接改进网络模型是最有效的办法,能够大大减少工作量。