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. 多模态…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
