GitHub

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

タグ: CNN acceleration quantization

概要

[1603.05279] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

  • CNNのカーネル行列$ \bf{W} $を$ \pm 1 $に2値化することで、Convolutionの計算量を減らして高速化。
  • カーネル行列だけでなく入力$ \bf{I} $を2値化するモデルも提案。58倍の高速化に成功したが精度は結構落ちた。

手法

カーネル行列$ \bf{W} $の2値化(Binary-Net)

各要素が$ \pm 1 $のいずれかである行列$ \bf{B} $と、スケール変数$ \alpha $を用いて$ \bf{W} $を近似する。

近似誤差$ J \left( \bf{B}, \alpha \right) $の最小化問題を考える。 誤差はL2ノルムを考える。

これは解析的に解けて、

となる。ただし、$ n $は$ \bf{W} $の要素数。

学習

Forward propagation

binarizeしたフィルタ$ \tilde{\bf{W}} = \alpha \bf{B} $を用いてconvolutionを計算する。 ウィンドウ内の入力をすべて加減算したあと、最後に$ \alpha $を乗じる。

Backward propagation

Forward propagation同様、$ \tilde{\bf{W}} $を用いる。

Update

$ \tilde{\bf{W}} $を用いて計算した誤差勾配$ \dfrac{\partial \mathcal{L}}{\partial \tilde{\bf{W}}} $を用いて$ \bf{W} $を更新する。

入力行列$ \bf{I} $もbinarizeする場合(XNOR-Net)

基本は$ \bf{W} $と同じようにbinarizeすればよい。 ただし、スケール変数の計算の無駄をなくすため、Convolutionに工夫がされている。

結果

  • 速度:VGG, ResNet, AlexNetについて検証
    • 実測値で58倍速を達成した
    • カーネルのチャンネル数が少ない場合、フィルタのサイズが小さい場合は効果が薄い
  • 精度:ImageNetのClassification
    • ResNet18で、Binary-Netの場合10%程度Top1低下
    • XNOR-Netだと約20%の低下

その他

  • 著者により公開されているTorch実装は、論文に載っていない工夫を色々やっている。
  • 著者は高速物体認識のYOLOをやっている人。