GitHub

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の場合

    ACU

    • 各サンプリング点に付いて、そのウェイト$ 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%程度精度が向上
  • 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数)は従来と変わりなし
  • 学習されたオフセット offset
    • 出力に近い層ほどオフセットが大きくなる。conv3/xではstride=2のdilated convのようになった。
    • 入力に近い層ではlocalな特徴を、出力に近い層ではglobalな情報を取りたいから?

その他の実験

ResNet+CIFAR10/CIFAR100, AlexNet+Places365でも実験。同様に精度が僅かに向上した。

思ったこと

  • Deformable Convolutionでは動的にサンプリング位置を変えるが、ACUではそうではない
    • ACUでは複雑な変換には対応しきれない
    • ACUのオフセット値を静的にコンパイルしておけば、test時は高速な実行ができそう