在图像超分辨率领域,早期基于卷积神经网络(CNNs)的方法虽然取得了一定成果,但卷积的局部性限制了其对全局依赖关系的捕捉。为了克服这一局限,注意力机制被引入,其中基于 Transformer 的方法凭借自注意力机制在捕捉长距离依赖方面展现出强大潜力。然而,这些方法在处理高分辨率图像时面临计算复杂度高的问题,于是一些方法通过划分局部区域来提高效率,但又出现了限制长距离相似令牌利用等问题。在此背景下,需要一种既能有效学习局部细节,又能在一定程度上兼顾全局信息的机制。
上面是原模型,下面是改进模型

1. 局部区域自注意力机制LRSA介绍
LRSA 的核心理论基于自注意力机制,其目的是增强局部区域内令牌(token)之间的依赖关系。在图像超分辨率中,局部区域的细节对于重建高分辨率图像至关重要。LRSA 通过计算局部区域内不同位置特征之间的注意力权重,来确定每个位置对其他位置的关注程度,从而使模型能够聚焦于局部区域内的重要信息。例如,在处理图像中的纹理、边缘等细节时,LRSA 可以根据不同位置特征的相似性,自适应地分配注意力,更好地保留和利用这些局部信息。
从提供的图片来看,LRSA模块主要包含以下几个部分:
重叠补丁:该模块遵循 HPINet 的做法,采用重叠补丁的方式来增强特征交互。这种方式打破了传统局部区域划分的局限性,让不同局部区域之间有信息重叠,使得模型能获取更丰富的局部信息,有助于捕捉跨越局部边界的特征关系,避免因区域划分而丢失关键细节。
投影操作:输入的特征数据会分别与三个权重矩阵进行运算。这些权重矩阵在不同的补丁上是共享的,这意味着无论在图像的哪个局部区域,相同的权重矩阵用于对输入特征进行处理。通过这种共享机制,模型可以在不同位置上统一地提取和处理特征,提高了模型的通用性和效率。
多头自注意力(MSA)操作:经过投影得到的数据会进入多头自注意力机制进行处理。多头自注意力机制会从多个不同的角度去计算注意力权重,能够同时关注输入特征的不同方面,综合多个 “视角” 的信息,从而更全面、细致地捕捉局部区域内不同特征之间的依赖关系,增强对局部细节的表达能力。
输出结果:经过 MSA 操作后,最终会得到输出特征。这些输出特征包含了经过 LRSA 模块处理后的局部区域信息,这些信息更加聚焦于局部细节,对后续的图像超分辨率重建过程中恢复图像的细节纹理等信息起到了关键作用
2. YOLOv11与局部区域自注意力机制LRSA的结合
将 LRSA 与 YOLO11C2PSA 相结合,LRSA 能强化局部细节捕捉,为 YOLO11C2PSA 补充小目标和复杂区域的关键特征,提升检测精度。同时,两者协同优化多尺度信息融合,增强模型对不同尺度目标的适应性,提高对复杂场景的理解能力与抗干扰性
3. 局部区域自注意力机制LRSA代码部分
视频讲解:
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
YOLOv11全部代码,现有几十种改进机制。
4. 局部区域自注意力机制LRSA引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from sympy import false
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\models\11\yolo11_LRSA.yamy")\
.load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data=r'E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\datasets\VOC_my.yaml',
epochs=300,
imgsz=640,
batch=64,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
amp = True
)