当前位置: 首页 > news >正文

YOLOv11 改进 - 采样 _ mAP 升 2:DRFDSRFD 分阶下采样,强化特征稳健性

# 前言
本文介绍了鲁棒特征下采样模块(RFD)与 YOLOv11 的结合,以解决遥感图像分析难题。RFD 包含浅层 SRFD 和深层 DRFD 两个版本,SRFD 用于替代主流骨干网络的浅层下采样层,有效提取和保留关键特征;DRFD 处理网络深层特征图,保留丰富语义信息。将现有主流主干网络的下采样层替换为 RFD 模块后,在多个公共遥感图像数据集上实验表明,在分类、检测和分割任务中性能显著提升。我们将 RFD 代码集成进 YOLOv11,替换原下采样模块,实验脚本显示其在图像分析上有良好应用前景。

文章目录: YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总-CSDN博客

专栏链接: YOLOv11改进专栏

@

目录
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
      • 1. 浅层鲁棒特征下采样(SRFD)
      • 2. 深层鲁棒特征下采样(DRFD)
  • 核心代码
  • 实验
    • 脚本

介绍

摘要

遥感(RS)图像因分辨率较低、目标较小且特征稀疏等特性,为计算机视觉(CV)领域带来了独特挑战。尽管主流主干网络在传统视觉任务中表现卓越,但其采用的卷积下采样操作往往导致遥感图像中小目标信息的严重丢失,从而影响整体性能。针对此问题,本研究提出了鲁棒特征下采样模块(Robust Feature Downsampling,RFD),通过融合多种下采样技术提取的特征图,生成具有互补特性的高鲁棒性特征表示,有效克服了传统卷积下采样的局限性,为遥感图像分析提供了更准确可靠的解决方案。

研究中,我们设计了两种RFD变体:浅层RFD(Shallow RFD,SRFD)和深层RFD(Deep RFD,DRFD),分别适用于特征提取的不同阶段,以增强特征表示的鲁棒性。通过将主流主干网络中的下采样层替换为RFD模块,并在多个公共遥感数据集上进行广泛实验验证,结果表明该方法在多种视觉任务中均取得显著性能提升。在NWPU-RESISC45分类数据集上,RFD模块无需额外预训练数据即实现了平均1.5%的性能提升,达到了当前最先进水平。此外,在DOTA目标检测数据集和iSAID实例分割数据集上,借助NWPU-RESISC45预训练,RFD模块相较基线方法实现了2%-7%的性能提升,充分证明了该模块在增强遥感视觉任务性能方面的显著价值。研究相关代码已开源于https://github.com/lwCVer/RFD。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

1. 浅层鲁棒特征下采样(SRFD)

SRFD模块用于替代主流骨干网络的浅层下采样层(例如,ResNet的stem层)。SRFD旨在从原始像素图像中有效地提取和保留关键特征,同时过滤掉冗余信息。

  • 原理:在输入图像上应用7×7卷积,步幅为1,以强化局部特征并过滤掉不必要的信息。这个过程称为特征增强层,将通道数从3增加到1/4C。
  • 下采样方法
    1. 切分-拼接下采样:将特征图切分成四个矩阵(如图所示),每个矩阵通过选择相邻像素点的方式减少特征图的尺寸,同时保留原始数据特性。然后将这些切分后的特征拼接在一起,并使用1×1卷积减小通道数。
    2. 深度卷积下采样:应用分组卷积和深度卷积进行下采样,将特征尺寸减半,同时融合局部特征信息,以提高特征融合效果并减少计算量 。

2. 深层鲁棒特征下采样(DRFD)

DRFD模块用于处理网络中更深层次的特征图,专注于保留丰富的语义信息,以避免下采样过程中丢失关键特征。

  • 原理:从SRFD改进而来,DRFD在特征提取过程的中后阶段进行处理。它采用三种下采样方法,并结合了激活函数(如GELU)来提高下采样效果:
    1. 深度卷积下采样(Dconv):对输入特征进行GELU激活并使用深度可分离卷积来减少特征尺寸。
    2. 切分-拼接下采样(Dcut):保留输入特征的原始信息。
    3. 最大池化下采样(Dmax):通过最大池化选择矩形区域内的最大值,保留重要的细节特征。
  • 最终,将这三种下采样后的特征拼接并用1×1卷积减少通道数 。

核心代码

   
class SRFD(nn.Module):def __init__(self, in_channels=3, out_channels=96):super().__init__()out_c14 = int(out_channels / 4)  # out_channels / 4out_c12 = int(out_channels / 2)  # out_channels / 2# 7x7 convolution with stride 1 for feature reinforcement, Channels from 3 to 1/4C.self.conv_init = nn.Conv2d(in_channels, out_c14, kernel_size=7, stride=1, padding=3)# original size to 2x downsampling layerself.conv_1 = nn.Conv2d(out_c14, out_c12, kernel_size=3, stride=1, padding=1, groups=out_c14)self.conv_x1 = nn.Conv2d(out_c12, out_c12, kernel_size=3, stride=2, padding=1, groups=out_c12)self.batch_norm_x1 = nn.BatchNorm2d(out_c12)self.cut_c = Cut(out_c14, out_c12)self.fusion1 = nn.Conv2d(out_channels, out_c12, kernel_size=1, stride=1)# 2x to 4x downsampling layerself.conv_2 = nn.Conv2d(out_c12, out_channels, kernel_size=3, stride=1, padding=1, groups=out_c12)self.conv_x2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=2, padding=1, groups=out_channels)self.batch_norm_x2 = nn.BatchNorm2d(out_channels)self.max_m = nn.MaxPool2d(kernel_size=2, stride=2)self.batch_norm_m = nn.BatchNorm2d(out_channels)self.cut_r = Cut(out_c12, out_channels)self.fusion2 = nn.Conv2d(out_channels * 3, out_channels, kernel_size=1, stride=1)def forward(self, x):# 7x7 convolution with stride 1 for feature reinforcement, Channels from 3 to 1/4C.x = self.conv_init(x)  # x = [B, C/4, H, W]# original size to 2x downsampling layerc = x                   # c = [B, C/4, H, W]# CutDc = self.cut_c(c)       # c = [B, C, H/2, W/2] --> [B, C/2, H/2, W/2]# ConvDx = self.conv_1(x)      # x = [B, C/4, H, W] --> [B, C/2, H/2, W/2]x = self.conv_x1(x)     # x = [B, C/2, H/2, W/2]x = self.batch_norm_x1(x)# Concat + convx = torch.cat([x, c], dim=1)    # x = [B, C, H/2, W/2]x = self.fusion1(x)     # x = [B, C, H/2, W/2] --> [B, C/2, H/2, W/2]# 2x to 4x downsampling layerr = x                   # r = [B, C/2, H/2, W/2]x = self.conv_2(x)      # x = [B, C/2, H/2, W/2] --> [B, C, H/2, W/2]m = x                   # m = [B, C, H/2, W/2]# ConvDx = self.conv_x2(x)     # x = [B, C, H/4, W/4]x = self.batch_norm_x2(x)# MaxDm = self.max_m(m)       # m = [B, C, H/4, W/4]m = self.batch_norm_m(m)# CutDr = self.cut_r(r)       # r = [B, C, H/4, W/4]# Concat + convx = torch.cat([x, r, m], dim=1)  # x = [B, C*3, H/4, W/4]x = self.fusion2(x)     # x = [B, C*3, H/4, W/4] --> [B, C, H/4, W/4]return x                # x = [B, C, H/4, W/4]# Deep feature downsampling
class DRFD(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.cut_c = Cut(in_channels=in_channels, out_channels=out_channels)self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1, groups=in_channels)self.conv_x = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=2, padding=1, groups=out_channels)self.act_x = nn.GELU()self.batch_norm_x = nn.BatchNorm2d(out_channels)self.batch_norm_m = nn.BatchNorm2d(out_channels)self.max_m = nn.MaxPool2d(kernel_size=2, stride=2)self.fusion = nn.Conv2d(3 * out_channels, out_channels, kernel_size=1, stride=1)def forward(self, x):       # input: x = [B, C, H, W]c = x                   # c = [B, C, H, W]x = self.conv(x)        # x = [B, C, H, W] --> [B, 2C, H, W]m = x                   # m = [B, 2C, H, W]# CutDc = self.cut_c(c)       # c = [B, C, H, W] --> [B, 2C, H/2, W/2]# ConvDx = self.conv_x(x)      # x = [B, 2C, H, W] --> [B, 2C, H/2, W/2]x = self.act_x(x)x = self.batch_norm_x(x)# MaxDm = self.max_m(m)       # m = [B, 2C, H/2, W/2]m = self.batch_norm_m(m)# Concat + convx = torch.cat([c, x, m], dim=1)  # x = [B, 6C, H/2, W/2]x = self.fusion(x)      # x = [B, 6C, H/2, W/2] --> [B, 2C, H/2, W/2]return x                # x = [B, 2C, H/2, W/2] 

实验

脚本

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':
#     修改为自己的配置文件地址model = YOLO('/root/ultralytics-main/ultralytics/cfg/models/11/yolov11-DRFD.yaml')
#     修改为自己的数据集地址model.train(data='/root/ultralytics-main/ultralytics/cfg/datasets/coco8.yaml',cache=False,imgsz=640,epochs=10,single_cls=False,  # 是否是单类别检测batch=8,close_mosaic=10,workers=0,optimizer='SGD',amp=True,project='runs/train',name='DRFD',)
http://www.jsqmd.com/news/413645/

相关文章:

  • 总结福州纵横美术艺考品牌特色,靠谱不,如何选购合适课程? - 工业品牌热点
  • 2026年钢筋混凝土盖板厂家推荐:广州安基水泥制品有限公司,全系盖板产品供应市政工程 - 品牌推荐官
  • 【AI编程】【Kiro】----Kiro入门到精通保姆级教程(一)----Kiro是什么
  • 2026年2月盘点上海有哪些优质的咖啡服务商 - 疯一样的风
  • 涉日投资纠纷争议解决律师哪家好,北京德和衡杜云华律师值得选吗? - 工业推荐榜
  • 2026年心理咨询服务权威推荐:郑州伟凡心理咨询,青少年/婚姻/个人心理专家全覆盖 - 品牌推荐官
  • 2026年武汉写字楼装修市场:五家高信誉服务商深度测评 - 2026年企业推荐榜
  • 2026年锅炉消音器厂家推荐:江苏倍佳节能环保设备有限公司,锅炉/排气/蒸汽/风机/管道消音器全系供应 - 品牌推荐官
  • 2026企业CRM选型全景:五大类型14款主流品牌深度对比与分析 - 毛毛鱼的夏天
  • 讲讲临汾市蛋糕西点烘焙培训学校排名,多少钱能学 - 工业品网
  • 2026年中华/市政/景观/智慧/太阳能路灯推荐:沈阳市天盈灯具制造有限公司全品类供应 - 品牌推荐官
  • 聚焦2026年1月市面上口碑好的玉米粉碎机厂家排行推荐,建筑垃圾粉碎机/小型翻堆机/传动轴粉土机,粉碎机厂家口碑推荐榜 - 品牌推荐师
  • 2026年天津公园雕塑实力厂家深度评测与采购指南 - 2026年企业推荐榜
  • 2026防雷接地优质服务商推荐指南 - 优质品牌商家
  • 2026年Q1金条机品牌综合评测与选购指南 - 2026年企业推荐榜
  • 2026泰国海外雇佣EOR服务商推荐:泰国人力资源外包服务商全景盘点 - 品牌2025
  • 2026年连云港礼品茶实力公司口碑对比与选购指南 - 2026年企业推荐榜
  • Linux 下高效管理 VS Code 进程:`kill` 与 `pkill` 的正确用法
  • 2026年第一季度空气能热泵厂商综合实力TOP5盘点与选型指南 - 2026年企业推荐榜
  • 2026年车辆计数设备厂家推荐:重庆金芯科技矿车/宽体车/土石方/隧道车计数全系解决方案 - 品牌推荐官
  • 【建议收藏】从零到一落地大模型答疑机器人!小白也能看懂的 5 阶段实战全流程
  • 别再瞎学 AI 了!看完2026 春晚不懂这个的人,肯定被职场淘汰
  • 2026年罗口套宝机生产商综合实力TOP5评选 - 2026年企业推荐榜
  • 危险环境里的“安全堡垒”:防爆控制柜制造到底有多关键?
  • 2026年二手设备出海推荐:天津爱玖库循环科技,设备出海/爱玖库二手设备商城出海全解析 - 品牌推荐官
  • 2026年Q1文玩手串可靠厂商综合评测与选购指南 - 2026年企业推荐榜
  • 2026年景德镇小吃餐饮消费趋势与优选指南 - 2026年企业推荐榜
  • 智能体综述:探索基于大型语言模型的智能体:定义、方法与前景 - 实践
  • 2026年滤芯厂家实力推荐:新乡市迈特过滤设备有限公司,全系滤芯及过滤设备专业供应 - 品牌推荐官
  • AI搜索时代避坑指南|这几家客户口碑拉满的GEO优化公司,企业闭眼冲 - 品牌测评鉴赏家