YOLOv8目标检测模型——遥感小目标检测经验分享

小目标检测------ YOLOV8

一、引言

  1. 背景介绍

(1)目标检测的重要性

目标检测在许多领域都具有极其重要的作用。在自动驾驶中,目标检测能够识别道路上的障碍物和行人,确保行车安全。在视频监控中,目标检测能够实时发现异常情况,提高安全防范能力。在工业自动化中,目标检测能够准确识别物料和产品,提高生产效率。在医疗影像中,目标检测能够辅助医生诊断疾病,提高诊断准确率。在各个领域都发挥着不可或缺的作用。

(2)深度学习在目标检测领域的应用

深度学习在目标检测领域应用广泛,通过训练深度神经网络识别图像中的目标并定位其位置。卷积神经网络(CNN)是目标检测的基础,通过滑动窗口和候选区域等方法提取特征,结合分类器和回归器实现目标检测和定位。

(3)YOLOv8模型介绍

Yolov8是一种目标检测算法,它通过独特的双路径预测和紧密的连接的卷积网络进行目标检测。该算法采用了轻量级网络结构,同时保持了较高的性能,因此具有高效的特点。此外,Yolov8还采用了级联和金字塔的思想,使算法能够处理不同大小的目标。

在Yolov8中,目标检测任务被分解为两个独立的子任务,即分类和定位。每个子任务都有自己的网络路径,这使得算法能够更好地处理不同大小的目标。在网络结构方面,Yolov8采用了轻量级网络结构,如MobileNetV2等,使得它能够在移动设备上运行得更加流畅。

  1. 实验目的

(1)探究YOLOv8模型在自定义数据集上的性能

(2)通过模型改进、数据增强和迁移学习提高模型性能

二、实验环境与数据集

  1. 实验环境配置

(1)硬件配置

Linux

GeForce RTX 2080 Ti

  1. 软件配置

Pycharm 2018 Community

  1. 自定义数据集介绍
  1. 数据集来源

比赛数据集:第五届全国高校计算机能力挑战赛-人工智能

  1. 数据集规模

决赛数据集:

大小:2.1 GB

类别:2

检测类型:遥感图像 舰船、飞机

  1. 数据集预处理

对原有标签进行数据集转换。

三、模型改进方法

  1. BiFNP-p2

(1)简介

BiFPN是一种用于目标检测和语义分割的神经网络架构,旨在改善FPN的性能。 以下是BiFPN的关键特点和工作原理:①双向连接:BiFPN引入了双向连接,允许信息在不同分辨率级别之间双向传播。②自适应特征调整:BiFPN采用自适应的特征调整机制,可以学习权重,以调整不同层级的特征以更好地匹配不同任务的需求。③模块化设计:BiFPN的模块化设计使其易于嵌入到各种深度神经网络架构中。④高效性:BiFPN被设计为高效的模型,适用于嵌入式设备和实际部署。⑤提高性能:BiFPN的引入通常能够显著提高对象检测和分割任务的性能。

(2)改进YOLOv8模型,包括更换BiFPN和融合yolov8-P2小目标检测层,以下是更改后的配置文件

  1. CA注意力机制

(1)简介

CA(Coordinate Attention)注意力机制用于加强深度学习模型对输入数据的空间结构理解。

CA注意力机制的核心思想是引入坐标信息,以便模型可以更好地理解不同位置之间的关系。具体流程如下:①输入特征②全局平均池化③合并宽高特征④卷积+标准化+激活函数⑤再次分开⑥转置⑦通道调整和Sigmoid - 应用注意力

(2)YOLOv8添加CA注意力机制

CA注意力机制代码包括h_sigmoid、h_swish、CoordAtt等组件,用于处理空间结构信息。

  • 在conv.py文件中添加CA注意力机制
  • 注册和引用CA注意力机制
  • 更改yaml配置文件
  1. SCConv
  1. 简介

SCConv(Spatial and Channel Reconstruction Convolution)是一种用于卷积神经网络(CNN)的新型卷积模块,旨在减少特征图中的冗余信息,从而提高模型的效率和性能。它通过空间重建单元(SRU)和通道重建单元(CRU)来抑制空间和通道上的冗余信息,可轻松替代标准卷积层,降低模型参数和计算复杂度,同时保持或提高模型性能。

  1. YOLOv8 C2f融合SCConv模块
  • 加入融合ScConv的C2f模块,在ultralytics包中的nn包的modules中的block.py文件中添加改进模块。

  • 注册和引用融合ScConv的C2f模块
  • 更改后的配置文件

四、数据增强

  1. 数据增强方法
  • 随机丢弃 (Dropout)
  • 锐化 (Sharpen)
  • 仿射变换 (Affine)
  • 亮度调整 (AddToBrightness)
  • 色调调整 (AddToHue)
  • 水平翻转 (Fliplr)
  1. 数据增强效果

通过坐标转换、标签处理和图像增强,有效的扩充了数据集,将原来的1500个图像和标签文件,扩充到了9000个,目的是①增加训练数据数量②提高模型性能③增强模型鲁棒性。

五、迁移学习

  1. 迁移学习方法

(1)预训练模型与训练模型的构建

  • 实现思路

使用yolov8x.yaml的模型配置作为教师模型,学生模型采用yolov8n.yaml

  • 预训练模型参数

模型结构:268 layers

参数数量:68125494 parameters

计算性能:257.4 GFLOPs

  • 训练模型参数

模型结构:400 layers

参数数量:1336652 parameters

计算性能:13.2 GFLOPs

六、实验结果与分析

  1. 超参数设置
  • Epochs=500
  • Device=GPU
  • Imgsz=640
  • Batch=16
  1. 实验结果展示

(1)改进前后的模型性能对比

  1. 原始模型

模型结构:168 layers

参数数量:3006038 parameters

计算性能:8.1 GFLOPs

训练时间:0.209小时

最终模型大小:6.3 MB

  1. BiFNP-p2

模型结构:215 layers

参数数量:2225880 parameters

计算性能:17.2 GFLOPs

训练时间:0.181小时

最终模型大小:4.9 MB

  1. CA注意力机制

模型结构:198 layers

参数数量:3017758 parameters

计算性能:8.1 GFLOPs

训练时间:0.118小时

最终模型大小:6.3MB

  1. SCConv

模型结构:222 layers

参数数量:2813846 parameters

计算性能:7.5 GFLOPs

训练时间:0.144小时

最终模型大小:5.9 MB

在综合模型大小、速度和精度之下,最终了选择BiFNP-p2改进后的网络模型,作为最优的网络模型。

  1. 数据增强对模型性能的影响------以原始模型为例

数据增强前:

数据增强后:

可以看出使用数据增强技术之后,对模型的性能有了较为明显的提升,mAP50从0.927,提升到了0.938;mAP50-95从0.65提升到了0.669。因此,根据检测类型,选择合适的网络模型配合数据增强技术可以有效的提高模型的性能。

  1. 迁移学习对模型性能的提升------以原始模型为例

模型结构:168 layers

参数数量:3006038 parameters

计算性能:8.1 GFLOPs

训练时间:0.109小时

最终模型大小:6.3 MB

由此可见,迁移学习也对模型性能有较大的提升。

  1. 结果分析讨论

在上面进行的改进中,可以看到,不同的检测类别有不同的网络模型,通过找到合适的网络模型可以有效的提升模型在目标检测中的性能;同时,在样本量不足的情况下,数据增强技术也能够有效地提升模型的性能;最后,迁移学习中的预训练模型能够很好地辅助模型进行训练,从能提高模型的性能。

通过结合三种方法,最终能够得到一个性能相对较好的模型。只不过,对于不同的检测类别来说,探索的时间大不相同。在本例的实验中,由于是遥感图像小目标检测,难度相对来说较大,并且有一定的概率问题,所以时间较长(11天),并且还没有达到最好的效果。

当然上面提到的改进方法,只是选取的一部分,在实验中还有很多没有成功的案例(例如ghostNet等等)。如果想要达到最好的效果,应该多花费一些功夫在网络模型的改进上面,能够找到最适合自己的目标检测网络模型。因为目标的种类繁多,所以对于不同的目标肯定有不同的网络模型,所以我认为直接改进网络模型是最有效的办法,能够大大减少工作量。

相关推荐
岑梓铭12 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
边缘计算社区16 分钟前
首个!艾灵参编的工业边缘计算国家标准正式发布
大数据·人工智能·边缘计算
游客52026 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主27 分钟前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习
Eric.Lee202129 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
KeyPan30 分钟前
【IMU:视觉惯性SLAM系统】
计算机视觉
Dontla34 分钟前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
深圳南柯电子43 分钟前
深圳南柯电子|电子设备EMC测试整改:常见问题与解决方案
人工智能
Kai HVZ44 分钟前
《OpenCV计算机视觉》--介绍及基础操作
人工智能·opencv·计算机视觉
biter00881 小时前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习