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

news2024/9/20 8:54:37

小目标检测——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等等)。如果想要达到最好的效果,应该多花费一些功夫在网络模型的改进上面,能够找到最适合自己的目标检测网络模型。因为目标的种类繁多,所以对于不同的目标肯定有不同的网络模型,所以我认为直接改进网络模型是最有效的办法,能够大大减少工作量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【matlab】生成 GIF 的函数(已封装可直接调用)

文章目录 前言一、函数输入与输出二、函数代码三、例程(可直接运行)参考文献 前言 生成 gif 图片时遇到的问题,为了后续调用方便,封装为函数 一、函数输入与输出 输入: cell_figure: cell 数组,数组元素是…

Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用增强版

前言 之前使用Chainlit集成LlamaIndex并使用通义千问大语言模型的API接口,实现一个基于文档文档的网页对话应用。 可以点击我的上一篇文章《Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用》 查看。 本次针对上一次的代码功能进一步的完善…

Cursor与Copilot:编程界的双雄对决

引子 在技术快速发展的当下,编程几乎成为了现代社会的基础能力。Cursor与Copilot作为当前备受瞩目的编程助手,各自展现出了独特的魅力。它们不仅改变了程序员的工作方式,更是提升了代码编写的效率,成为了编程界的“双雄”。 Curs…

软件安全、逆向分析、加密与解密--crackme2详解

本次使用到的软件有:PEiD、IDA、X32dbg 刚学逆向不久,可能有些地方会有错误,欢迎各位大佬指导 执行 运行程序 点击About 点击确定,输入如图数据 点击try Now 点击确定,回到主界面 点击Exit,退出 查壳&a…

Docker:SpringBoot项目创建Docker镜像并推送到阿里云容器镜像仓库

0. 准备工作 os:macos 15.0 jdk:1.8 docker:26.0.0 1. 阿里云容器镜像服务创建实例 创建个人版 个人实例创建成功 个人镜像加速器地址 2. 安装Docker Desktop Docker Desktop是Docker的一个集成工具,非必须,过程…

指纹与指甲检测系统源码分享

指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

这个时代唯一“不变“的又是{变}

这个时代唯一不变的就是“变”,所以每个人都得有规划意识,首先要对自己的价值有清晰的认知,你核心卖点是什么。第二,你取得的成绩是通过平台成就的还是通过自身努力取得的,很多人在一家平台待久了之后,身上…

在Unity UI中实现UILineRenderer组件绘制线条

背景介绍 在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件)&a…

26. 构建一个矩形平面几何体

定义矩形几何体顶点坐标 一个矩形平面,可以至少通过两个三角形拼接而成。而且两个三角形有两个顶点的坐标是重合的。 注意三角形的正反面问题:保证矩形平面两个三角形的正面是一样的,也就是从一个方向观察,两个三角形都是逆时针…

Docker 消息队列RabbitMQ 安装延迟消息插件

介绍 RabbitMQ的官方推出了一个插件,原生支持延迟消息功能。该插件的原理是设计了一种支持延迟消息功能的交换机。当消息投递到交换机后可以暂存一定时间,到期后再投递到队列。 查看版本号 docker exec rabbit名字 rabbitmqctl version根据版本下载 插…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j:neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

一键更换软件源的工具——chsrc

前言 经常用pip,ubuntu的apt,或者centos的yum等包下载工具的人不可避免的一件事就是——“更换软件源”,因为以上三个包下载工具的软件源一般都是默认为国外的官方网站,由于国情问题,下载速度就会非常慢,所…

华为OD机试 - 最大矩阵和 - 卡德恩算法(动态规划)(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

线性代数(宋浩版)(4)

2.4逆矩阵 (不要把矩阵放在分母上) 方阵的行列式 性质1 性质2 性质3 伴随矩阵(只有方阵才有) 1.求出所有元素的代数余子式(矩阵先求行列式)。 2.按行求的代数余子式按列放。 定理1(重要&…

MySQL篇(窗口函数/公用表达式(CTE))

目录 讲解一:窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数:求和 min函数 :最小值 1.2. 排序函数 1.3. 跨行函数…

ECMAScript与JavaScript的区别

目录 一、什么是ECMAScript? 二、什么是JavaScript? 三、ECMAScript与JavaScript的关系 3.1 ECMAScript规范版本 3.2 JavaScript的实现 四、ECMAScript与JavaScript的主要区别 4.1 规范与实现的区别 4.2 版本更新 4.3 环境支持 4.4 语言特性 五…

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…

【SpringCloud】服务注册与发现 - Eureka

目录 服务注册/服务发现-Eureka背景问题描述解决思路什么是注册中心CAP 理论常见的注册中心 Eureka 介绍搭建Eureka Server创建Eureka-server 子模块引入eureka-server依赖项目构建插件完善启动类编写配置文件启动服务 服务注册引入eureka-client依赖完善配置文件启动服务 服务…

如图,从左到右在每个小格子中填入一个整数,使得其中任意三个相邻格子中所填整数之和都相等,若前m个格子中所填整数之和是2024,则m的值为?

1、如果图: 任务三个相邻的格子中所填整数之和都相等,则可以列个几个式子: 9ab abcbc(-5)c(-5)1 则可以求出: a-5,b1,c9 2、前m个格子中所填数之和是2024,则表示9abc(-5)1...第m个格子2024 …

LaTex2024 下载安装运行HelloWorld—全流程笔记

LaTex安装教程🚀 这是读博之后写的第一篇文章,来到新课题组之后,新课题组主要是用Latex,在之前的课题组,还是比较常用world,所以就研究了一下Latex的下载和安装,虽然网上已经有了不少教程&#…