在伪装物体检测中,现有方法多依赖空间局部特征,难以捕捉全局信息,而 Transformer 类方法计算成本高昂。频率域特征因具备全局建模能力,可有效抑制背景噪声、提升伪装物体语义清晰度,但频域与空域的频繁转换会增加计算复杂度。基于此,PFAE 模块被提出,旨在通过频域注意力机制更高效地提取高频特征,解决传统方法在处理边界模糊、遮挡等场景时的局限性。
1.PFAE原理
PFAE 模块的核心原理是结合频域注意力与多尺度特征融合。首先,对输入特征进行通道降维,通过不同膨胀率的扩张卷积分支提取多尺度特征;每个分支利用快速傅里叶变换(FFT)生成查询 Q、键 K 和值 V,经点乘、激活实部与虚部后得到频域注意力图,再与 V 点乘并通过逆傅里叶变换(IFFT)转回空域。过程中引入频率权重模块(FWM)进行残差连接,最后通过卷积操作与残差连接生成混合特征,实现对频域信息的增强与多尺度特征的聚合。
PFAE 模块的结构如图 2 所示,主要包含以下部分:
特征降维:通过 1×1 卷积对输入特征 E₄降维,得到E^4。
多尺度扩张卷积分支:4 个分支,膨胀率为2n−1(n≥2),每个分支包含频域注意力模块。
频域注意力计算:利用 FFT 生成 Q、K、V,计算注意力图Af,并通过 IFFT 转回空域。
频率权重模块(FWM):通过频域残差连接增强频域信息表示。
特征融合与输出:通过卷积操作与残差连接,将多分支特征融合生成最终输出E5。
2. PFAE 在不同领域的应用描述
医学领域
在医学影像伪装目标检测相关论文中,PFAE 模块可被描述为:“针对医学影像中病灶与周围组织边界模糊、易受噪声干扰的挑战,提出基于频域注意力的金字塔频率注意力提取模块(PFAE)。该模块通过多尺度扩张卷积捕获不同大小的病灶特征,结合频域变换抑制背景噪声,增强病灶区域的语义特征。在肺部结节、乳腺肿瘤等检测任务中,PFAE 能有效提取隐藏于复杂解剖结构中的病灶高频特征,提升分割精度,为医学辅助诊断提供更可靠的依据。”
遥感领域
用于遥感图像伪装目标检测的论文中,可这样描述 PFAE:“在遥感场景中,伪装目标(如军事设施、隐藏车辆等)常与自然背景高度相似,传统方法难以有效区分。PFAE 模块通过频域注意力机制,捕捉目标与背景在频率域的差异特征,抑制植被、地形等复杂背景的干扰。多尺度结构可适应不同大小目标的检测需求,从遥感图像的高频分量中提取目标的轮廓与结构信息,实现对伪装目标的鲁棒检测,为遥感监测与安全预警提供技术支持。”
缺陷检测领域
在工业缺陷伪装检测的论文中,PFAE 的描述可如下:“工业产品表面缺陷常因光照、纹理等因素与正常区域难以区分,传统方法易受局部特征干扰。PFAE 模块通过频域变换提取缺陷区域的高频特征,结合多尺度扩张卷积捕获不同尺度的缺陷模式,有效抑制产品表面纹理、划痕等噪声的影响。在金属板材、半导体晶圆等缺陷检测中,该模块能从复杂背景中精准定位伪装缺陷,提升检测的准确率与鲁棒性,为工业质量控制提供高效解决方案。”
农业领域
于农业伪装目标检测相关论文中,PFAE 可表述为:“农业场景中,病虫害植株、杂草等伪装目标常与正常作物外观相似,传统检测方法难以精准识别。PFAE 模块利用频域注意力机制,提取病虫害叶片、杂草等目标的独特频率特征,抑制作物叶片纹理、自然光照等背景干扰。多尺度结构可适应不同生长阶段目标的检测需求,从图像高频分量中增强目标的语义信息,实现对农田中伪装目标的准确识别与定位,为精准农业管理提供技术支撑。”
3. PFAE与yolo结合
将PFAE与YOLO结合时,可借助PFAE的频域注意力与多尺度特征提取能力,增强YOLO对伪装目标的全局语义理解,抑制复杂背景干扰;其轻量化结构适配YOLO的实时检测框架,在工业缺陷、遥感目标等场景中,能提升YOLO对边界模糊、尺度多变伪装目标的检测精度与鲁棒性,同时保持高效推理速度。
4. PFAE代码部分
PFAE(金字塔频率注意力提取模块)抑制复杂背景干扰,提升小目标、边界模糊目标的检测精度_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. PFAE引入到YOLOv12中
第一: 先新建一个v12_changemodel,将下面的核心代码复制到下面这个路径当中,如下图如所示。E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\v12_changemodel。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV12.YAMY文件中
第五:运行代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv12.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO("/home/shengtuo/tangfan/YOLO12/ultralytics/cfg/models/12/yolo12_PFAE.yaml")
# .load(r'E:\Part_time_job_orders\YOLO_NEW\YOLOv12\yolo12n.pt') # build from YAML and transfer weights
results = model.train(data="/home/shengtuo/tangfan/YOLO12/ultralytics/cfg/datasets/fire_smoke.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
)
上面是原模型,下面是改进模型