GhostNet: More Features from Cheap Operations
论文地址:https://arxiv.org/abs/1911.11907
设输入为 X ∈ R c × h × w X\in \mathbb{R}^{c\times h\times w} X∈Rc×h×w,其中 c c c是输入通道数, h h h和 w w w分别是高和宽。卷积层可表述为:
Y = X ∗ f + b Y=X*f+b Y=X∗f+b其中, ∗ * ∗是卷积操作, b b b是偏置项, Y ∈ R h ′ × w ′ × n Y\in \mathbb{R}^{h'\times w'\times n} Y∈Rh′×w′×n是输出的 n n n维feature map, f ∈ R c × k × k × n f\in \mathbb{R}^{c\times k\times k\times n} f∈Rc×k×k×n是卷积核。
这个卷积过程中,FLOPs可以用 n ⋅ h ′ ⋅ w ′ ⋅ c ⋅ k ⋅ k n\cdot h'\cdot w'\cdot c\cdot k\cdot k n⋅h′⋅w′⋅c⋅k⋅k来计算。这个数字往往非常巨大。然而,生成的feature map具有冗余性,因此,如果要得到相同的feature map,完全可以通过卷积生成一部分intrinsic feature map,另一部分通过对intrinsic feature map进行cheap transform得到。这样就可以缩减运算量。
利用
Y = X ∗ f Y=X*f Y=X∗f生成了 m m m个通道的intrinsic feature map Y ′ ∈ R h ′ × w ′ × m Y'\in \mathbb{R}^{h'\times w'\times m} Y′∈Rh′×w′×m, m ≤ n m\le n m≤n,偏置项为了简化而略去了。
为了得到 n n n个通道的feature map,对intrinsic feature map进行一系列线性运算:
y i j = ϕ i , j ( y i ′ ) , ∀ i = 1 , ⋯ , m , j = 1 , ⋯ , s y_{ij}=\phi _{i,j}\left( y_i' \right) ,\ \forall i=1,\cdots ,m,\ j=1,\cdots ,s yij=ϕi,j(yi′), ∀i=1,⋯,m, j=1,⋯,s其中, y i ′ y_i' yi′是intrinsic feature map中的第 i i i个map, ϕ i , j \phi _{i,j} ϕi,j是 y i ′ y_i' yi′生成第 j j j个ghost feature map的线性运算,也就是说,每个 y i ′ y_i' yi′可以生成 s s s个ghost feature map { y i j } j = 1 s \left\{ y_{ij} \right\} _{j=1}^{s} {yij}j=1s;而 ϕ i , s \phi _{i,s} ϕi,s是恒等映射,将intrinsic feature map保留至最终输出的feature map中。
由此得到了 n = m ⋅ s n=m\cdot s n=m⋅s 维的feature map Y = [ y 11 , y 12 , ⋯ , y m s ] Y=\left[ y_{11},y_{12},\cdots ,y_{ms} \right] Y=[y11,y12,⋯,yms],作为Ghost module的输出。
由于有1次恒等映射,因此有 m ⋅ ( s − 1 ) = n s ⋅ ( s − 1 ) m\cdot \left( s-1 \right) =\frac{n}{s}\cdot \left( s-1 \right) m⋅(s−1)=sn⋅(s−1)次线性运算,每个线性运算核大小平均为 d × d d \times d d×d。加速比可以计算为:
r s = n ⋅ h ′ ⋅ w ′ ⋅ c ⋅ k ⋅ k n s ⋅ h ′ ⋅ w ′ ⋅ c ⋅ k ⋅ k + ( s − 1 ) ⋅ n s ⋅ h ′ ⋅ w ′ ⋅ d ⋅ d = c ⋅ k ⋅ k 1 s ⋅ c ⋅ k ⋅ k + s − 1 s ⋅ d ⋅ d ≈ s ⋅ c s + c − 1 ≈ s r_s=\frac{n\cdot h'\cdot w'\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot h'\cdot w'\cdot c\cdot k\cdot k+\left( s-1 \right) \cdot \frac{n}{s}\cdot h'\cdot w'\cdot d\cdot d}\\ =\frac{c\cdot k\cdot k}{\frac{1}{s}\cdot c\cdot k\cdot k+\frac{s-1}{s}\cdot d\cdot d}\approx \frac{s\cdot c}{s+c-1}\approx s rs=sn⋅h′⋅w′⋅c⋅k⋅k+(s−1)⋅sn⋅h′⋅w′⋅d⋅dn⋅h′⋅w′⋅c⋅k⋅k=s1⋅c⋅k⋅k+ss−1⋅d⋅dc⋅k⋅k≈s+c−1s⋅c≈s其中, d × d d \times d d×d和 k × k k \times k k×k的量级相似,而 s ≪ c s\ll c s≪c。
类似地,压缩比可以计算为:
r c = n ⋅ c ⋅ k ⋅ k n s ⋅ c ⋅ k ⋅ k + s − 1 s ⋅ d ⋅ d ≈ s ⋅ c s + c − 1 ≈ s r_c=\frac{n\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot c\cdot k\cdot k+\frac{s-1}{s}\cdot d\cdot d}\approx \frac{s\cdot c}{s+c-1}\approx s rc=sn⋅c⋅k⋅k+ss−1⋅d⋅dn⋅c⋅k⋅k≈s+c−1s⋅c≈s
如图,Ghost bottleneck和ResNet中的residual block相似:
将MobileNetV3中的bottleneck block替换成G-bneck,搭建了GhostNet:
首先进行一个验证性实验,观察原始feature map和生成的ghost feature map之间的重构误差。
以图1中的3对feature map为例,ResNet50第一个残差块提取出的特征,把左边的作为输入,右边的作为输出,用深度卷积学习映射关系(这是一个线性的关系),深度卷积大小为 d d d, d d d取不同值时,MSE值为:
由表可知,MSE值很小,也就是说,feature map之间确实存在着很强的关联性,feature map存在着冗余性。
参考资料:
CVPR2020 | GhostNet:超越MobileNetV3!使用简单的线性变换生成特征图的轻量级网络