Active Convolution: Learning the Shape of Convolution for Image Classification
タグ: CNN classification
概要
[1703.09076] Active Convolution: Learning the Shape of Convolution for Image Classification
サンプリング位置を自由に変えられるConvolution Unitを提案
Active Convolution Unit (ACU)
-
$ K $個のサンプリング点を考える。下図はK=5の場合
- 各サンプリング点に付いて、そのウェイト$ w $と位置$\left( \alpha, \beta \right)$を学習する。
- パラメータ数は、入力チャンネル数$ C_1 $, 出力チャンネル数$ C_2 $, サンプリング点数$ K $の場合で $ 3 C_2 C_1 K - 2$となる(カーネルの中心はオフセット $\left( 0, 0 \right)$で固定)。普通のConvolutionの約3倍。
- $\left( \alpha, \beta \right)$は小数値となるので、近傍4点で線形補間する。この線形補間の式を元にbackpropagationする。
- 学習の際の工夫
- offsetの学習には、gradientの方向だけ用いる。
- $ \left( \frac{\partial L}{\partial \alpha}, \frac{\partial L}{\partial \beta} \right) $の方向にoffsetを更新する。gradientのmagnitudeは使わない。
- 学習初期はweightだけ更新し、offsetは更新しない。
- 後述する実験で、0.1 ~ 0.2%程度精度が向上
- offsetの学習には、gradientの方向だけ用いる。
- Caffeで実装。普通のconvolutionより約1.6倍遅い。
実験
設定
- CIFAR10, CIFAR100
- ネットワーク構造
Layer Name | Type | Size |
---|---|---|
conv0 | 1x1 conv | 16 |
conv1/1 | 3x3 conv | 48 |
conv1/2 | 3x3 conv | 48 |
conv2/1 | 3x3 conv stride=2 | 96 |
conv2/2 | 3x3 conv | 96 |
conv3/1 | 3x3 conv stride=2 | 192 |
conv3/2 | 3x3 conv | 192 |
fc | 1x1 conv | 1000 |
- 全ての3x3 convをACUに置き換えて比較
- L2正則化
- Data Augmentation
- random clopping
- horizontal flip
- 回転はしていない
結果
- CIFAR10で0.68%, CIFAR100で0.74%精度向上
- 学習速度(iteration数)は従来と変わりなし
- 学習されたオフセット
- 出力に近い層ほどオフセットが大きくなる。conv3/xではstride=2のdilated convのようになった。
- 入力に近い層ではlocalな特徴を、出力に近い層ではglobalな情報を取りたいから?
その他の実験
ResNet+CIFAR10/CIFAR100, AlexNet+Places365でも実験。同様に精度が僅かに向上した。
思ったこと
- Deformable Convolutionでは動的にサンプリング位置を変えるが、ACUではそうではない
- ACUでは複雑な変換には対応しきれない
- ACUのオフセット値を静的にコンパイルしておけば、test時は高速な実行ができそう