【每天一篇深度学习论文】(IEEE 2024)即插即用特征增强模块FEM

目录

  • 论文介绍
    • 题目:
    • 论文地址:
  • 创新点
  • 方法
    • 整体结构
  • 即插即用模块作用
  • 消融实验结果
  • 即插即用模块代码

论文介绍

题目:

FFCA-YOLO for Small Object Detection in Remote Sensing Images

论文地址:

https://ieeexplore.ieee.org/document/10423050

创新点

  • FFCA-YOLO模型的设计:该研究提出了一种高效的小目标检测模型FFCA-YOLO,并针对有限计算资源进行了优化,适合未来的实时遥感应用。该模型相较于基准模型和一些当前最先进的模型,具备了较高的性能。
  • 轻量级、模块化设计:论文中提出了三个创新性的轻量级可插拔模块:特征增强模块(FEM)、特征融合模块(FFM)和空间上下文感知模块(SCAM)。这些模块分别提升了网络的局部区域感知、多尺度特征融合以及跨通道和空间的全局关联能力,从而增强了小目标的特征表达,并抑制了复杂背景的干扰。
  • 自建小目标数据集USOD:论文构建了一个新的小目标数据集USOD,具有99.9%以上的小目标比例,包含了低光照和阴影遮挡等复杂条件的场景,并设置了不同图像退化条件的测试集,作为遥感小目标检测的基准数据集。

方法

整体结构

FFCA-YOLO模型在YOLOv5框架基础上,增加了三个轻量级模块:特征增强模块(FEM)用于丰富局部特征信息,特征融合模块(FFM)通过改进的多尺度融合策略加权整合特征,空间上下文感知模块(SCAM)用全局池化获取通道和空间的上下文信息,从而提升小目标和背景的区分能力。此外,模型的轻量化版本L-FFCA-YOLO通过部分卷积(PConv)减少了计算复杂度,适合在资源受限的环境中实现实时检测。
在这里插入图片描述

  • 骨干网络:FFCA-YOLO选择了YOLOv5作为基础框架,但与原始YOLOv5不同的是,它只使用了四个卷积下采样操作作为特征提取的骨干网络。骨干网络的结构经过优化,旨在减少计算复杂度的同时保持较好的特征提取能力。
  • 特征增强模块(FEM):为了提高对小目标的检测能力,FEM模块通过多分支空洞卷积结构增加了特征丰富性,扩展了网络的局部感知能力,提升了对小目标的语义信息表达。

在这里插入图片描述

  • 特征融合模块(FFM):FFM模块通过改进的多尺度特征融合策略,将不同尺度的特征进行加权重组,使网络能够更有效地捕捉多尺度信息。FFM还改进了双向特征金字塔网络(BiFPN),并提出了CRC通道重加权策略,以更高效地利用多尺度特征。

在这里插入图片描述

  • 空间上下文感知模块(SCAM):SCAM模块通过全局池化操作获取空间和通道的上下文信息,用于增强网络对全局信息的建模能力。该模块利用全局平均池化(GAP)和全局最大池化(GMP)指导通道选择,提升了小目标和背景之间的区分能力。
    在这里插入图片描述
  • 轻量化版本L-FFCA-YOLO:为了进一步降低计算资源消耗,L-FFCA-YOLO在FFCA-YOLO的基础上使用部分卷积(PConv)重构了骨干网络和特征融合模块的部分结构,从而在保证精度的同时实现更快的速度和更小的参数规模。
    在这里插入图片描述

即插即用模块作用

FEM 作为一个即插即用模块:

  • 适用场景
    • 小目标检测任务,如遥感图像中的车辆、建筑等小物体检测。
    • 低分辨率或背景复杂的场景,例如低清晰度视频监控、航拍图像等。
    • 场景中小目标特征弱、易被背景干扰的情况。
  • 作用
    • 增强小目标特征:通过多分支空洞卷积结构捕捉丰富的局部特征,使得小目标的特征表达更明显。
    • 提升局部上下文信息感知:扩展感受野,帮助模型在识别小目标时考虑周围的上下文信息。
    • 抑制背景干扰:在复杂背景下提升模型区分目标与背景的能力,减少误检和漏检。

消融实验结果

在这里插入图片描述

  • 分析了特征增强模块(FEM)、特征融合模块(FFM)和空间上下文感知模块(SCAM)对模型性能的影响。
  • 消融实验结果表明,每个模块的加入都显著提高了各项评价指标,尤其是在小目标检测方面。具体来说,FEM增强了模型对复杂背景中小目标的区分能力,FFM改善了多尺度特征的融合效果,而SCAM通过全局上下文信息的建模进一步增强了小目标的特征表示。因此,这些模块的结合使FFCA-YOLO在小目标检测任务中具备更强的特征表达和背景抑制能力。

即插即用模块代码


import torch
import torch.nn as nn#论文:FFCA-YOLO for Small Object Detection in Remote Sensing Images[TGRS]
#论文地址:https://ieeexplore.ieee.org/document/10423050class FEM(nn.Module):def __init__(self, in_planes, out_planes, stride=1, scale=0.1, map_reduce=8):super(FEM, self).__init__()self.scale = scaleself.out_channels = out_planesinter_planes = in_planes // map_reduceself.branch0 = nn.Sequential(BasicConv(in_planes, 2 * inter_planes, kernel_size=1, stride=stride),BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=1, relu=False))self.branch1 = nn.Sequential(BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),BasicConv(inter_planes, (inter_planes // 2) * 3, kernel_size=(1, 3), stride=stride, padding=(0, 1)),BasicConv((inter_planes // 2) * 3, 2 * inter_planes, kernel_size=(3, 1), stride=stride, padding=(1, 0)),BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=5, dilation=5, relu=False))self.branch2 = nn.Sequential(BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),BasicConv(inter_planes, (inter_planes // 2) * 3, kernel_size=(3, 1), stride=stride, padding=(1, 0)),BasicConv((inter_planes // 2) * 3, 2 * inter_planes, kernel_size=(1, 3), stride=stride, padding=(0, 1)),BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=5, dilation=5, relu=False))self.ConvLinear = BasicConv(6 * inter_planes, out_planes, kernel_size=1, stride=1, relu=False)self.shortcut = BasicConv(in_planes, out_planes, kernel_size=1, stride=stride, relu=False)self.relu = nn.ReLU(inplace=False)def forward(self, x):x0 = self.branch0(x)x1 = self.branch1(x)x2 = self.branch2(x)out = torch.cat((x0, x1, x2), 1)out = self.ConvLinear(out)short = self.shortcut(x)out = out * self.scale + shortout = self.relu(out)return outclass BasicConv(nn.Module):def __init__(self, in_planes, out_planes, kernel_size, stride=1, padding=0, dilation=1, groups=1, relu=True,bn=True, bias=False):super(BasicConv, self).__init__()self.out_channels = out_planesself.conv = nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=padding,dilation=dilation, groups=groups, bias=bias)self.bn = nn.BatchNorm2d(out_planes, eps=1e-5, momentum=0.01, affine=True) if bn else Noneself.relu = nn.ReLU(inplace=True) if relu else Nonedef forward(self, x):x = self.conv(x)if self.bn is not None:x = self.bn(x)if self.relu is not None:x = self.relu(x)return xif __name__ == '__main__':input = torch.randn(1, 64, 128, 128)block = FEM(in_planes=64, out_planes=64)print(input.size())output = block(input)# 打印输出的形状    print(output.size())

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 Linux 』数据链路层 - ARP协议及数据链路层周边问题

文章目录 ARP协议ARP欺骗RARP协议 DNS服务ICMP协议ping 命令正向代理服务器反向代理服务器 ARP协议 博客『 Linux 』数据链路层 - MAC帧/以太网帧中提到,当数据需要再数据链路层进行无网络传输时需要封装为MAC帧,而MAC帧的报文结构如下: 帧头部分存在两个字段分别为 “目的地址…

基于Java Springboot Vue3图书管理系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue3、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#x…

Google Cloud Dataproc 计算 EOD 余额

简介 Google Cloud Dataproc 是 Google Cloud Platform (GCP) 提供的一种完全托管的 Apache Hadoop 和 Apache Spark 服务。它允许用户快速、轻松地在云中创建和管理大数据处理集群,适合需要大规模数据处理、分析和机器学习的场景,能够帮助企业更高效地…

【docker】9. 镜像操作与实战

镜像操作案例 查找镜像 docker search busybox下载镜像 docker pull busybox:1.36.0查看镜像及列表存储位置 rootLAPTOP-H2EI4I6A:~# docker images busybox REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 517b897a6a83 2 months a…

循环神经网络(RNN)简述

RNN及其变体 1、概述 (一)、概念 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出。 RNN的循环机制使模型隐层**上一时间步产生的结果, 能够作为当下时间步…

Conda 管理python开发环境

同步发布于我的网站 🚀 故事起因: 在公司使用Requests多任务并行开发时遇到了问题,使用 ProcessPoolExecutor 时不能正常发出网络请求,会卡在网络请求发不出去,但是善于用 ThreadPoolExecutor 时是可以的,纠结了很久,一…

python打包深度学习虚拟环境

今天师兄让我把环境打包发给他,我才知道可以直接打包深度学习虚拟环境,这样另一个人就不用辛辛苦苦的去装环境了,我们都知道有些论文他需要的环境很难装上。比如装Apex,装 DCN,mmcv-full 我现在把3090机子上的ppft虚拟…

vue超过三行显示省略号和查看更多按钮

1、超过3行显示省略号和更多按钮&#xff0c;不超过3行正常显示&#xff1b; html: <div class"container"><div style"display: flex;"><div class"content"><div class"text-content" ref"textContentR…

什么是换电系统?驱动新能源汽车发展的“能源驿站”

随着新能源汽车保有量上升&#xff0c;新能源汽车充换电设施需求量同步增加。由于我国土地、电力资源相对紧张&#xff0c;随着车辆保有量继续增加&#xff0c;换电模式有望成为对充电模式的良好补充&#xff0c;具备广阔的中长期发展前景。蔚来是换电领域的先行者&#xff0c;…

最小有向包围盒——2D平面

目录 介绍 主要步骤 代码 __init__.py min_bounding_rect.py min_rect.py qhull_2d.py 结果 介绍 最小有向包围盒算法广泛应用于多个领域&#xff0c;包括&#xff1a; 计算几何&#xff1a;用于分析点集的边界特征。图形学&#xff1a;用于碰撞检测和物体包围。数据…

windows平台使用C#创建系统服务

使用 C# 在 Windows 平台创建和管理系统服务 在 Windows 平台上&#xff0c;系统服务&#xff08;Windows Service&#xff09;是一种运行在后台、无需用户交互的应用程序。系统服务广泛应用于长期任务处理、网络监听、后台调度等场景。本文将详细介绍如何使用 C# 创建一个 Win…

【C++笔记】位图和布隆过滤器

【C笔记】位图和布隆过滤器 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】位图和布隆过滤器前言一. 位图1.1 位图相关面试题1.2 C库中的位图1.3位图优缺点1.4位图相关考察题目 二.布隆过滤器2.1 什么是布隆过滤器…

小迪安全第四十二天笔记 简单的mysql注入 mysql的基础知识 用户管理数据库模式 mysql 写入与读取 跨库查询

前言 之前的安全开发我们学习了 php联动数据库的模式 &#xff0c;这个模式是现在常用的模式 这一节来学习 如何 进行数据库的注入和数据库相关知识 1、了解数据库的结构 我们使用 navicate连接数据库之后看一下 一共四层结构 库 》表》字段》数据 这个层级关系…

如何估算自然对流传热系数

介绍 一般来说&#xff0c;对流可以定义为通过加热流体&#xff08;例如空气或水&#xff09;的运动来传递热量的过程。 自然对流&#xff08;对流的一种特定类型&#xff09;可以定义为流体在重力作用下由于较热因此密度较小的物质上升&#xff0c;而较冷且密度较大的物质下…

阿里云服务器(centos7.6)部署前后端分离项目(MAC环境)

Jdk17安装部署 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 选择自己需要的jdk版本进行下载。 通过mac终端scp命令上传下载好的jdk17到服务器的/usr/local目录下 scp -r Downloads/jdk-17.0.13_linux-x64_bin.tar.gz 用户名服务器ip地址:/us…

ipad项目 蓝湖宽度

ipad项目 横屏状态时 蓝湖宽度设置930px media screen and (orientation: portrait) {/* 竖屏时的样式 */ } media screen and (orientation: landscape) {/* 默认是 横屏时的样式 */ }

【Linux——实现一个简易shell】

黑暗中的我们都没有说话&#xff0c;你只想回家&#xff0c;不想你回家............................................................... 文章目录 前言 一、【shell工作过程】 二、【命令行参数】 2.1、【获取命令行参数】 1、【输出命令行提示符】 2、【输入命令行参数】 2…

理解Linux的select、poll 和 epoll:从原理到应用场景

I/O 多路复用并不是什么新东西&#xff0c;select 早在 1983 年就出现了&#xff0c;poll 在 1997 年&#xff0c;epoll 是 2002 年的产物。面试题总爱问“多路复用多厉害&#xff1f;”其实它就是把轮询的锅甩给了操作系统&#xff0c;而操作系统不过是用 CPU 指令帮你完成事件…

阅读方法论

选择固有缺陷,选项是对比出来的

关于函数式接口和编程的解析和案例实战

文章目录 匿名内部类“匿名”在哪里 函数式编程lambda表达式的条件Supplier使用示例 ConsumeracceptandThen使用场景 FunctionalBiFunctionalTriFunctional 匿名内部类 匿名内部类的学习和使用是实现lambda表达式和函数式编程的基础。是想一下&#xff0c;我们在使用接口中的方…