YOLOv8目标检测模型——遥感小目标检测经验分享
小目标检测——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等等)。如果想要达到最好的效果,应该多花费一些功夫在网络模型的改进上面,能够找到最适合自己的目标检测网络模型。因为目标的种类繁多,所以对于不同的目标肯定有不同的网络模型,所以我认为直接改进网络模型是最有效的办法,能够大大减少工作量。
相关文章:
YOLOv8目标检测模型——遥感小目标检测经验分享
小目标检测——YOLOV8 一、引言 背景介绍 (1)目标检测的重要性 目标检测在许多领域都具有极其重要的作用。在自动驾驶中,目标检测能够识别道路上的障碍物和行人,确保行车安全。在视频监控中,目标检测能够实时发现异…...
构建响应式 Web 应用:Vue.js 基础指南
构建响应式 Web 应用:Vue.js 基础指南 一 . Vue 的介绍1.1 介绍1.2 好处1.3 特点 二 . Vue 的快速入门2.1 案例 1 : 快速搭建 Vue 的运行环境 , 在 div 视图中获取 Vue 中的数据2.2 案例 2 : 点击按钮执行 vue 中的函数输出 vue 中 data 的数据2.3 小结 三 . Vue 常…...
计算机毕业设计选题推荐-在线投票系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
【C/C++】程序的构建(编译)过程概述
🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:C_小米里的大麦的博客-CSDN博客 🎁代码托管:C: 探索C编程精髓,打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、预处理(Preprocessi…...
ElasticSearch-2-核心语法集群高可用实战-Week2
ES批量操作 1.批量获取文档数据 这里多个文档是指,批量操作多个文档,搜索查询文档将在之后的章节讲解 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式:GET 请求地址:_mget 功能说明 &#…...
STM的CAN通信学习
显性电平:0 隐性电平:1 一、帧结构 1.帧类型 1)数据帧:发送设备主动发送数据(广播式) 2)请求帧:接收设备主动请求数据(请求式) 2.帧结构 1ÿ…...
【高等数学学习记录】函数
【高等数学&学习记录】函数 从事测绘工作多年,深刻感受到基础知识的重要及自身在这方面的短板。 为此,打算重温测绘工作所需基础知识。练好基本功,为测绘工作赋能。 1 知识点 1.1 函数 设数集 D ⊂ R D\subset R D⊂R,称映射…...
【springboot过ingress后无法获取X-Forwarded-For头信息】
springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18,有个新需求是校验X-Forwarded-For头的所有来源ip合法性,线上环境出现取不到X-Forwarded-For头的问…...
表格标记<table>
一.表格标记、 1table:表格标记 2.caption:表单标题标记 3.tr:表格行标记 4.td:表格中数据单元格标记 5.th:标题单元格 table标记是表格中最外层标记,tr表示表格中的行标记,一对<tr>表示表格中的一行,在<tr>中可…...
Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知
Rust练手项目,写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示,如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…...
【隐私计算】Paillier半同态加密算法
一、何为同态加密(HE)? HE是一种特殊的加密方法,它允许直接对加密数据执行计算,如加法和乘法,而计算过程不会泄露原文的任何信息。计算的结果仍然是加密的,拥有密钥的用户对处理过的密文数据进…...
判断数字的奇偶[中秋快乐~]
题目描述 给定一个整数 n,编写程序判断数字 n 是奇数还是偶数,是奇数则输出 “odd”,偶数则输出 “even”。 输入格式 一行,一个整数 n。 输出格式 一行,如果 n 是奇数则输出 “odd”; 如果 nn 是偶数则输出 “even”。 样例…...
文件操作及重定向详解
1、linux下一切皆文件: 在linux中,一切皆文件是一个重要的概念,用于描述linux操作系统中所有资源和设备都以文件的形式进行访问和处理。 这个概念可以理解为,无论是硬盘上的文件、网卡、设备、进程等,都被抽象为文件的形式存在。在linux系统中,通…...
鸿蒙next json解析 ArkUI 带你玩转 arkts json解析
前言导读 相信很多同学再开发过程中都会遇到json解析的处理,不管是跟服务端交互 或者是读取本地的json 都会遇到json解析 那么正好今天有空正好讲一下鸿蒙next里面的json解析 JSON解析与生成 本模块提供了将JSON文本转换为JSON对应对象或值,以及将对象…...
东土科技加码芯片业务投资,携手神经元共建新型工业生态
为抢抓国产化芯片发展的重大机遇,东土科技决定进一步加大对神经元信息技术(成都)有限公司的投资。这一战略布局有利于东土科技鸿道Intewell工业操作系统与神经元公司芯片的深度协同,推动实现“信息技术、网络技术、控制技术、数字…...
指纹与指甲检测系统源码分享
指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…...
C++3D迷宫
目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好,我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(char strmaze[5][5][5]) {cout << "-----" << endl;int i 0;int ia 0…...
跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
在数字化时代,地理信息系统(GIS)技术正以其独特的空间分析和可视化能力,为游戏产业带来革命性的变革。《黑神话:悟空》作为中国首款3A级别的动作角色扮演游戏,不仅在游戏设计和技术上取得了突破,…...
【计网】从零开始使用TCP进行socket编程 --- 客户端与服务端的通信实现
阵雨后放晴的天空中, 出现的彩虹很快便会消失。 而人心中的彩虹却永不会消失。 --- 太宰治 《斜阳》--- 从零开始使用TCP进行socket编程 1 TCP与UDP2 TCP服务器类2.1 TCP基础知识2.2 整体框架设计2.3 初始化接口2.4 循环接收接口与服务接口 3 服务端与客户端测试…...
Imagen:重塑图像生成领域的革命性突破
目录 引言 一、Imagen模型的技术原理 1. 模型概述 2. 工作流程 3. 技术创新 二、Imagen模型的应用实例 1. 创意设计 2. 虚拟角色制作 3. 概念可视化 三、Imagen模型的优势与挑战 1. 优势 2. 挑战 四、Imagen模型的未来发展方向 1. 图像生成质量的提升 2. 多模态…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
