CNNの畳み込み層を再利用することにより、パラメータ数とメモリ使用量の大幅な削減を可能にする論文を読んだので要点をまとめます
論文リンク
最初にリンクを貼っておきます
pdf
https://arxiv.org/pdf/1901.09615.pdf
github
https://github.com/okankop/CNN-layer-reuse/tree/master/models
論文の概要
1. Introduction
AlexNetの最初の層の重みを可視化すると、色付けしたところのように、かなり似た重みが多い(Fig 2)
そのため、多くのConvolution層を用意してもそれは無駄なのではないか?
下の図のように、Convolution層を再利用すれば、パラメータの数やメモリ使用量の削減に繋がるのではないか? (Fig 1)
これを以降、Layer Reuse Network (LruNet) と呼ぶことにする。
2. Approach
2.1 Layer Reuse (LRU)
層の再利用(Layer Reuse)は以下のように行う(Fig 3)
DwConvとPwConvを順に作用させ、それと入力をconcatさせて、Channelをシャッフルする
- PwConvの
group=8
は実験的に求められた値である -
Channel Shuffle
は、suffleNet を参考にしたが、元々の実装では最初と最後のチャンネルがシャッフルされないままだったので、単純にチャンネルの前半と後半を入れ替えてシャッフルした
(注) DwConvとPxConvについて参考
DwConv(depth wise convolution)
https://www.robotech-note.com/entry/2017/12/27/084952
PxConv(pixel wise convolution)
https://www.robotech-note.com/entry/2017/12/24/191936
2.2 NetworkArchitecture
LruNetのアーキテクチャは以下のようになっている (Table 1)
- Nは何回LRU Blockを繰り返すかを示している。
- この表には記載されていないが、$\alpha$(width multiplier)という変数があり、これは最初のConv層の出力を何倍にconcatして広げるかという値である。(githubに
width_mult
という変数名で書かれているのでそちらを参照するとわかりやすい)
これらをまとめて、N-LruNet- αxという名前で呼ぶこととする。

3. Experiments
Table 2は各種類のLruNetのCIFAR10での精度を示している。
14-LruNet-1xがもっとも精度が良く、それ以上にNを大きくしても精度の向上は見られなかった。
Convolution層のパラメータ数はどれも等しく125kであるが、Nの値が大きくなるにつれパラメータ数が増加しているのは、Bach Normalization層が増えていくからである。
Table 3はchannel shufflingを加えた場合を加えなかった場合の精度を示している。
channel shufflingを行なったほうが精度が良くなることがわかる。
Table 4: パラメータ数をかなり抑えて同等の精度が出せる
Table 5: CIFER-100で実行した結果
width multiplierを2にしてdropoutを0.7にあげて実行している
Table 7:各データセットでの実行結果のまとめ
LruNetはパラメータ数は小さいが、ほかのモデルとほぼ同等の性能を持っている