💡💡💡本文摘要:这篇论文提出了一种基于多分支异构辅助融合的 YOLO 检测框架,旨在解决传统路径聚合 FPN(PAFPN)在多尺度特征融合中的局限性,特别是在同时集成高层语义信息和低层空间信息方面的不足
博主简介
AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8、v9、v10、11优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;
原创自研系列, 2024、25年计算机视觉顶会创新点
应用系列篇:
23、24年最火系列,加入24年改进点内涵100+优化改进篇,涨点小能手,助力科研,好评率极高
1. MHAF-YOLO
论文:https://arxiv.org/pdf/2502.04656
摘要:由于路径聚合特征金字塔网络(PAFPN)具备高效的多尺度特征融合能力,其已成为基于YOLO的检测器中广泛采用的核心组件。然而,PAFPN在整合高层语义线索与低层空间细节方面存在局限性,这影响了其在现实场景(尤其是目标尺度变化显著时)的性能表现。本文提出MHAF-YOLO——一种创新的检测框架,其核心为多功能颈部结构"多分支辅助特征金字塔网络(MAFPN)",该结构包含两大关键模块:浅层辅助融合(SAF)与深层辅助融合(AAF)。SAF通过融合浅层特征连接骨干网络与颈部结构,实现关键低层空间信息的高保真传递;而AAF则在深层颈部中融合多尺度特征信息,向输出层输送更丰富的梯度信息以增强模型学习能力。为配合MAFPN,我们提出全局异构灵活卷积核选择机制(GHFKS)与重参数化异构多尺度模块(RepHMS)以优化特征融合。RepHMS通过GHFKS全局选择各特征层的大尺寸卷积核,扩展垂直感受野以捕获跨空间层级的上下文信息;局部层面则通过同层大小卷积核并行处理优化计算,扩展水平感受野以保留小目标检测的关键细节。实验表明,MHAF-YOLO小型版本仅需710万参数即在COCO数据集实现48.9% AP,较YOLO11s参数量减少24.4%的同时性能提升1.9%。此外,该模型在实例分割与旋转目标检测任务中也展现出卓越的泛化性能。
图1:图(a)展示了YOLOv10中PAFPN的结构,而图(b)和图(c)则分别展示了传统PAFPN结构和所提出的MAFPN结构在相同输出头下的特征图结果的GradCAM++可视化效果。
图2:与其他先进实时目标检测器在参数-准确率(左)和每秒浮点运算次数-准确率(右)权衡方面的比较。
实验结果:
检测
分割:
OBB:
2 源码分析
yolov10n-mafpn.yaml
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.33, 0.25, 1024]
# YOLOv8.0n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C2f, [128, True]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C2f, [256, True]]
- [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
- [-1, 6, C2f, [512, True]]
- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C2f, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 1, PSA, [1024]] # 10
# YOLOv8.0n head
head:
- [6, 1, AVG, []]
- [[-1, 10], 1, Concat, [1]]
- [-1, 1, RepHMS, [512, 2, 1, 3, 9]] #13
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [4, 1, AVG, []]
- [[-1, 6, -2], 1, Concat, [1]]
- [-1, 1, RepHMS, [384, 2, 1, 3, 7]] #17
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [2, 1, AVG, []]
- [[-1, 4, -2], 1, Concat, [1]]
- [-1, 1, RepHMS, [384, 2, 1, 3, 5]] #21
- [[-1, 18], 1, Concat, [1]]
- [-1, 1, RepHMS, [384, 2, 1, 3, 5]] # 23
- [-1, 1, Conv, [384, 3, 2]]
- [21, 1, AVG, []]
- [[-2, -1, 17, 14], 1, Concat, [1]]
- [-1, 1, RepHMS, [384, 2, 1, 3, 7]] # 27
- [-1, 1, Conv, [384, 3, 2]]
- [17, 1, AVG, []]
- [[-2, -1, 13], 1, Concat, [1]]
- [-1, 1, RepHMS, [512, 2, 1, 3, 9]] # 31
- [[23, 27, 31], 1, v10Detect, [nc]] # Detect(P3, P4, P5)
2.1 mafyolo.py
核心代码如下:
class RepHMS(nn.Module):
def __init__(self, in_channels, out_channels, width=3, depth=1, depth_expansion=2, kersize=5, shortcut=True,
expansion=0.5,
small_kersize=3, use_depthwise=True):
super(RepHMS, self).__init__()
self.width = width
self.depth = depth
c1 = int(out_channels * expansion) * width
c_ = int(out_channels * expansion)
self.c_ = c_
self.conv1 = Conv(in_channels, c1, 1, 1)
self.RepElanMSBlock = nn.ModuleList()
for _ in range(width - 1):
DepthBlock = nn.ModuleList([
DepthBottleneckUniv2(self.c_, self.c_, shortcut, kersize, depth_expansion, small_kersize, use_depthwise)
for _ in range(depth)
])
self.RepElanMSBlock.append(DepthBlock)
self.conv2 = Conv(c_ * 1 + c_ * (width - 1) * depth, out_channels, 1, 1)
def forward(self, x):
x = self.conv1(x)
x_out = [x[:, i * self.c_:(i + 1) * self.c_] for i in range(self.width)]
x_out[1] = x_out[1] + x_out[0]
cascade = []
elan = [x_out[0]]
for i in range(self.width - 1):
for j in range(self.depth):
if i > 0:
x_out[i + 1] = x_out[i + 1] + cascade[j]
if j == self.depth - 1:
#cascade = [cascade[-1]]
if self.depth > 1:
cascade =[cascade[-1]]
else:
cascade = []
x_out[i + 1] = self.RepElanMSBlock[i][j](x_out[i + 1])
elan.append(x_out[i + 1])
if i < self.width - 2:
cascade.append(x_out[i + 1])
y_out = torch.cat(elan, 1)
y_out = self.conv2(y_out)
return y_out
3.总结
可以将该创新融入到YOLO11,进行二次创新优化。