在计算机视觉领域,密集预测任务如显著目标检测(SOD)、语义分割等面临着两个关键挑战:1)神经网络在深度增加时倾向于丢失重要的视觉细节;2)低分辨率编码器特征往往过度强调低频语义信息,而忽略了高频细节。这些问题在RGB-T(可见光-热红外)显著目标检测任务中尤为突出,因为需要同时处理两种不同成像特性的模态数据。
传统解决方案如残差网络(ResNet)和通道注意力机制(RCAB)虽然在一定程度上缓解了这些问题,但仍存在局限性。ResNet通过残差连接保留了部分细节信息,但缺乏对频域的针对性处理;RCAB在空间域建模通道关系,但无法充分利用频域的全局特性。此外,Transformer架构虽然能捕获长距离依赖,但其二次复杂度限制了在高分辨率特征上的应用。
1.FRCAB原理
FRCAB的核心原理建立在频域分析和通道注意力机制的创新融合上,主要包含三个关键设计思想:
- 频域特征分解:
FRCAB首先将输入特征转换到频域,通过快速傅里叶变换(FFT)将空间特征分解为振幅和相位两个关键成分。振幅分量主要反映图像的风格和内容信息,而相位分量则编码了边缘和纹理等细节信息。这种分解使得网络能够有针对性地处理不同频段的信息。
- 通道维度的频域分析:
不同于传统方法仅在空间域处理特征,FRCAB创新性地在通道维度执行傅里叶变换(CFFT)。通过对通道维度的振幅和相位进行独立增强,模型能够捕获更丰富的通道间统计关系。这种处理特别适合多模态数据融合,因为不同模态的特征往往在通道维度表现出互补性。
- 残差中的残差结构:
FRCAB采用了多级残差连接设计,包括:a)局部残差连接保留原始特征;b)全局残差连接确保梯度流动;c)频域残差连接专注于高频细节重建。这种多层次的结构使网络能够同时保持低频语义信息和高频细节。

FRCAB的结构如图所示,包含两个主要组件:
- 残差中的残差(RIR)结构:通过多级残差连接,使网络能够学习高频细节信息,同时保持低频语义信息的完整性。这种结构有效缓解了网络在深度增加时对高频信息丢失的问题。
- 傅里叶通道注意力(FCA):首先对输入特征进行全局平均池化,然后在通道维度执行快速傅里叶变换(CFFT),分离出振幅和相位成分。通过专门设计的卷积层对这两个成分进行增强后,再进行逆变换(ICFFT)。这一过程能够捕获通道间的全局依赖关系。
2.FRCAB习作思路
在目标检测中的应用优势:
FRCAB通过频域处理能够更有效地捕捉目标的全局上下文信息,这对于目标检测中准确识别不同尺度的物体至关重要。其通道注意力机制可以自适应地强调包含重要目标信息的通道,抑制噪声通道,从而提高检测精度。同时,残差结构确保网络能够保留必要的细节特征,对于小目标检测尤为有利。
在图像分割中的应用优势:
对于密集预测任务如图像分割,FRCAB的双重设计特别有价值。RIR结构专注于重建高频边界信息,这对于分割任务中精确的边缘定位至关重要;而FCA模块通过频域的通道注意力,能够更好地建模长距离依赖关系,解决分割中常见的上下文信息不足问题。这种组合使网络能够生成更精细的分割结果。
3. YOLO与FRCAB的结合
将FRCAB集成到YOLO系列目标检测框架中,可以带来多方面的改进:1)通过频域通道注意力增强特征金字塔的特征表示能力,提高多尺度目标检测性能;2)残差结构有助于保持浅层网络中的细节信息,改善小目标检测;3)傅里叶变换的全局特性可以弥补YOLO局部感受野的不足,增强模型对复杂场景的适应能力。
4.FRCAB代码部分
YOLO11|YOLO12|改进| 傅里叶残差通道注意力块(FRCAB),通过频域分析和通道注意力机制,提升小目标检测能力_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. FRCAB引入到YOLOv12中
第一: 先新建一个v12_changemodel,将下面的核心代码复制到下面这个路径当中,如下图如所示。E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\v12_changemodel。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
import torch
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO("/home/tgf/tgf/yolo/model/YOLO12_All/ultralytics/cfg/models/12/yolo12_FRCAB.yaml")\
# .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data="/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/datasets/VOC_my.yaml",
epochs=300,
imgsz=640,
batch=4,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
amp = True
)

被折叠的 条评论
为什么被折叠?



