Title

CARAFE: Content-Aware ReAssembly of FEatures
代码:

ICCV 2019 oral, Jiaqi Wan,香港中文大学
carafe: Content-Aware ReAssembly of FEatures,内容感知的重排列特征

Summary

一个轻量、感受野大、能感知内容的上采样方式,可以替代bilinear,实现更有意义的插值,在目标检测和分割任务中效果不错。

Contribution(s)

特征上采样,可用于所有需要特征金字塔的地方(密集形预测任务,如目标检测、语义/实例分割、超分、inpainting)

Problem Statement

特征上采样是深度学习常用的操作之一.
目前常用的上采样操作有:
(1)最近邻和双线性,只考虑相邻像素,没有丰富的语义信息
(2) 反卷积,一样大的卷积核 & 参数量和计算量大

作者提出Carafe上采样,它具备以下特征
(1)大的感受野
(2)内容感知
(3)轻量且迅速

Method(s)

image.png
总体思路:
(1)Kernel Prediction Module:对于每一个目标位置,根据它的内容,预测对应的卷积核;
(2)Content-aware Reassembly Module:用(1)中预测到的卷基于内容感知的特征重组

  • 输入为X:[C, H, W]
  • 上采样比例为σ,
  • carafe会生成一个新的特征X’,尺寸为[C, σH, σW]

对于X’的每个位置l’: (i’, j’),它都对应输入特征中的一个位置l: (i, j)。i = floor(i’/σ), j = floor(j’/σ)。

  • 用N(X_l, k)表示在X中,以X_l为中心的一个k*k的区域。

第一步,用函数Ψ为每个位置l’, 根据X_l预测这个位置对应的卷积核W_l’
image.png
第二步,以X_l为中心,取K_up的范围,和第一步算出来的W_l’计算,得到最终的输出特征X’_l’
image.png
大概留个印象,Ψ和Φ是什么,下文会具体讲。

Kernel Prediction Module

上文提到的Ψ
首先明确,输入的一个位置,对应的是输出上的σσ的区域。
因为这一步我们的目标是生成卷积核,所以每个目标位置我们都需要一个大小为K_up
K_up的卷积核,因此生成的卷积核尺寸应为HWC_up, C_up = σσK_up*K_up,即每个卷积核的权重数值会放置在对应位置的channel上。

了解作者要做什么之后再来看这张图就比较简单了。
image.png
(1)channel compressor:用1x1卷积降通道数
(2)content encoder:取了个好听名字,实际就是一个卷积层把通道数增大到需要的数目。按照作者的经验,这一步的卷积核大小是k_up-2比较好。之后接了一个类似pixelshuffle的重排,把通道上的权重数值取出来排列成二维平面的样子。
(3)kernel normalizer:对每个卷积核的权重用softmax做归一化,目的是不改变scale,实验数值的软选择(soft selection)。

Content-aware Reassembly Module

上文提到的Φ

理解了上一步,这一步还挺好懂的。
image.png
在输入特征中中,以X_l为中心的一个k_upk_up的区域,都对应σσ个k_upk_up的卷积核,可以生成需要的特征图上的σσ个位置。然后就顺顺利利地得到σσHWC的输出特征。

Evaluation

检测和实例分割的对比
image.png
和传统方法,像bilinear这些相比,优势还是很明显的
image.png
image.png

inpainting任务
image.png

Conclusion

对HxWx256的特征图上采样,carafe和deconv的计算量:HxWx199k : HxWx1180k

Notes

on-the-fly:即时

Criticism

理顺后发现本质是插值方法用了卷积,而这个卷积是根据content算出来的(拿CNN卷出来的)。简单但有意思

PS:在Image Generation里面做了对比实验,效果不是很突出,但也不亏。