takuroooのブログ

勉強したこととか

Pyramid Scene Parsing Network(CVPR2017)

SemanticSegmention関連の論文メモ
図は論文からの引用

目次

概要

pyramid pooling moduleを使って異なる大きさの特徴マップを生成、利用することで画像全体と局所的なコンテキスト情報を使って推論するpyramid scene parsing networkの提案。

論文リンク

https://arxiv.org/pdf/1612.01105v2.pdf

著者

  • The Chinese University of Hong Kong
    • Hengshuang Zhao
    • Xiaojuan Qi
    • Xiaogang Wang
    • Jiaya Jia
  • SenseTime Group Limited
    • Jianping Shi

従来の課題

f:id:takuroooooo:20190424200231p:plain 1. Mismatched Relationship
コンテキスト情報をうまく使えないため、複雑なシーンで誤検出してしまう問題。
例えば、図2の1行目ではボートを車と誤判定している。しかし、川の上に車があることは滅多にない。
2. Confusion Categories
類似したカテゴリを混同してしまうことで誤検出してしまう問題。
例えば、図2の2行目では高層ビル(灰色)とビル(茶色)が混ざって予測されている。この問題はカテゴリ間の関係を利用することで改善する。
3. Inconspicuous Classes
小さいオブジェクトを検出するのが困難である問題。また大きいオブジェクトは受容野のサイズを超えることがある。これらは不連続な予測を発生される原因になる。
例えば、図2の3行目では、枕はシーツに類似しているためFCNは枕をシーツと誤検出している。これを改善するためには、目立たないカテゴリのオブジェクトが含まれている異なるサブリージョンに注意を払う必要がある。

これらの問題はコンテキストの関係と異なる受容野のグローバルな情報に関連している。

解決策

f:id:takuroooooo:20190425091407p:plain

pyramid pooling module

  • 受容野のサイズはコンテキス情報をどれくらい利用しているかの指標になる。ResNetの受容野は理論的には入力画像サイズを超えているが、実際は高層の受容野サイズは理論よりは小さいため、多くのネットワークはグローバルな情報を十分取り込めていない。
  • これを解決するためpyramid pooling moduleを使う。
  • pyramid pooling moduleはCNNが出力した特徴マップから異なるサイズの特徴マップを出力する。(論文だと1x1,2x2,3x3,6x6の4つの異なるサイズを出力している。)
  • 次に1x1 convolutionで特徴マップのchサイズを1/Nに変換する。Nはpyramidの数。論文だと4つ。
  • 次にオリジナルの特徴マップとサイズを合わせるためにbilinear interpolationで拡大する。拡大した特徴マップとオリジナル特徴マップをconcatする。

結果

f:id:takuroooooo:20190425234631p:plain

ADE20K validation setの結果

f:id:takuroooooo:20190425234800p:plain

ADE20K 結果画像

実装

https://github.com/Lextal/pspnet-pytorch github.com

動画

www.youtube.com

メモ

  • pyramid pooling moduleで行っている特徴マップを複数の任意のサイズにpoolingする処理はSPPNetで既に行われている。(PyTorchではAdaptiveMaxPool2dAdaptiveAvgPool2dで同様のことができる。)
  • poolingはmax poolingよりaverate poolingの方が性能が良かった。
  • ResNetにdilated convolutionを組み込むことで特徴マップの解像度低下を1/8に抑えている。
  • データ拡張以下のものが使われた。
    • random mirror
    • random resize(0.5倍〜2倍)
    • random rotation(-10度〜10度)
    • random Gaussian blur