grouped convolution(グループ化畳み込み)の概念を理解する

経緯

mobilenetの実装とモデルを調べる中で出てきた概念として、pointwise convolutionとdepthwise convolutionの理解をまとめてきた。今回はその発展系で、grouped convolutionについてまとめる。
mobilenetは基本的に、pointwise convolutionとdepthwise convolutionを組み合わせた、depthwise separable convolutionの重ね合わせで構成されている。
pointwise convolutionは通常の畳み込み関数のフィルタサイズ1x1にするだけで構成できるので、どのフレームワークでもすぐに実装できるが、depthwise convolutionは実装が特殊、かつ実装方法がまちまちなので、フレームワークによっては使用できないものある。その場合に、depthwise convolutionの代わりにgrouped convolutionを代用することができることを示す。

t-nkb.hatenablog.com

t-nkb.hatenablog.com

grouped convolution(グループ化畳み込み)とは

グループ化畳み込みの歴史は長く、Alexnetの際にはすでに実装されていた。基本的な概念はシンプルで、入力層をレイヤー方向にgroup分割してそれを畳み込みし、最後に結合して出力とするもの。Alexnetでは、片側のグループで白黒の認識フィルタを、もう片側でカラーの認識フィルタを学習することができた…と報告されて話題になっていた。
下図を見れば分かる通り、ほぼdw畳み込みと同じ構造をしており、L=groupとすることでグループ化畳み込みでdw畳み込みが表現できることから、dw畳み込みはgroup畳み込みの一部と考えることもできる。
この考え方はモデル実装時には重要で、darknet等のdw畳み込みが実装されていないフレームワークでも、グループ化畳み込みが実装されていれば、dw畳み込みと同等の動作をさせることができる。ただし、dw畳み込みは実装により速度が大きく変わるため、期待する速度が得られるかどうかはフレームワークによる部分が大きい点は注意が必要である。

[グループ化畳み込み]
f:id:t_nkb:20171227204201j:plain:w400

[dw畳み込み]
f:id:t_nkb:20171227081429p:plain:w400