015、Neck结构改进(三):路径聚合网络(PANet)的增强策略
从一次深夜调试说起
上周在部署YOLO模型到边缘设备时遇到个怪现象:同一张测试图片,在服务器上检测框稳稳锁定目标,到了Jetson设备上就开始“飘移”——小目标时隐时现,边界框抖动明显。盯着热力图看了半天,发现浅层特征和深层特征的信息传递出了问题。这让我重新审视起YOLO的颈部结构,特别是那个看似简单却至关重要的PANet。
PANet到底在解决什么问题?
先别急着翻论文,咱们用实际场景来理解。想象你要在拥挤的街景中找特定车牌:首先扫视全局(深层特征知道“大概在右下角”),然后聚焦细节(浅层特征能看清“浙A·12345”)。PANet干的就是让这两类信息高效对话的活儿。
原始PANet的设计有个隐痛:信息在自底向上和自底向下两条路径上流动时,就像用对讲机在嘈杂工地通话——关键细节容易丢失。特别是小目标特征,经过几次下采样再上采样,都快变成马赛克了。
我们试过的三个增强策略
策略一:自适应特征融合(AFF)
直接上代码片段,这是我们在实际项目中修改的部分:
class AdaptiveFusion(nn.Module):
def __init__(self, channels):
super().__init__()
# 注意这里用1×1卷积而不是全连接,计算量小很多
self.gap = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Conv2d(channels, channels // 4, 1), # 降维别太狠,试过16效果不好
nn.ReLU(),
nn.Conv2d(channels // 4, channels, 1),
nn.Sigmoid()
)
def forward(self, high_res, low_res):
# high_res是高层语义特征,low_res是底层细节特征
if high_res.shape != low_res


