【論文紹介】Squeeze-and-Excitation Networks(CVPR 2018) - 5月 10, 2019 こんにちは、ぐぐりら(@guglilac)です。 今回は、Squeeze-and-Excitation Networks(CVPR 2018)を読んだのでまとめてみます。 ## 3行まとめ CNNによって得られる特徴マップをそのまま出力するのではなく、チャンネル間の関係に対して適応的にattentionをかけて重み付きの特徴を出力するSqueeze-and-Excitation Networksを提案。 ## Squeeze-and-Excitation 基本的にはSqueeze-and-Excitationモジュールはattentionといっていいくらい似ている。 resnetとかが吐いた特徴マップを空間方向にglobal average poolingしてチャンネルの長さのベクトルに潰して(squeeze)それをFCレイヤに二回通して(excitation)sigmoidをかけて0~1に正規化して得られるattentionもどきのベクトルをresnetが吐いた特徴マップとchannel-wiseに掛け合わせて重みつけて出力する。 チャンネル間の関係を考慮して重みづけできるのがいいらしい。 計算時間やモデルのパラメータ数的な負担はほぼなく、非常にエコ。実装も楽だしこれで精度が上がるならいいねっていう(というかresnet自体が重量級なのでそれに比べたらっていう) ## 関連 空間方向に関してはあったけどチャンネル間は初めてだぜ、だって 基本的にresidual attention networkと似ている。 ## SE module 全体図はこちら ### Squeeze Channel枚あるmap一枚一枚を、global average poolingします。 空間方向の平均をとるので、全部でChannel個の平均が得られます。 空間方向にぎゅっと圧縮するイメージです。 出力は(1,1,C)になります ### Excitation 圧縮したあと、チャンネル間の関係を取り出すために二層の全結合層に通し、各成分にシグモイド関数をかけて0~1にします。(softmaxではないので和は1ではない) 一層目でユニット数をC/rに一度削減し、二層目でCに戻すことで表現力を制限しています。 rはreduction rateです。(実験では基本的にはr = 16で固定) δ : ReLU W1 = (C/r ,C) W2 = (C, C/r). 0~1に正規化された(1,1,C)のベクトル(気持ちとしてはChannel wiseなAttentionベクトル)を、SE moduleの入力にチャンネルごとに掛け合わせて出力します。 ## SE net SE moduleはCNN系のネットワークに組み込むことができます。そうしてできるネットワークの総称がSE-netと呼んでいます。 組み合わせ方は以下の通りです。 ### 非Residualの時 Inception netやVGGなどに適用する場合です。これまでの説明の通り、Convolutionの出力を受け取ってSE moduleがattentionベクトルを計算する形になっています。 ### Residualの時 Residualなモデルに組み込む場合は以下のようにしています。 Channel wiseに適応的な重み付けをしたあとにskip conectionを接続するような形になっています。 (考えられる他の構成としては、SE moduleをskip conectionの外側に持ってくるものがあると思いますが、それだと学習がうまく行かなそうだなと感じました。論文では特に理由は書いてあ りませんでしたが) ## 計算量 空間、時間計算量ともにそんなに大きくないのでエコです、というのが論文の主張です。 ### 空間計算量 追加されるパラメータは二層のFC層の部分のみで、以下のようにかけます。 rはreduction rate, またN_s,C_sはそれぞれstage sに含まれるblockの個数、stage s中のchannel数を表します。 Resnet-50が約25millionパラメータ使っている一方、SEにすると追加でおよそ2.5millionのパラメータが必要になります。 SE moduleを追加するとおよそ元のmodelに対して10%のパラメータ数の増加でした Channel数が大きいほどパラメータが増えるので、ネットワークの最後の方が多くのパラメータを必要とします が 実験してみると、ネットワークの最後のstageにはあまりSE moduleを入れても入れなくても変わらなそうなので、last stageからSE moduleを外せば効率よくパラメータを削減できる!と言っています。 実験の最後で議論があるので詳しくはそちら。 ### 時間計算量 Resnet-50では3.86GFLOPs, SE-Resnet-50だと3.87GFLOPsで0.26%の増加でした。 Resnet-50では190ms, SE-Resnet-50だと209msでした。(GPU) Resnet-50では164ms, SE-Resnet-50だと167msでした。(CPU) あまり増えないので大丈夫、という主張でした ## 実験 * ImageNet classification * Scene Classificstion * Object Detection on COCO * Analysis という構成. ImageNetの分類タスクでいい性能がでたのはコンペで有名だからまあいいとして、その他のデータセットにも有用でしたというのがScene Classificstion,Object Detection on COCOで示されている。 Analysisでは、 * reduction ratio * excitation について分析をしている。 ### reduction ratio reduction ratioはexcitationの部分で一度FC層を用いて次元削減する時の削減率を表している。 r=4なら次元数を一度4分の1にしてからまた戻す、みたいな。 これを大きくしていく(つまり削減しまくると)モデルの表現力が落ちるから過学習気味になる。modelのパラメータ数はもちろん減る。 実験ではこのtrade offがちょうどいい点として、r=16をchoiceしたと言っている。 ### excitation 各stageの各blockにつき一つ、各チャンネルの重みベクトルのようなものを計算するが、それを可視化してみる実験。 ImageNetで実験していて、4つのクラスのデータで実験している。 入力側に近い層のexcitationはクラスごとに差があまりなく、層が進むにつれてクラスごとにexcitationが異なっていることが観察される。 初期はクラスに依存しない普遍的なexcitationが獲得されているのに対し、層が進むとそれぞれのクラスに応じた特徴に焦点を当てるようにexcitationが変化するのが考察ポイント。 また、最後のstageの最後のblockがどのクラスも他のクラスの定数倍のexcitationが獲得されていること、その一つ前のblockがほぼ全ての要素が1になっているexcitationが得られていることなどから、この辺りのparameterを無くしても性能はあまり落ちないことが予想される。 性能をあまり落とさずにparams数を削減することを考えた場合、出力層直前のse blockを落とすのがいいのでは、というのが筆者の主張。 実際に最後のstageのSEを外してみると、top-1 errorは0.1%ほど増加したがSE部分のparameter数はfullで入れた場合の40%ほどまで削減できたらしい。 ## おわりに 今回の論文ではSEモジュールをつけた場合とつけなかった場合の比較のみだったので、 他のAttentionとの比較なども見てみたいと思いました。 この記事をシェアする Twitter Facebook Google+ B!はてブ Pocket Feedly コメント
コメント
コメントを投稿