スポンサードリンク



こんにちは。sinyです。

本記事は、ディープラーニングの畳み込み処理の1つである1x1 Convolutions(pointwise convolution)の仕組みと効果について、学習を兼ねてまとめました。

認識違い等あれば、ご指摘いただけると幸いです。

 

1x1 Convolutions(pointwise convolution)とは?

1x1 Convolutions(pointwise convolution)とはカーネルサイズが1x1の畳み込み層(CNN)のことです。

以下のようにカーネルサイズが1のフィルタを使って入力データに畳み込んでいくわけですね。

1x1で畳み込んでも結局意味ないんじゃないのか?

と思う方もいるかもしれませんがそんなことはなくちゃんとした意味があります。

カーネルサイズ1の畳み込み処理の結果、畳み込み層から出力される結果は入力の各チャンネルを足し算するだけの処理です。

先ほどの畳み込みの例(図)だと、入力(x)→1x1 conv →16ですね。

出力のチャンネル数が1つだけであれば、入力xをチャンネルごとに線形和をとったものになるわけです。

もし、出力チャンネルが複数であれば、異なる係数でチャンネルごとに線形和をとったものを出力チャンネル分だけ用意することになります。

1x1 conv層の出力チャンネル数を変化させるkとおで、入力(x)のチャンネル数を変化させることができます。

つまり、入力xの特徴量毎の線形和を計算する1x1 conv処理は入力xの次元圧縮をすることと同等です。

入力xをチャンネル数C→C'へ圧縮する際にxの情報が欠落しにくい線形和の係数を学習します。
ここで言っている線形和の係数=1x1convのカーネルの重みのことです。

カーネルサイズ1の畳み込み処理を行う理由は?

1x1 convを利用する理由の1つには、既に出てきた通り次元圧縮の効果があるという点です。

次元圧縮によってニューラルネットワークにおける計算コストを抑えるという効果もあります。

この次元圧縮によって計算コストを抑えることで大きなメモリや計算能力がないエッジ端末などでディープラーニングを行うMobileNetsと呼ばれるモデルでも利用されているようです。

他の理由としては、通常は3 x 3 Convのように空間方向の畳み込みを行いますが、必ずしも空間方向の演算が必要とは限らないようなケースでは、1x1のカーネルを利用して空間方向のフィルタ処理をカットした形でPixel毎のAffine(線形結合)処理を行うことで、不要な空間方向の特徴抽出を省き、演算量を抑えながら表現力を向上させるという用途に使われます。

また、画像枚数を任意の枚数に調整する等の用途に用いられます。

1x1 Convolutions(pointwise convolution)はResNetをはじめ様々な提案モデルで利用されているCNNのネットワーク構造です。

以上、1x1 Convolutions(pointwise convolution)の仕組みと効果のまとめでした。

 

おすすめの記事