在遥感目标检测(RSOD)中,低质量图像存在诸多问题,如低空间分辨率、传感器噪声、运动模糊、光照不利等,这些导致特征区分度降低,现有方法在检测低质量物体时存在局限。在其他视觉任务如息肉分割、医学图像分析等领域,也面临前景背景分割难、边缘信息模糊等问题。因此,需要一种能有效处理低质量图像特征、增强边缘信息、提升模型鲁棒性的方法,EGA 模块应运而生。
1.EGA 原理
EGA 模块结合传统图像处理技术与深度学习技术。一方面,利用具有方向感知的 Scharr 滤波器,其旋转不变性可保留高频边缘细节,在低对比度或模糊物体中精准提取边缘,解决结构不连续问题;另一方面,通过基于高斯先验的特征建模,使用固定参数卷积核进行高斯平滑,抑制噪声,对低置信度或模糊特征进行优化,增强前景显著性,改善特征响应模糊及对比度低的问题,提升模型对复杂条件下物体特征的表达能力。

EGA(Edge-Gaussian Aggregation,边缘 - 高斯聚合)模块的结构围绕 “阶段自适应特征增强” 设计,主要包含特征处理选择、融合增强及输出三个核心环节。
在特征处理选择上,模块会依据网络所处阶段动态切换操作:浅层阶段(如 LEGNet 的 Stage 1)采用边缘提取,通过水平和垂直方向的 Scharr 滤波器对输入特征进行卷积,计算两者平方和的平方根以获取边缘响应,精准捕捉低质量图像中易丢失的边缘细节;深层阶段(Stage 2-4)则启用高斯建模,利用 5×5 固定参数的高斯卷积核对特征进行深度卷积,借助高斯分布特性突出中心像素特征,同时抑制噪声干扰。
特征融合增强环节中,无论是边缘提取结果还是高斯建模结果,都会先与原始输入特征相加,再传入一个三层卷积块处理:先经 1×1 卷积压缩通道并进行激活归一化,接着通过 3×3 卷积提取局部特征,最后用 1×1 卷积调整通道并归一化,得到中间特征。
最终,中间特征与原始输入特征通过元素级乘法和加法进行融合,再经 3×3 卷积输出增强后的特征,实现对低质量图像特征的修复与强化,在轻量化框架下兼顾边缘保留与噪声抑制,提升模型对复杂场景的适应能力。
2.EGA 习作思路
在检测领域的描述(以 LEGNet 论文为例)
在检测领域,如在针对低质量遥感图像目标检测的 LEGNet 中,EGA 模块发挥了关键作用。它集成到 LEGNet 骨干网络中,通过边缘提取和高斯建模,提升低质量物体的特征表示能力。在面对低分辨率、噪声、模糊等问题时,能增强目标边缘细节,抑制噪声干扰,让模型更准确地识别和定位目标。
在分割领域的描述(以息肉分割等相关论文为例)
在分割领域,以解决息肉分割中前景背景分割难的问题为例,EGA 模块通过多尺度边缘引导网络实现更好的分割效果。它利用拉普拉斯金字塔获取不同尺度的高频特征,通过融合卷积、注意力机制等操作,对边缘特征、输入特征和预测特征进行处理。通过反向注意力关注背景区域,利用边界注意力聚焦预测边缘,结合高频特征,使模型更精准地捕捉物体边界,提升分割精度,有效解决神经网络深层边缘信息被侵蚀的问题,在处理伪装目标、阴影去除等任务时也表现出色。
3. YOLO与EGA 的结合
将 EGA 模块放入 YOLO 中,能增强 YOLO 对低质量图像的适应性。在处理包含噪声、模糊物体的图像时,EGA 的边缘提取和高斯建模能力可帮助 YOLO 更清晰地识别目标边缘,抑制背景噪声干扰,提升小目标检测能力,减少漏检和误检情况。同时,EGA 模块结构轻量、计算开销低,在不显著增加计算负担的前提下,增强了 YOLO 模型的鲁棒性和特征表达能力,使 YOLO 在复杂场景下的检测性能得到提升,更适用于实际应用中的多种检测任务。
4.EGA 代码部分
基于卷积模拟自注意力ESC,以卷积模拟自注意力,增强对小目标、密集目标的特征表征能力_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. EGA 引入到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/shengtuo/tangfan/YOLO11/ultralytics/cfg/models/11/yolo12_EGA.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
)
1257

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



