一张图片理解BiFPN原理

一张图片理解BiFPN原理

直接上图

BiFPN原理

Notes:

  1. P3、P4、P5、P6、P7表示backbone网络的输出层,每个输出层都有对应的输出feature(包含channel数,feature的大小等信息),例如P3的输出feature大小为输入图片分辨率/ 2 3 2^3 23, P4的输出feature大小为输入图片分辨率/ 2 4 2^4 24,依次类推,P7的输出feature大小为输入图片分辨率/ 2 7 2^7 27,分别为图中的P3_in, P4_in, … , P7_in;
  2. 不带颜色的圆圈表示feature,带颜色的圆圈表示算子。有线连接的都表示权重w,向上向下连接都有resize操作,表示要么是upsampling要么是downsampling。

基本原理

BiFPN全称:bi-directional feature pyramid network。意思是,双向特征金字塔网络。
主要包含三大特点:

多尺度特征融合;

可参考FPN网络的原理理解

跨尺度连接;

可参考PANet网络原理理解

加权特征融合;

是BiFPN网络的创新之处,考虑到不同特征对输出特征的贡献大小不同,也就是重要性不同而引出的。

FPN_PANet_BIFPN

公式理解

图中已经给出了各输出层特征的加权计算公式,
下面是更加全面的公式帮助理解。
P 7 _ o u t = C o n v ( P 7 _ i n ∗ W 71 + R e s i z e ( P 6 _ o u t ) ∗ W 72 W 71 + W 72 + ϵ ) P7\_out =Conv(\frac{P7\_in*W71+Resize(P6\_out)*W72}{W71+W72+\epsilon}) P7_out=Conv(W71+W72+ϵP7_inW71+Resize(P6_out)W72)

P 6 _ o u t = C o n v ( P 6 _ i n ∗ W 63 + P 6 _ t d ∗ W 64 + R e s i z e ( P 5 _ o u t ) ∗ W 65 W 63 + W 64 + W 65 + ϵ ) P6\_out =Conv(\frac{P6\_in*W63+P6\_td*W64+Resize(P5\_out)*W65}{W63+W64+W65+\epsilon}) P6_out=Conv(W63+W64+W65+ϵP6_inW63+P6_tdW64+Resize(P5_out)W65)

P 5 _ o u t = C o n v ( P 5 _ i n ∗ W 53 + P 5 _ t d ∗ W 54 + R e s i z e ( P 4 _ o u t ) ∗ W 55 W 53 + W 54 + W 55 + ϵ ) P5\_out =Conv(\frac{P5\_in*W53+P5\_td*W54+Resize(P4\_out)*W55}{W53+W54+W55+\epsilon}) P5_out=Conv(W53+W54+W55+ϵP5_inW53+P5_tdW54+Resize(P4_out)W55)

P 4 _ o u t = C o n v ( P 4 _ i n ∗ W 43 + P 4 _ t d ∗ W 44 + R e s i z e ( P 3 _ o u t ) ∗ W 45 W 43 + W 44 + W 45 + ϵ ) P4\_out =Conv(\frac{P4\_in*W43+P4\_td*W44+Resize(P3\_out)*W45}{W43+W44+W45+\epsilon}) P4_out=Conv(W43+W44+W45+ϵP4_inW43+P4_tdW44+Resize(P3_out)W45)

P 3 _ o u t = C o n v ( P 3 _ i n ∗ W 31 + R e s i z e ( P 4 _ t d ) ∗ W 32 W 31 + W 32 + ϵ ) P3\_out =Conv(\frac{P3\_in*W31+Resize(P4\_td)*W32}{W31+W32+\epsilon}) P3_out=Conv(W31+W32+ϵP3_inW31+Resize(P4_td)W32)

参考论文:EfficientDet: Scalable and Efficient Object Detection
链接:https://arxiv.org/pdf/1911.09070v2

03-08
### BIFPN (BiFPN) 网络架构详解 #### 特征金字塔网络概述 特征金字塔网络(Feature Pyramid Network, FPN)用于多尺度目标检测,通过构建一个多尺度的特征图集合来提高检测性能。然而,传统FPN仅支持单一方向的信息流传递,在处理复杂场景下的物体检测时存在局限性。 #### 双向信息流动设计 为了克服这一挑战,BiFPN引入了双向信息流动的设计理念。这种结构不仅保留了原始自顶向下的路径,还增加了自底向上的连接方式,使得低层语义细节与高层抽象表示得以充分交互[^1]。 #### 加权特征融合机制 不同于简单的相加操作,BiFPN采用了更为灵活的加权策略来进行跨层次间的特征组合。具体而言,每个节点处都会根据相邻层级贡献的不同赋予相应的权重系数,以此达到动态调节各部分重要性的目的。这样的做法有助于突出那些对于当前任务更有价值的部分,进而改善整体表现[^2]。 #### 注意力机制的应用 值得注意的是,某些版本的BiFPN还在上述基础上集成了注意力机制,进一步强化了有效区域的选择性和响应强度。这一步骤允许模型更加聚焦于关键部位的同时抑制无关干扰因素的影响,最终实现了更好的特征提取效果[^3]。 ```python def bifpn_layer(features, num_channels=256): """ 实现一个基本的BiFPN层 参数: features(list): 输入特征列表 num_channels(int): 输出通道数 返回: list: 处理后的特征列表 """ # 自顶向下路径 p_top_down = [] for i in range(len(features)-1, -1, -1): if not p_top_down: p_in = features[i] else: p_in = tf.image.resize(p_top_down[-1], size=tf.shape(features[i])[1:3]) + features[i] p_out = conv_bn_relu(p_in, filters=num_channels) p_top_down.append(p_out) # 自底向上路径 p_bottom_up = [p_top_down.pop()] for feat in reversed(p_top_down): p_in = tf.image.resize(p_bottom_up[-1], size=tf.shape(feat)[1:3]) + feat p_out = conv_bn_relu(p_in, filters=num_channels) p_bottom_up.append(p_out) return p_bottom_up[::-1] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值