ろぐれこーど

限界組み込みエンジニアの学習記録とちょっぴりポエム

A Review on Deep Learning Techniques Applied to Semantic Segmentationを読んだ

deep learning によるsemantic segmentation用の手法と、データセットに関するサーベイ論文。arXivに2017年4月にアップロードされたもので、筆者曰くdeep learningを中心としたsemantic segmentationのサーベイはこれが初めてらしい。

論文は以下
https://arxiv.org/abs/1704.06857

大きく2D, 2.5D(RGB+depth), 3Dのデータセットと、それに対する手法が紹介されている。分量が多いが、一部だけ抜粋して学習記録として残しておく。

Common Deep Learning Architecture

多くの手法はclassificationで提案されたモデルをベースとしている。

  • AlexNet
    一番最初に結果だしたやつ。畳み込み+プーリングした後に全結合層に入れる。大元のアーキテクチャは全部これ

  • VGG-16
    AlexNetは初期の畳み込み層で大きなカーネルを使用していたが、3x3の小さいサイズのカーネルをたくさん繋げることで性能を上回った。構造が単純なので最もよく使われている気がする。

  • GoogLeNet
    複数の畳み込みを並列で計算し、結果を統合して次の層へ送るInception moduleというアイディアを提案した。これにより、ただ単純に繋げるのではない複雑(?)な構造も可能であることが示された。

  • ResNet
    スキップコネクションを使って、重みの残差を学習するというアイディアで提案された。150層くらいある。すごいんだろうけどなんか違う気がする。

ここまでは超有名どころなので、被引用数もすごいことになっている。対して、のちにsegmentationに応用されるRNNベースの手法がある。

  • ReNet
    これは前読んだ。画像を縦の系列と横の系列として学習する。

dlrecord.hatenablog.com

1次元系列として画像を扱うのではなく、RNNを二次元に拡張した手法も存在する。元になるのはMulti-dimentional RNN(MDRNN)である。

dlrecord.hatenablog.com

Methods

3Dなども含めると全部で27つの手法が紹介されている。以下の図でそれぞれの手法の関係性を示してある。

f:id:gco46:20171017173551p:plain

FCNをベースに様々な手法が派生していることがわかる。特に、context knowledgeの部分で多くの研究がなされていることがわかる。 FCNは CNNの全結合層を1x1の畳み込みに置き換えることで、出力をclassification scoreではなくscore mapとして得る手法である。 通常score mapは入力画像よりも解像度が低いため、何らかの方法でupsamplingが行われる。FCNではバイリニア補間をベースとしたdeconvolutionで実現している。

FCNの問題点

FCNはdeepモデルによるsemantic segmentationの先駆者として多大なる功績を納めたが、そこにはいくつかの課題がある。

  • global contextの情報を考慮していない。これは通常のCNN全般に言えることであり、カーネルサイズに依存したローカルな特徴の集合としてfeature mapが取得されるため、大域的な情報にかけている。またpoolingにより微小変換への不変性は獲得できるが、その影響でfeature map(score map)の解像度が小さくなってしまい、空間的な情報が失われる問題もある。

  • instance segmentationに対応していない。この論文ではsemantic segmentationに続くさらなるタスクとしてinstance segmentationがあり、ロボットなどに幅広く応用できることが期待されるが、FCNにはinstanceを識別する能力はないため工夫が必要。

  • 実時間での実行は困難。また動画には時間的な連続性という情報も含まれるため、そういった情報を利用するには何かしら手を加える必要がある。

  • 公開されている3Dデータセットはメッシュや点群など非構造データを含むものがあり、そういったデータに対してはFCNは利用できない。

これらを解決するために様々な手法が提案されている。特にcontextをいかにして扱うかは多種多様なアプローチがある。主にこの論文では

  • post-processing by CRF

  • dilated convolution

  • multi-scale prediction

  • feature fusion

  • RNN based

に分類されている。

Decoder Variant

上に書いたのとは異なるアプローチで精度向上を図ったものがある。FCNの畳み込みによるscore map抽出を一種のencoderとみなし、upsampling部分の decoderを工夫しようというものである。

  • SegNet
    FCNが一層のdeconvolutionでupsamplingしているところを、畳み込みを積み上げてより表現力のあるdecoderを構成している。またmax-poolingのインデックスを記憶しておき、unpoolingの処理を施している。FCNとSegNetのdecoderの違いについて詳細に実験し、考察されている。SegNetはスキップコネクションの構造はないが、スキップコネクションを追加したようなU-Netという手法もある。

post-processing by CRF

CRFは領域分割などで昔から使われていた手法であるが、Deepモデルに組み込む際はfully connected CRFを使うのが一般的である。数式などの細かい記述はめんどくさい&完璧に理解できてないので避ける。要はCNNの出力のscore map(unary potential)と、ピクセル間の 位置や特徴を考慮したラベルの繋がり(pairwise potential)によって定義されるエネルギー関数を最小化するようなラベルを見つける。計算過程では平均場近似という手法を使い、真の分布Pとの距離を近づけるような分布Qを推定する。

  • DeepLab
    CNNの出力score mapに対してCRFをかけてrefineするモデル。後述するdilated convolutionも使うことで、できるだけscore mapの解像度を保ちつつ、receptive fieldを広げてglobal contextを理解しようとしている。性能的にはかなりいいが、CRFは事後処理として独立に計算されているため、end-to-endではない。というか結局どの手法もCRFを使えば精度が良くなるのは当然なので、手法の比較という点ではCRFはなくてもいい気がする(もちろんstate-of-the-artを狙うなら必要)。

  • CRFasRNN
    CRFの平均場近似のアルゴリズムを、CNNにおける畳み込み演算と回帰構造に落とし込むことでend-to-endによる学習を実現した手法。この論文で提唱されている回帰構造はLSTMなどのようないわゆるゲート構造はもっていないが、ゲートを作ることで長期記憶を維持する仕組みを取り入れることも可能らしい。

dilated convolution

畳み込みカーネルの間に0を入れて、大きなカーネルで畳み込む手法。dilated rate(どれくらい間に0を入れるか)を調整することで、receptive fieldを飛躍的に大きくできるのが強み。かつpoolingの必要性を減らし、出力の解像度を極力落とさない利点もある。

f:id:gco46:20171017182922p:plain
青いピクセルがreceptive fieldを表す。dilated rateを徐々に大きくした畳み込みを積み上げることで、大きなreceptive fieldを確保できる

dilated convolutionを利用したモデルにはDeepLab, ENetなどがある。

multi-scale prediction

通常CNNは、カーネルサイズに合わせた重みが学習されるため、スケールに対する不変性を持たない。そこでよく用いられる手法が、様々なスケールで学習したいくつかのネットワークを使ってそれぞれ出力を得て、最後にそれらを統合する方法である。あんまり面白味がないので割愛。

feature fusion

global feature とlocal feature を統合することによって精度をあげようという試み。統合の方法としては二つあり、early fusion と late fusionと呼ばれる。late fusionはFCNにも組み込まれている仕組みで、各層で独立にscore mapを計算した後、それらを統合して最終出力を得る方法である。より一般的(?)には、独立した特徴からそれぞれで分類器を学習して推定し、結果を統合する的なことがlate fusionだとこの論文に書かれていた。要は異なる特徴を学習させるバージョンのアンサンブル学習みたいな理解でいいのだろうか。

それに対しearly fusionは、あらかじめglobal featureを抽出しておき、非線形変換をかませたのちにlocalとglobalの特徴を繋げて新たな特徴を得て、そこからscore mapを推定する。この時非線形変換をかませるのがミソだそうで、これがないとearly fusionとlate fusionはほぼ等価になるそう。

  • ParseNet
    early fusionにより広範囲のreceptive fieldをカバーし、精度をあげた手法。CNNの実際のreceptive fieldの大きさは理論的なそれよりも小さくなるという実験結果があり、これを解決する手法としてearly fusionベースのネットワークを提案している。非線形変換にL2正規化を使用している。

Recurrent Neural Network

RNNによってcontextを理解する試み。ただし注意すべき点が二つあり、画像は本来系列データとしての構造を持っていないこと、通常のRNNは一次元系列を入力として受け取ることである。一つ目のアプローチとしては、画像を縦・横の系列としてみる方法があり、二つ目に対してはRNNを2次元に拡張することが考えられる。それぞれの場合で手法が提案されている。

  • ReSeg
    ReNetの自然な拡張としての手法。VGG-16に突っ込んで出てきたfeature mapに対して、ReNetのRNNを適用してupsamplingする。ReNetは画像を縦・横のそれぞれの系列データとして扱うRNN layerをスタックすることで学習される。実際は1ピクセルずつ入力するのではなく、オーバーラップしないwindowに切り分けて入力される。

  • LSTM-CF
    同じくReNetベースの手法。depthチャネルも使ってsegmentationを行う。depth画像はそのままだとCNNなどを適用できないが、HHA encodeという処理を施すことで視差、法線ベクトル、地平面からの高さという3チャネルの画像に変換することで、RGBと同様にネットワークに入力できるようになる。depthとRGBで別のネットワークに入れ、出てきた結果を統合してupsamplingする。

  • 2D LSTM
    こちらはMulti-dimentional RNNベースの手法。RNNを二次元に拡張し、local patchをrecurrent layerに通した後にfeedfoward layerに通す構造を積み上げたもの。LSTMを使用。

  • rCNN
    少し違ったアプローチ。patchをCNNに与え、出てきたfeature mapに対して同じ中心ピクセルを持つ異なるスケール (feature map sizeに合わせたもの)をconcatenateしてまた同じCNNに通す、ということをする。これにより様々なpatch size(論文中ではwindow sizeと呼ばれる)のcontextを与えることができ、学習に良い結果をもたらすらしい。学習はpatchの中心ピクセルを推定するように行われるが、推定時は画像全体を入力とし、1ピクセルずつずらした入力から得られたscore mapを統合する方法を用いる。

  • DAG-RNN
    無向循環グラフ(UCG)をRNNでモデリングした手法。UCGはRNNでは扱えないため、いくつかの有向非巡回グラフ(DAG)に分解し、それらをRNNで学習するというもの。8近傍連結のUCGなら4つのDAGに分解でき、隠れ層のノードは最大で(3方向からの出力+そのノードでの入力)を入力として受け取る。Multi-dimentional RNNに結合を増やしただけのような気もする。CNNでの出力をDAG-RNNにかけ、deconvolutionを行ってscore mapを得る。

Instance Segmentation

FCNはインスタンスを捉える構造を持たないため、何かしらの工夫が必要である。

  • DeepMask
    物体一つが映ったpatchを入力とし、その物体に対するmaskと、maskの確からしさ(likelifoodと書いてあったので尤度というべきか)を、一つのネットワークで学習・推定する。要はsegmentationとdetectionを同時に解いている感じだと思う。

  • SharpMask
    DeepMaskと同じ著者が提案した手法。DeepMaskをベースとして、segmentation結果の精度をあげる構造を入れている。FCNのようにただ単に前の層のscoreを足し合わせるのではなく、前の層のfeature mapとconcatenateして畳み込みをかけるような処理をしている。正直この処理が何をしていてどういう意味があるのかはよくわからない。

おわり

まださらに3次元データや動画などの時系列データに対する手法が紹介されていたが、とりあえずパス。clockwork FCNなんかは面白そうな手法ではあった。 これらのタスクはまだ質のいいデータセットが少なく、手法もあまり提案されていないので、RGBデータに対してある程度研究され尽くしたら次はここがターゲットになると思う、みたいなことがDiscussionで述べられていた。なんにせよ今後伸びていくのは間違いない。