Gated-SCNN: Gated Shape CNNs for Semantic Segmentationを読んだのでメモ
はじめに
Gated-SCNN: Gated Shape CNNs for Semantic Segmentationを読んだのでメモ.
気持ち
従来のCNNを使ったsegmentation手法は色だの形だのテクスチャだのをCNNの内部で一緒くたに扱っていて,その扱い方を疑問視した論文.ここではshapeに関する推論を分離したほうがいいという仮説を立てて,通常のCNN(regular stream)にshapeを扱うブランチ(shape stream)を加えたtwo stream型のモデルを提案.
Gated Shape CNN
上で説明した通り,regular streamとshape streamからなるモデルを作る.その際にちゃんとshape streamがshape(ここではboundary)に関する情報のみを扱えるよう,Gated Convolution Layer (GCL)を導入する.
Regular Stream
Regular streamは特筆すべき事はなく,いわゆる従来のbackboneに当たる.なので入力を画像とし,出力はとするモデル.ただし,はstrideを表す.今回はモデルにResNetライクなモデルを使用とのこと.以降Regular Streamはとして表現する.
Shape Stream
Shape streamはで表記され,微分画像とregular streamの1層目の出力を入力とし,semantic boundaryを出力とする.モデルの構造としてはいくつかのresidual blockとGCLからなる.このGCLのおかげでshape streamは境界情報のみを扱うことが可能とのこと(詳細は後述).出力はのboundary mapでground-truthはsemantic segmentationのラベルから作れるため,binary cross entropyによる教師あり学習が可能.
Fusion Module
Fusion Moduleはで表記され,二つのstreamの特徴マップを統合してsemantic labelを出力する役割をする.噛み砕いて言えばdecoder.Deeplabで使われたatrous spatial pyramid pooling (ASPP)が導入されている.
Gated Convolution Layer
GCLはこの論文の最も重要な部分で,簡単に言えばshapeに関する情報以外を削ぎ落とす役割をする.
をregular streamとshape streamの中間出力のインデックス()とする.GCLを適用するため,まずアテンションマップをを結合させた特徴マップから1x1 convolution とシグモイド関数を通して得る.
このアテンションマップとchannel-wiseの重み付け,residual connectionを使って次のような変換を行う層をGCLとする.
は要素積を表す.アテンションマップは重要な境界情報を持つ領域により大きな重みを持つものと解釈可能らしい.GCLは3箇所に導入し,アテンションマップを出す際の特徴マップの結合時に,との解像度の差を埋めるためbilinear補間を利用したとのこと.
Joint Multi-Task Learning
通常のsemantic segmentationのタスクに加え,shape streamのboundary predictionのタスクが入るため,それぞれのロスを足し合わせたものを最終的なロスとする.ただし,足し合わせる際にハイパーパラメータとなる重み係数を導入する.
Dual Task Regularizer
Semantic segmentationの結果から計算されたsemantic boundaryと正解(shape streamの正解に使われれる値)が等しくなるような正則化項を考える.semantic boundaryを次のように計算する.
はガウシアンフィルタを表す.正解値も真のsemantic labelを使って同様に計算される.ロス関数としては次のような絶対誤差を利用.
は非ゼロ要素の入ったピクセルを表す.このロスはshape streamのboudary predictionとsemantic segmentationの整合性を暗に要請することになる.ただし,上記のロスを単純に計算して微分をしてもargmaxのせいでbackprop不可なためGumbel softmaxで代用するとのこと.
また同様に,boundary predictionとsemantic segmentationの一致を取るための次のような正則化も加える.
は画像のピクセルとクラスカテゴリを表しており,は指示関数.閾値は0.8としたとのこと.boundary上のsemantic labelが正しいかどうかを判断するもの.そこまで意味があるかはよくわからない.
まとめ
実験で,GCLのアテンションやshape streamからfusion moduleに繋がる部分の可視化をしていて,それを見る限りはうまくboundaryを分離できているよう.ただこんな上手くいくものかと言う印象もある.