オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】RepVGG

Index

RepVGG

VGG の改善.

モチベーション

複雑な multi-branch designs の欠点を改善.

  1. 実装や、カスタマイズすることが難しくなり、予測処理が遅くなる
  2. モリーアクセスが多い

工夫

Model Re-parameterization

  • DiracNet
    • Diracnets: Training very deep neural networks without skip-connections
    • [2017]
    • arxiv.org

Winograd Convolution

Architecture



  • (A) : 通常の ResNet
  • (B) : RepVGG training
  • (C) : RepVGG inference

Training-time

 y\ =\ x\ +\ f(x)


  •  f は、residual block





また、足し合わせる時に次元が合っていなければ、 1\ \times\ 1 の conv を追加する.

 y\ =\ g(x)\ +\ f(x)


  •  g は、convolutional shortcut



ここまでは、通常の ResNet.

multi-branch architecture の良さは、モデルを浅くしたまま、アンサンブルのようなことができる.

そこで、RepVGG では、training 時には、さらに branch を追加した.

 y\ =\ x\ +\ g(x)\ +\ f(x)



Re-param for Plain Inference-time Model



以下のようなconvolution の重みを考える.

 W^{(3)}\ \in\ R^{C_{2}\ \times\ C_{1}\ \times\ 3\ \times\ 3}

 W^{(1)}\ \in\ R^{C_{2}\ \times\ C_{1}\ \times\ 1\ \times\ 1}


  •  C_{1} : input channel
  •  C_{2} : output channel





次に、BN のパラメータを考える.

  •  \mu^{(3)} : mean
  •  \sigma^{(3)} : standard deviation
  •  \gamma^{(3)} : learned scaling factor
  •  \beta^{(3)} : bias





次に、入力  M^{(1)} / 出力  M^{(2)} (特徴量) を考える.

 M^{(1)}\ \in\ R^{N\ \times\ C_{1}\ \times\ H_{1}\ \times\ W_{1}}
 M^{(2)}\ \in\ R^{N\ \times\ C_{2}\ \times\ H_{2}\ \times\ W_{2}}


実際に、上の multi-branch で、入力から出力を定式化すると以下のようになる.

(複数の conv + bn の計算をしなくても、一つの convで、同様の計算をすることが目標)


\begin{align}
M^{(2)}\ &=\ bn(M^{(1)}\ *\ W^{(3)},\ \mu^{(3)},\ \sigma^{(3)},\ \gamma^{(3)},\ \beta^{(3)}) \\
 &+\ bn(M^{(1)}\ *\ W^{(1)},\ \mu^{(1)},\ \sigma^{(1)},\ \gamma^{(1)},\ \beta^{(1)}) \\
 &+\ bn(M^{(1)},\ \mu^{(0)},\ \sigma^{(0)},\ \gamma^{(0)},\ \beta^{(0)})
\end{align}


bn の計算は、

 bn(M,\ \mu,\ \sigma,\ \gamma,\ \beta)_{:,i,:,:}\ =\ (M_{:,i,:,:}\ -\ \mu_{i})\ \displaystyle \frac{\gamma_{i}}{\sigma_{i}}\ +\ \beta_{i}





上の計算と同等の conv を1つになるように変換する.

変換1 : Conv + BN -> Conv



変換2 : 1x1 conv, identity mapping -> 3x3 conv

変換3 : 3x3 conv x3 -> 3x3 conv

重みを足し合わせる.

参考

  • RepVGG: Making VGG-style ConvNets Great Again
    • [2021]
    • 1 Introduction
      • VGG / Inception / ResNet / DenseNet
      • Xception / MobileNet / ShuffleNet
    • 2 Related Work
      • 2.3 Model Re-parameterization
      • 2.4 Winograd Convolution
    • 3 Building RepVGG via Structural Re-param
      • 3.2 Training-time Multi-branch Architecture
      • 3.3 Re-param for Plain Inference-time Model
    • arxiv.org

Web サイト