YOLOv11最新创新改进系列:YOLOv11多模态(RGB+IR)融合BoTNet,保留CNN在特征提取、平移不变性等方面的优势,同时注入Transformer强大的全局建模能力!

购买相关资料后畅享一对一答疑

畅享超多免费持续更新且可大幅度提升文章档次的纯干货工具!

数据集准备

我给大家配置了默认的M3FD.yaml,大家可以直接在代码中使用,然后按照自己的数据进行简单的替换就行!非常简单!

# Ultralytics YOLO , AGPL-3.0 license
# M3FD dataset
# Example usage: yolo train data=M3FD.yaml

# Train/val/test sets as dir: path/to/imgs
path:  # dataset root dir
train: images/train  # train visible images (relative to 'path')
train2: imagesTR/train  # train infrared images (relative to 'path')
val: images/val  # val visible images (relative to 'path')
val2: imagesIR/val  # val infrared images (relative to 'path')
test:   # test images (optional)

#image_weights: True
nc: 6


# Classes
names:
  0: People
  1: Car
  2: Bus
  3: Motorcycle
  4: Lamp
  5: Truck

其中,ImagesIR 为红外线图像

请添加图片描述
Image为可见光(RGB)图像

请添加图片描述

改进——YOLOv11多模态(RGB+IR)融合BoTNet,保留CNN在特征提取、平移不变性等方面的优势,同时注入Transformer强大的全局建模能力!

一、BoTNet 是什么?

BoTNet 是一种将自注意力(Self-Attention)机制融入经典卷积神经网络(CNN) 的混合架构。它的核心思想是:在CNN的瓶颈结构(Bottleneck)中,用多头自注意力(MHSA)层替换掉原本的空间卷积分支(通常是3x3卷积),从而在保留CNN优点的同时,引入全局建模能力。

简单来说,BoTNet可以理解为 “用Transformer的MHSA增强的ResNet”


二、诞生背景与要解决的问题

在BoTNet出现之前,视觉领域的主流是CNN(如ResNet、ResNeXt),而NLP领域则被Transformer统治。Transformer的核心——自注意力机制——具有一个CNN卷积层难以企及的强大能力:全局感受野和动态权重

  • CNN的局限性:传统的卷积操作在一个局部窗口(如3x3)内进行,感受野有限。虽然通过堆叠多层可以增大感受野,但这种方式是间接且低效的,难以真正建立图像中远距离像素点之间的依赖关系。
  • 自注意力的优势:自注意力机制允许模型直接计算图像中任意两个位置(像素或块)之间的关系,无论它们相距多远。这使得模型能更好地理解全局上下文信息,对于需要整体场景理解的任务(如目标检测、语义分割)尤其重要。

BoTNet的提出者思考:能否将两者的优势结合起来?即保留CNN在特征提取、平移不变性等方面的优势,同时注入Transformer强大的全局建模能力。答案是肯定的,BoTNet就是这种“强强联合”的成功实践。


三、核心结构详解

BoTNet模块是基于ResNet中著名的 Bottleneck 结构 改造而来的。我们先回顾一下标准的ResNet Bottleneck结构:

标准 ResNet Bottleneck (例如 ResNet-50):

  1. 1x1 卷积:降维,减少计算量。
  2. 3x3 卷积:进行空间特征提取(核心计算)。
  3. 1x1 卷积:升维,恢复通道数。
  4. Shortcut 连接:恒等映射或1x1卷积,与主分支输出相加。

BoTNet Bottleneck 结构:
BoTNet的创新点在于第2步,其结构如下:

  1. 1x1 卷积:与标准结构相同,用于降维。
  2. 多头自注意力 (MHSA)这是核心改动! 用MHSA层替换了原来的3x3卷积层。
    • 为什么要用MHSA? 因为MHSA可以在这个阶段对整个特征图进行全局关系建模,捕获远距离依赖。
    • 如何处理二维图像? NLP中的Transformer处理一维序列,而图像是二维的。BoTNet通过将特征图 H x W x C 重塑(reshape)为 (H*W) x C 的一个序列(序列长度为 H*W,每个 token 的维度为 C),从而将其转换为MHSA可以处理的形式。
    • 位置编码 (Position Encoding):由于自注意力本身是置换不变(permutation-invariant)的,失去了空间位置信息,因此必须引入相对位置编码(Relative Position Encoding)。这是BoTNet的一个关键细节,它使用了在Transformer中广泛使用的2D相对位置编码,让模型能够感知像素间的相对位置关系。
  3. 1x1 卷积:与标准结构相同,用于升维。
  4. Shortcut 连接:保持不变。

四、关键特性与优势

  1. 高效的全局建模能力:通过在网络深层(高维、低分辨率特征图上)使用MHSA,BoTNet能以可接受的计算成本获得极强的全局上下文信息捕获能力。
  2. 即插即用:BoTNet模块的设计使其可以直接替换标准ResNet中的后几个阶段的Bottleneck模块(通常是Stage 3和Stage 4)。你不需要重新设计整个网络,就能享受到性能提升。
  3. 保留CNN优点:网络的前几个阶段(Stage 1, Stage 2)仍然使用标准卷积,这些层能高效地提取低级的局部特征(如边缘、纹理),这是CNN的强项。这种组合实现了“局部-全局”的最佳平衡。
  4. 计算效率考量:自注意力的计算复杂度与序列长度的平方(即 (H*W)^2)成正比。因此,BoTNet只在特征图分辨率较低(HW较小)的深层使用MHSA,避免了在浅层高分辨率特征图上使用MHSA带来的巨大计算开销。

五、性能表现

BoTNet在多个视觉任务上展现了显著提升:

  • 图像分类:在ImageNet数据集上,使用BoTNet-50/101等 backbone 的分类模型相比其ResNet基线有稳定的精度提升。
  • 目标检测与实例分割提升尤为明显! 在COCO数据集上,使用BoTNet作为backbone的Mask R-CNN等检测器,在不增加任何额外技巧(如FPN、DCN等)的情况下,mAP指标相比ResNet backbone有大幅提升(例如,+1.7% ~ +1.3% AP)。这充分证明了全局上下文信息对于需要精确定位和分割的任务至关重要。
  • 语义分割:同样因为强大的全局建模能力,在ADE20K等分割数据集上也有优异表现。

六、代码示例(伪代码/概念性)

以下是一个简化的PyTorch风格的BoTNet模块伪代码,帮助理解其结构:

import torch
import torch.nn as nn
from torch.nn import functional as F

class MHSA(nn.Module):
    # 多头自注意力层,包含相对位置编码
    def __init__(self, dim, heads=4):
        super().__init__()
        self.heads = heads
        # ... 初始化Q, K, V投影层和相对位置编码表 ...

    def forward(self, x):
        # x shape: (B, C, H, W)
        B, C, H, W = x.shape
        x_flat = x.flatten(2).transpose(1, 2) # (B, H*W, C)

        # 计算Q, K, V
        q = self.q_proj(x_flat).reshape(B, -1, self.heads, C // self.heads).transpose(1, 2)
        k = self.k_proj(x_flat).reshape(B, -1, self.heads, C // self.heads).transpose(1, 2)
        v = self.v_proj(x_flat).reshape(B, -1, self.heads, C // self.heads).transpose(1, 2)

        # 计算注意力分数,并加入相对位置偏置
        attn = (q @ k.transpose(-2, -1)) * self.scale
        attn = attn + self.get_rel_pos_bias() # 添加相对位置编码
        attn = attn.softmax(dim=-1)

        # 输出并重塑回图像格式
        out = (attn @ v).transpose(1, 2).reshape(B, H*W, C)
        out = self.out_proj(out)
        out = out.transpose(1, 2).view(B, C, H, W) # (B, C, H, W)
        return out

class BoTNetBottleneck(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1, heads=4):
        super().__init__()
        expanded_channels = out_channels // 4 # 扩展系数

        self.conv1 = nn.Conv2d(in_channels, expanded_channels, 1, stride=1)
        self.bn1 = nn.BatchNorm2d(expanded_channels)

        # 核心:用MHSA替换3x3卷积
        self.mhsa = MHSA(dim=expanded_channels, heads=heads)
        self.bn2 = nn.BatchNorm2d(expanded_channels) # 注意:MHSA后通常也接BN

        self.conv3 = nn.Conv2d(expanded_channels, out_channels, 1, stride=1)
        self.bn3 = nn.BatchNorm2d(out_channels)

        self.relu = nn.ReLU(inplace=True)

        # shortcut处理
        self.shortcut = nn.Sequential()
        if stride != 1 or in_channels != out_channels:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_channels, out_channels, 1, stride=stride),
                nn.BatchNorm2d(out_channels),
            )

    def forward(self, x):
        identity = self.shortcut(x)

        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)

        out = self.mhsa(out) # 使用MHSA进行空间建模
        out = self.bn2(out)
        out = self.relu(out)

        out = self.conv3(out)
        out = self.bn3(out)

        out += identity
        out = self.relu(out)

        return out

七、总结与影响

BoTNet是一个里程碑式的工作,它优雅地证明了:

  1. 自注意力机制可以作为CNN的一个强大补充,而不仅仅是构建纯Transformer模型(如ViT)的专属。
  2. 混合架构(Hybrid Architecture) 的巨大潜力。这种“CNN主干 + Transformer头部”的设计思想后来被许多模型所借鉴(例如,CoAtNet, CVT等),成为视觉模型发展的一条重要技术路径。
  3. 它为研究者们提供了一个非常简单有效的提升现有CNN模型性能的工具,尤其是在密集预测任务(检测、分割)上。

总而言之,BoTNet成功地弥合了CNN与Transformer在视觉任务上的鸿沟,是一个设计巧妙、效果显著且极具影响力的模块。

写在最后

学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通,关注UP:Ai学术叫叫兽
在所有B站资料中留下联系方式以便在科研之余为家人们答疑解惑,本up主获得过国奖,发表多篇SCI,擅长目标检测领域,拥有多项竞赛经历,拥有软件著作权,核心期刊等经历。
因为经历过所以更懂小白的痛苦!
因为经历过所以更具有指向性的指导!

祝所有科研工作者都能够在自己的领域上更上一层楼!

以下为给大家庭小伙伴们免费更新过的绘图代码,均配有详细教程,超小白也可一键操作! 后续更多提升文章档次的资料的更新请大家庭的小伙伴关注UP:Ai学术叫叫兽!

请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述

请添加图片描述
在这里插入图片描述

请添加图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐