ASFF网络引入了自适应结构特征融合模块,用于融合多个不同层次的特征图。传统的目标检测网络通常只使用单一层次的特征图,而ASFF网络通过动态地选择和融合多层特征图,使得网络能够更好地捕捉目标的多尺度信息。
ASFF网络首先通过主干网络提取不同层次的特征图。然后,它使用自适应的注意力机制来对这些特征图进行加权融合,以便更好地保留重要的特征信息。最后,融合后的特征被传递给目标检测头部进行目标分类和定位。
相比传统的目标检测方法,ASFF网络在准确性和性能方面都有所提高。它能够更好地捕捉目标的多尺度信息,从而在目标检测任务中取得更好的效果。
特征金字塔的一大缺点是不同尺度特征的不一致性,特别是对于一阶段检测器。确切地说,在FPN形式的网络中启发式地选择特征,高层语义信息中检测大目标、低层语义信息中检测小目标。当某个目标在某一层被当做正类时,相应地该目标区域在其它层被当做负类。如果一幅图像中既有大目标也有小目标,那么不同层间的特征的不一致性将会影响最后检测结果(大目标的检测在某一层,小目标的检测在另一层,但是网络的多尺寸检测不会仅仅检测一个特定的区域,而是综合整幅图进行检测。在特征融合时,其它层很多无用的信息也会融合进来)。
网络结构图
ASFF的关键思想是自适应地学习每个尺度特征图的融合空间权重,分为两步:恒等缩放和自适应融合。
- 对于ASFF-1:对level-3的特征图做
3x3MaxPool(stride=2)
+3x3Conv(stride=2)
得到X(3→1)
,对level-2的特征图做3x3Conv(stride=2)
得到X(2→1)
. - 对于ASFF-2:对level-3的特征图做
3x3Conv(stride=2)
得到X(3→2)
. 对level-1的特征图做1x1Conv
,并resize到原图分辨率2倍大小得到X(1→2)
. - 对于ASFF-3:对level-2的特征图做
1x1Conv
,并resize到原图分辨率2倍大小,得到X(2→3)
.对level-1的特征图做1x1Conv
,并resize到原图分辨率4倍大小,得到X(1→3)
【注意:X(3→1)表示将leve3恒等缩放到ASFF1指定的尺寸,其他同理】
自适应融合
以ASFF-3为例,图中的绿色框描述了如何将特征进行融合,其中X1,X2,X3分别为来自level1,level2,level3的特征,与为来自不同层的特征乘上权重参数α3,β3和γ3并相加,就能得到新的融合特征ASFF-3,如下面公式所示:
以ASFF-3为例,图中的绿色框描述了如何将特征进行融合,其中X1,X2,X3分别为来自level,level2,level3的特征,与为来自不同层的特征乘上权重参数α3,β3和γ3并相加,就能得到新的融合特征ASFF-3,如下面公式所示:
对于权重参数α,β和γ,则是通过resize后的level1~level3的特征图经过1×1的卷积得到的。并且参数α,β和γ经过concat之后通过softmax使得他们的范围都在[0,1]内并且和为1:
对于权重参数α,β和γ的详细计算过程:
假设我们有 3个不同尺度的特征图(Level1, Level2, Level3),ASFF 的目标是自适应地融合它们,使得不同层的信息能更好地协作。权重α,β,γ决定了每一层的贡献程度。
步骤 1:特征图 Resize到相同尺寸
- Level1(高层,分辨率低,如 4×4)
- Level2(中层,分辨率中等,如 8×8)
- Level3(底层,分辨率高,如 16×16
ASFF 要求所有特征图先调整到相同尺寸(比如都 resize 到 8×8):
- Level1(4×4)→上采样到 8×8
- Level3(16×16)→下采样到 8×8
步骤 2:计算权重 α, β, γ
对每一层调整后的特征图分别用 1×1 卷积计算一个权重张量(大小和特征图一致,比如 8×8)。
然后 concat(拼接)这些权重张量,再 softmax归一化,使得 α + β + γ = 1(每个位置的值在 [0,1] 之间)。
对于这个1×1的卷积权重:
每一个level都有一个独立的1×1卷积核,即1×1卷积在同一level权重是共享的(即同一层内所有空间位置使用相同的卷积核参数),但不同层级(Level 1/2/3)的 1×1 卷积是独立的。
每个层级的 1×1 卷积是分开训练的,因此不同层级的权重计算方式不同。
具体计算过程
(1) 输入特征图
假设调整后的特征图尺寸均为 H×W×C
(如 8×8×256):
- Level 1:
8×8×256
- Level 2:
8×8×256
- Level 3:
8×8×256
(2) 对每一层应用 1×1 卷积
每个层级独立通过 1×1 卷积,输出一个H×W×1
的权重张量:
- Level 1 → 1×1 Conv →
8×8×1
(α_raw) - Level 2 → 1×1 Conv →
8×8×1
(β_raw) - Level 3 → 1×1 Conv →
8×8×1
(γ_raw)
也就是每个层级经过1×1的卷积,输出一个二维张量,三个层级输出3个(后续Concat可以认为是将每一个张量当作一个通道进行拼接成一个[3,8,8]的三维张量)
注意:这里的 1×1 卷积是 通道压缩(256→1),但空间维度(H×W)上权重共享。
(3) Concat + Softmax
-
将三个
8×8×1
的权重张量拼接成8×8×3
。 -
对每个空间位置(共 H×W 个点)的 3 个值(α-raw, β-raw, γ-raw)分别做 softmax:
-
例如位置(i,j):
α = exp(α_raw[i,j]) / (exp(α_raw[i,j]) + exp(β_raw[i,j]) + exp(γ_raw[i,j])) β = exp(β_raw[i,j]) / (...) γ = exp(γ_raw[i,j]) / (...)
-
最终得到
α, β, γ
均为8×8×1
,且满足 每个位置的 α + β + γ = 1。
-
(4) 最终融合特征
- ASFF 输出 = α × Level1 + β × Level2 + γ × Level3