PAT(Partial Channel-Attention block)是一款专为神经网络高效特征提取设计的轻量化模块,其诞生源于计算机视觉任务中 "性能提升" 与 "效率优化" 的核心矛盾。在深度学习模型不断向深层、密集化发展的趋势下,传统卷积虽能捕捉特征但计算冗余严重,单纯的轻量化卷积又易丢失全局信息;而常规通道注意力机制仅依赖单一统计信息,特征挖掘不够充分。为解决这一痛点,PAT创新性地将 "部分通道计算" 与 "增强型注意力机制" 结合,既规避了全量计算的高成本,又弥补了传统注意力的信息短板,适配目标检测、分割等对速度与精度均有要求的实际场景。
基础模型
改进后的


1.PAT原理
PAT的核心逻辑是 "分流处理、优势互补":它不采用对所有通道统一操作的模式,而是先将输入特征的通道按比例拆分,让不同通道承担不同功能 ------ 一部分通道专注于局部特征提取(通过常规卷积),另一部分通道专注于全局关联建模(通过改进型注意力)。关键在于,其注意力机制并非仅依赖通道均值,而是利用特征映射的高斯分布特性,同时融入均值与方差两类统计信息,能更全面地捕捉通道间的潜在关联;两部分通道的处理过程并行进行,无需等待单一分支完成,既保证了特征的丰富性,又避免了额外的时间延迟,最终通过融合实现 "局部细节不遗漏、全局关联不缺失" 的特征增强效果。

PAT_ch 的结构围绕 "分流 - 处理 - 融合" 的核心逻辑搭建,整体简洁且高效:
-
通道拆分模块:作为整个模块的入口,它根据预设比例(可灵活调整)将输入特征图的通道分成两个独立分支,一个用于卷积运算,一个用于注意力计算,实现特征的并行分流,为后续高效处理奠定基础;
-
双功能处理模块:卷积分支通过 3×3 卷积核提取局部空间特征,搭配批归一化和激活函数,确保特征的局部辨识度;注意力分支则嵌入高斯增强型 SE 模块,先对特征进行全局池化获取均值与方差,再通过简单的全连接层转化为注意力权重,筛选出对任务更有价值的特征;
-
特征融合模块:将经过不同处理的两个分支特征,通过通道拼接的方式重新整合为完整通道维度,输出兼具局部与全局特性的增强特征,整个结构无复杂冗余组件,轻量化设计贯穿始终。
2. YOLO与 PAT的结合
将 PAT融入YOLO 模型,能实现 "速度与性能的双向升级":一方面,PAT_ch 的轻量化设计与 YOLO 的实时检测定位高度契合,可在不降低推理速度的前提下,替代传统卷积层减少模型冗余;另一方面,其增强型注意力机制能强化 YOLO 对多尺度目标的特征捕捉能力,尤其提升小目标、遮挡目标的检测效果,让模型在复杂场景下的泛化能力更优。
3. PAT代码部分
YOLO11|YOLO12|YOLO26|改进| 部分注意力卷积PAT,部分通道分割与并行算子分配,高效融合卷积特征,提升对小目标、密集目标的检测能力_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取: YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
4. PAT引入到YOLO26中
第一: 先新建一个change_model,如下图如所示。

将代码复制到change_model里面

第二:在task.py中导入 包

第三:在task.py中的模型配置部分下面代码

第四:将模型配置文件复制到YOLOV11.YAMY文件中

第五:运行代码
python
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv12.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"/home/tgf/tgf/yolo/model/YOLO26/ultralytics/cfg/models/26/yolo26_PAT.yaml")
# .load(r'E:\Part_time_job_orders\YOLO_NEW\YOLOv12\yolo12n.pt') # build from YAML and transfer weights
results = model.train(data=r"/home/tgf/tgf/yolo/model/YOLO26/ultralytics/cfg/datasets/VOC_my.yaml",
epochs=300,
imgsz=640,
batch=32,
optimizer="MuSGD",
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
amp = True
)