からログ

からあげが鳥並の頭で学んだことを記録する場所だよ

高性能なSemantic SegmentationモデルGoogle謹製「DeepLabV3」「DeepLabV3+」

論文へのリンク

[1706.05587] Rethinking Atrous Convolution for Semantic Image Segmentation
DeepLabV3

[1802.02611] Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
DeepLabV3+

筆者・所属機関

Liang-Chieh Chen(Google), Yukun Zhu(Google), George Papandreou(Google), Florian Schroff(Google), and Hartwig Adam(Google)

投稿日付

2017/6/17 (DeepLabV3)

2018/2/7 (DeepLabV3+)

概要(一言まとめ)

Image Segmentationのサーベイ論文 - からログで性能のよかったとされているGoogle製のモデル「DeepLabV3」と「DeepLabV3+」の論文

手法の概要

DeepLabV3

 恐らく、Atrous convolutionとSpatial pyramid poolingの組み合わせがキモなのではないかと思う。この組み合わせはASPP(Atrous Spatial Pyramid Pooling)モジュールと呼ばれて初代のDeepLabからあるもよう。

 Atrouns convolutionは以下のようなちょっと変わったCNN。

f:id:karaage:20200207110311p:plain:w640

 いまいちrateの定義が使われている場所によって数字が異なり分からない…dilation rateでスキップしているピクセルを表していると思うのだけど…

 最初に、このAtrouns convolutionを直列(カスケード)につないでrateとstrideを調整しようとしたのが以下のモデル。

f:id:karaage:20200207110324p:plain:w640

 でも、これだとセマンティックセグメンテーションにはストライドが悪さしてよくないらしい。

 なので、以下のように並列化(パラレル)したモデルにしている。

f:id:karaage:20200207110609p:plain:w640

 ここで、poolingをしているのは、Actrouns convolutionのフィルターがrateを大きくしていくとフィルタの問題点に対する対策らしい。ここがDeepLabV3での改善点のポイントのようだけど、ちょっと理解しきれなかった。

DeepLabV3+

 セマンティックセグメンテーションは、主にSPP(Spatial pyramid pooling)モジュールか、エンコーダー・デコーダー構造が使われて、DeepLabV3は、前者に属していたけどDeepLabV3+ではこの両方を組み合わせて性能改善したぜ(エンコーダー・デコーダー構造を取り入れた)というのがポイントの模様。

 あとは、Deep learning with depthwise separable convolutionsに、Xceptionを取り入れたらしい(こっちは、他の多くの最新のモデルで取り入れられているのを真似した様子)

コメント

 かなり色々な工夫をして精度を高めていることが分かった。よくこんなことを思いつくなという感じはするが、ベースとなるアイディア(ASPP)の他は、他の手法をうまく組み合わせたら性能良くなったという感もある。やはり発想には、うまく組み合わせるセンスに加えて、知識のベースラインが重要だなと実感した。

 

関連情報

ディープラーニングにおけるセマンティックセグメンテーションのガイド2017年版 | POSTD

RefineNet - からログ

Chainerハンズオン:画像セグメンテーション

GitHub - mrgloom/awesome-semantic-segmentation: awesome-semantic-segmentation

セマンティック・セグメンテーションの基礎 MathWorks(pdf)

DeepLab v3+でオリジナルデータを学習してセグメンテーションできるようにする - Qiita

GitHub - jfzhang95/pytorch-deeplab-xception: DeepLab v3+ model in PyTorch. Support different backbones.
「DeepLabV3+」のPyTorch実装。少し試したけど、なかなか良さそう

Deeplabv3-ResNet101 | PyTorch
「DeepLabV3」のPyTorchオフィシャル実装。Google Colabページへのリンクもあり

物体検出、セグメンテーションをMask R-CNNで理解してみる (初心者) - Qiita

「画像認識をやってみました」の次にすること - Sigfossブログ

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation(ECCV2018) - takuroooのブログ

Google Developers Japan: TensorFlow での DeepLab によるセマンティック イメージ セグメンテーション

【AI自動運転】Deeplabv3+を用いたセマンティックセグメンテーション | ALIS

Semantic segmentation 振り返り - Speaker Deck

次に読む論文

[1610.02357] Xception: Deep Learning with Depthwise Separable Convolutions
depthwise separable convolutionsというのが、恐らくbackboneモデルのことだと思うが、あんまり分かってないので

自分なりのアウトプット

気になった英単語・英語表現

  • atrous 専門用語(atrouns畳み込み)。関連情報参照
  • backbone 背骨だが、ここでは専門用語として使っている。関連情報参照