特征融合(五):​BiFPN-双向特征金字塔网络

图像处理中,融合不同尺度的特征是提高图像效果的重要手段,在卷积中:
浅层特征:浅层特征分辨率更高,包含更多位置、细节信息,但是由于经过的卷积更少,其语义性更低,噪声更多。
高层特征:高层特征具有更强的语义信息,但是分辨率很低,对细节的感知能力较差。
如何将两者高效融合,是改善模型的关键。

图片

BiFPN

论文地址

https://arxiv.org/abs/1901.01892

代码地址

https://github.com/google/automl/tree/master/efficientdet(Google官方)

BiFPN来自论文:《EfficientDet: Scalable and efficient object detection 》。 

✅EfficientDet的方法和创新性围绕两个关键挑战:

1️⃣更好地融合多层特征。这个毋庸置疑,肯定是从 FPN 发展过来的,至于 Bi 就是双向,原始的FPN实现的自顶向下(top-down)融合,所谓的BiFPN就是两条路线既有top-down也有down-top。在融合过程中,之前的一些模型方法没有考虑到各级特征对融合后特征的共享度问题,即之前模型认为各级特征的贡献度相同,而本文作者认为它们的分辨率不同,其对融合后特征的贡献度不同,因此在特征融合阶段引入了weight。

2️⃣模型缩放。这个主要灵感来自于 EfficientNet,即在基线网络上同时对多个维度进行缩放(一般都是放大),这里的维度体现在主干网络、特征网络、以及分类/回归网络全流程的整体架构上整体网络由主干网络、特征网络以及分类/回归网络组成,可以缩放的维度比 EfficientNet 多得多,所以用网络搜索方式不合适了,作者提出一些启发式方法。

图片

BiFPN的思想其实是基于路径增强FPN(PANet)的思想,在自顶向下特征融合之后紧接着自底向上再融合一遍。在图2中文章列举了三类FPN以及BiFPN。图2(a) 是传统FPN,图2(b)是PANet,图2(c)是利用网络自动搜索的方式生成的不规则特征融合模块,且这个模块可以重复叠加使用【即堆叠同样的模块,不停地使用相同的结构融合多层特征】。可以看到,PANet可以看做一个双向FPN。

✅BiFPN针对PANet的改进点主要有三个:

1️⃣削减了一些边。BiFPN删除了只有一个入度的节点,因为这个节点和前一个节点的信息是相同的【因为没有别的新的信息传进来】,这样就祛除了一些冗余计算。

2️⃣增加了一些边。BiFPN增加了一些跳跃连接【可以理解为residual连接,图2(d)中横向曲线3个连接】,这些连接由同一层的原始特征节点【即没有经历自顶向下融合的特征】连接到输出节点【参与自底向上特征融合】。

3️⃣将自顶向下和自底向上融合构造为一个模块,使其可以重复堆叠,增强信息融合【有了一种递归神经网络的赶脚】。PANet只有一层自顶向下和一层自底向上。

图片

深层特征一直上采样与浅层特征融合,上采样完成之后,再由浅层特征一直下采样与深层特征融合。并且网络在原始FPN+PAN结构的基础上增加了两条横向连接路径,用于将主干网络提取的特征融入待检测特征图。这种改进方式可在不增加太多计算量的前提下,使待检测特征图融合更多特征信息,增强特征图的表达能力,提高检测器性能。这形成了一个双向跨尺度连接的结构,通过自上而下与自下而上两条特征融合路径,将深层特征与浅层特征跨尺度融合。这种设计方式增进了不同网络层级的特征图之间的信息传递,有效改善了因特征图分辨率改变,带来的图像特征信息丢失的问题。改进后的Neck网络能融合更多位置、细节信息,使网络更好的关注到小目标所在区域。

注:本文仅用于学术分享,如有侵权,请联系后台作删文处理。

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

### 双向加权特征金字塔网络BiFPN) #### 定义与背景 双向加权特征金字塔网络(BiFPN)是一种用于计算机视觉任务的有效架构,特别是在目标检测和实例分割领域表现出色。该网络通过增强不同尺度特征之间的连接来提升模型性能[^1]。 #### 架构特点 BiFPN的核心在于构建了一个自上而下(top-down)以及自底向上(bottom-up)的路径聚合机制,在这两个方向上传播信息可以更充分地融合多尺度特征。具体来说: - **跨尺度连接**:每一层不仅接收来自相邻层次的信息,还能够获取跨越多个级别的输入; - **节点权重调整**:引入了可训练参数以动态调节各条通路的重要性程度,从而实现更加灵活高效的特征重组过程; 这种设计使得BiFPN能够在保持较低计算成本的同时获得更好的表达能力[^2]。 ```python class BiFPN(nn.Module): def __init__(self, num_channels=256): super().__init__() self.conv_upsample_0 = nn.ConvTranspose2d(num_channels, num_channels, kernel_size=3, stride=2, padding=1) self.conv_downsample_0 = nn.Conv2d(num_channels, num_channels, kernel_size=3, stride=2, padding=1) def forward(self, inputs): P3_out, P4_out, P5_out = inputs # Top down path P4_td = F.interpolate(P5_out, scale_factor=2) + P4_out P3_td = F.interpolate(P4_td, scale_factor=2) + P3_out # Bottom up path with weighted fusion w_P3, w_P4 = torch.softmax(torch.tensor([P3_td.shape[-1], P4_td.shape[-1]]), dim=-1).tolist() P4_bu = w_P3 * F.max_pool2d(P3_td, 3, stride=2, padding=1) + w_P4 * P4_td P5_bu = w_P4 * F.max_pool2d(P4_bu, 3, stride=2, padding=1) + P5_out return [P3_td, P4_bu, P5_bu] ``` 上述代码展示了简化版的BiFPN实现方式,其中包含了基本的操作逻辑如反卷积/最大池化来进行尺寸匹配,并采用softmax函数计算相对应的比例因子完成加权求和运算。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatpyMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值