セマンティックセグメンテーション [初期の手法(FCN/SegNet/U-Net)から,PSPNet, DeepLab v3 まで]

3+

1. 概要

セマンティックセグメンテーション(semantic segmentation)とは,シーン画像に対して,画素ごとに独立して意味(Semantic)のクラス識別を行い,画像全体の意味的な領域分割を行う問題である.画素ごとに識別するクラスとしては,例えば「道路」や「人」や「空」「海」「建物」など,おおまかな意味単位を用いる(SegNet [1] など).Deep Neural Network登場のおかげで,高精度かつ短時間の推定時間により解けるようになってきた問題設定である.2010年代に入って以降の自動運転研究の始まりに伴い,取り組む人が増えた問題でもある.

以前から画像の(特に2値ラベルでの)セグメンテーションは,MRFやCRFなどの確率的グラフィカルモデルを用いて,深層学習以前も取り組まれていた(Graph Cut アルゴリズムによる手法など).しかし,それらの手法ではグラフィカルモデルのInferenceに計算時間がかかる上に,シーンに多数の物体が配置されており,複数異なる意味クラスの物体や背景が登場していると,あまり正確に領域分割はできない予測性能の限界もかかえていた.

そんな中,深層学習の時代になってから深層表現の恩恵で,FCN[1], Segnet[2],U-Net[3]などのDNNを用いた手法によるブレイクスルーが起こり,高精度に物体画像・シーン画像にセマンティックセグメンテーションを高精度に行うことが可能になり始めた.またその後に,シーン画像ごとの(お互い重なりもある)各物体インスタンスごとのマスクを推定する「インスタンスセグメンテーション」も登場する(※別の記事に分けて述べる).

以降,この記事では,セマンティックセグメンテーションについて,代表的な手法とデータセットの登場について時系列順に述べていく.先に,1.1節で2節以降で述べる手法で使われている技術の全体像をまとめておく.

1.1 この記事で登場する技術のまとめ

Deep Neural Networkを用いたセマンティックセグメンテーションでは,砂時計(Hourglass)形のEncoder-Decoder型のネットワーク構造を使用する.またそのEncoder-Decoder中に,Pyramind PoolingDilated (Atrous) Convolutionを用いることで,画素ごとの周辺の広範囲のコンテキストを加味できるようになり,高精度予測を達成することを目指す.また,スキップ接続を用いてEncoder序盤の特徴マップの低レベル特徴量もDecoder終盤まで直接受け渡すことで,低レベル特徴も利用した細かな変化に強い識別も可能する.加えて,Fully Convolutional Networks (FCN)[2] を採用し,全結合層を用いない方針を採用することで,可変長の入出力画像でのCNN処理を行う.

上記のよりリッチな特徴マップを計算する工夫であるので,その後,他のタスクでもよく用いられることになる.例えば.物体検出(例 SSDにおけるFully Convolutional Newtworksの採用)や,人物姿勢推定(例 カスケード学習を行うStacked Hourglass Network)に,画像変換(Image Translation)などでも,Hourglass型のEncoder-Decoderや,スキップ接続・Dilated Convolutionが用いられることになる.

2 FCN (Fully Convolutional Networks)とスキップ接続

物体一枚が写っているPascal VOCデータセットの画像に対する前景背景セグメンテーション向けに提案された,画素セグメンテーション向けのCNN拡張の枠組みが,Fully Convolutional Network(FCN)[2]である.全結合層を撤廃して畳み込み層だけで行うFCNの提案に加えて,画素毎のクラス識別を行うために必要な初期の層のLow-level特徴を終盤の層にそのまま伝えて特徴量として用いるスキップ接続も提案された.

FCN登場以前のAlexNetやVGGNetなどのCNNバックボーンでは,上番の畳み込みを通して得られた$(W , H , C)$次元の3階のテンソルの特徴マップを,終盤に全結合層を用いてクラス識別するための$d = W \times H \times C$次元ベクトルに展開する設計が標準的であった.しかしこの設計だと,画像全体に対してクラス識別結果$y$を1つ学習するだけであり,画素毎の.なんとかして,セグメンテーションを学習させるために,画素毎に識別結果$y_{i,j}$を推定することを,CNNの設計をおおよそ引き継いだまま少し改良するだけで実現したかった.

そこでFCNでは,これまでの全結合層の役割を,特徴マップのグリッド単位で畳み込みフィルタに代替させるという,終盤の層も畳み込みにすることで$y_{i,j}$を推定するFully convolutionalなCNNのネットワーク構造を提案した.終盤の特徴マップはPoolingなどを経て入力画像からだいぶ解像度が落ちており,画素毎の特徴ではなく,その時点での特徴マップの1つの空間グリッド$(i,j)$に対応している入力画像の$7\times7$や$14 \times14$程度の範囲についてのクラス識別ができる.よって,このままでは識別結果は元画像よりはかなり低解像度のセグメンテーションマップしか出力できないので,FCNでは後処理として,単純な線形補間により特徴マップ元の解像度まで戻す仕組みも提案した.

しかし,よく考えると,後半の解像度を上げる線形補間のところも学習可能な層にして学習可能なDecoder化したほうが,より緻密なEncoder-Decoderを学習でき,高精度のセグメンテーションが実施できるはずである.よって,次の2.2節以降のように,「後半の解像度を上げるための層も,学習可能なConvolution層/もしくはDeconvolution層にする」手法が,その後提案されていく.

3 SegNetとU-Net

3.1 SegNet

オックスフォード大[1] (Arxiv 2015)の研究では,車載前方映像にセマンティクセグメンテーションのラベルをつけた初のデータセット「CamVidデータセット」を用意し,Encoder-Decoder型のFCNであるSegnetを学習することを提案した (SegNetのプロジェクトページ) .

SegNetでは,前半Encoder側でプーリングを行うのと同じ回数だけ,後半のDecoderでアップサンプリングを行い.Encodeにより失った元の解像度を取り戻しながら特徴を再度Decodeしていき,最終的に元画像と同じ解像度の特徴マップおよびセグメンテーション出力を得る.また,Encoder側の各Pooling層で(Max) Poolingする際に使用したMax位置の空間インデックスを,解像度が同じ時点同士で対応しているUpsamplingの際に使用する(これによりPoolingとUpsamplingでの使用座標の一貫性を保持).

セマンティックセグメンテーションとインスタンスセグメンテーションとの違い

上記の著者らによるSegNetの出力結果動画を見るとわかるとおり,セマンティックセグメンテーションでは,同一クラスであるが他の物体インスタンスであるもの同士は区別できない.例えば,動画中にTreeクラスがたくさん登場するフレームを見てもらうと,奥と地上と手前のTreeクラスの塊がそれぞれ分離はできないことがわかる.また,建物や車や人についても,二個以上同じクラスの物体同士が重なっていても,インスタンス毎に領域を区別することはできない.後にMask R-CNNに代表される「インスタンスセグメンテーション(別記事で執筆予定)」が登場したことで,各物体インスタンスを区別したセグメンテーションが初めて可能になっていく.

3.2 U-Net

U-Net [3]は,FCNで提案されたスキップ接続[3]を更に多用して,特徴マップ計算のマルチスケール処理度を高めたEncoder-Decoderネットワークである.U-Net自身は顕微鏡生物画像のセグメンテーションの文脈で提案された論文であったが,5節で述べる次の世代の技術が定着するまでは,画像のセマンティックセグメンテーション全般でよく用いられる基本ネットワーク構造となった.ネットワーク全体を図で可視化すると,Encoder-Decoder間で左右対称的に「U」型のネットワーク構造になっていることから,U-Netと名付けられた.

FCNやSegNetと異なるのは,学習可能な$2 \times 2$のUpsampling Convolution層(※他の論文ではDeconvolution層とも呼ぶ)が導入された点である.Encoder側の$2\times 2$ Poolingでダウンサンプリングされた特徴マップを,Decoder側の対応する空間解像度の場所にそのまままず受け渡し,Upsampling Convolution層で空間解像度を上げたものを,Decoder側でDecode中の特徴のうしろのチャネルに結合するという仕組みである.U-NetはこのようにDecoder側は特徴マップ(もとい畳み込みカーネル)ががEncoderに比べて2倍のチャンネル数の必要なので,少しパラメータが多めであり過学習に気を付ける必要はある.

4 データセットの登場

2節,3節などの,初期の深層学習を用いたセマンティックセグメンテーションが登場していた2014,2015年の当時,KITTI ベンチマークデータセット(CVPR 2012で提案)がADS・自動運転向けの大規模ベンチマークとして既に登場していた.しかし,KITTIはステレオ推定やオプティカルフロー推定や物体検出などを行う目的のデータセットであり,セマンティックセグメンテーションで用のラベル付けはされておらず,SegNetのようなネットワークの学習を,KITTIデータセットで行うことはできなかった.

4.1 CityScapesデータセット

そんな中,初めて少し規模が多めのセマンティックセグメンテーション向けの車載前方映像データセットとして,CityScapesデータセット(プロジェクトページ)[4] (CVPR2016)が登場した.動画全てにラベルづけするのは辛いということもあり,一定の間隔で限定したフレームにのみセグメンテーションラベルがアノテーションされている.また詳細なラベル付けされている5,000フレーム以外にも,多角形で疎なアノテーションがその他20,000枚に提供されている (プロジェクトページ内のFine/Coarse annotaionsのページを参照).

データ分布が異なる場合への対応策

Cityscapesデータセットはドイツで主に撮影された映像であり,他国の道路や風景と様子が結構違っている.よって,例えばCityscapesデータセットで学習したSegNetを日本の車載前方映像に対してテストしても,画像の様子がかなり違うのであまり精度が出ないという「他国・他地域のシーン画像の違いにCityscapeでは対応できない問題」がある.また,国間のシーンの違いだけではなく,Cityscapesは晴天で昼間メインの春・夏の映像であり,枯れ木の多い秋冬映像や,悪天候の

そこでこれらのデータ分布の違いに対応するために,「ドメイン適応」を用いてCityscapesのデータ分布には無いデータに対してモデルトランスファーを行う研究も盛んである(「ドメイン適応」については,別記事として今後書きたい).一方,pix2pix系の画像変換技術を活用して,「データ」トランスファーにより学習データを所望のデータ分布に変換させるアプローチの研究も盛んであるこちらも「画像変換」の記事などで,今後取り上げたい).加えてこれらの路線の中で,Learning by Synthesisの路線に基づき,CGやゲームグラフィックエンジンで生成した車載前方画像をセマンティックセグメンテーションの学習に利用する研究も行れている.

4.2 ADE20Kデータセット

また,Placesデータセットなどシーン画像認識に興味の高いMITのTorallba先生のラボから,多様なシーン画像にセマンティックセグメンテーションラベル付を行ったADE20Kデータセット[5]が登場した.Cityscapesのような車載前方動画を元にしたものではなく,ADE20Kは個々に独立して撮影された「シーン画像」の解析が目的である.(ADE20Kのプロジェクトページ)

ADE20Kデータセットは,前身であるシーン画像データセットのSUNとPlacesのシーンカテゴリーを全てカバーするように,屋外屋内の各種シーンの画像が網羅されている構成である.当然ながら,シーン毎にアノテーションされているマスクのクラスも異なり,多種多様である.Cityspacesは車載前方のシーン画像限定であったが,このADE20Kの登場で多種多様なシーンの画像に対するセマンティックセグメンテーションを学習でき研究できるようになった.

5 マルチスケールのコンテキストを活用する路線

2節と3節で紹介したFCN, SegNet, U-Netは,出力層の各画素位置の特徴ベクトルは,その特徴マップ上の各グリッド位置に対応する受容野(receptive field)の視野(field of view)があまり広くなかった.そのせいで,広範囲の周辺コンテキスト(周辺にどの別クラスがどのように配置されているか)の情報が詳しく(広く,多解像度分が)必要な画素では,コンテキスト情報が足りずに誤識別してしまっていた.

CNNを用いたEncoderで広範囲のコンテキストを得るには,画像認識の定番処理を思い返すと,「(1)大きめのカーネルサイズ(あるいはストライド)の畳み込みを使用」し,なおかつ「(2)(画像 or 特徴ピラミッドなどを用いて)マルチスケール処理化」するなどのアイデアが考えつく.しかし,セマンティックセグメンテーション問題では,予測したい全画素について,そういう蜜で高精度のコンテキスト情報を得ないといけないので,それら(1)(2)を行うにしても,なるべく効率的な処理で済ませたい.また,Pretrain済のバックボーンCNNで計算した特徴量に対して,「後処理でPoolingでコンテキストを集める」というのも,深層学習的には好ましい設計となる.

そこで,セマンティックセグメンテーションEncoder向け特有の,以下の2つのコンテキスト取得方法が登場し,広範囲コンテキストの必要な画像でも,精度の高いセグメンテーションが可能になり始めた:

  • 広範囲のコンテキストを得るために」Atrous convolution(dilated convolution)を用いることで,受容野を効果的に広げる.
  • マルチスケールのコンテキストを特徴に加える」ために,バックボーンCNNで得た特徴マップに対してSpatial Pyramid Poolingを行い,複数のスケール特徴を追加する.

以下,それら2つを提案した代表的セマンティックセグメンテーション手法である,DeepLab v1とPSPnetについて順に紹介する.

5.1 DeepLab v1とv2

Chen らは,畳み込み層としてDilated convolution[6]を用いたセグメンテーションネットワークであるDeepLab v1 [7]を提案した.そして,多重解像度プーリングであるSpatial Pyramid Pooling [8][9]にインスパイアされる形で,Chen らはAtrous Spatial Pyramid Pooling(ASPP)を追加したDeepLab v2 [10]をジャーナル版として提案した.

ASPPでは,4つの異なるサイズのカーネルを用いて4種のスケールの特徴から並列にPoolingを行い,それらをFusionすることで,広範囲のコンテキスト特徴を多重解像度でかつ密に集約できる.

DeepLabはこのv1の時点では,まだEnd-to-Endではなかった.Decorder終了後の出力はノイズ混じりなので,後半に旧式のセグメンテーション手段である「CRFを用いたRefinement」を行う構成である.しかしCRFとの併用というアイデアは,この研究あたりが最後であり,後続の研究ではCRFを用いずDeep Neural Networkのみで行うのが普通となっていく.

5.2 PSPNet

PSPNet(Pyramid Scene Parsing Network) [10]は,SenseTimeの研究者とそのメインの母体であるCHUKの教員達による研究で,ISLVRC2016の優勝論文である.Spatial Pyramid Poolingをセグメンテーションにも応用し,複数スケールのコンテキストも考慮した特徴マップを作成できるので,その周辺なリッチなコンテキストを知っている特徴ベクトルで高精度のセマンティックセグメンテーションが可能となった (PSPnetのプロジェクトページ)

PSPNet は,バックボーンCNNが出力した特徴マップに対して,後処理としてグリッド範囲の広さ別にAverage Poolingを4回行う「(Spatial) Pyramid Poolingモジュール」を用いて,グリッド領域サイズ別にPoolingされた特徴マップを4チャンネル作成する($2 \times 2$,$4 \times 4$,$8 \times 8$, 特徴マップ全グリッド=画像全体).そして,この4チャンネルを元のCNN特徴マップの後ろに結合し,最終的なクラス識別に用いることで,複数スケールのコンテキスト特徴(もとい,サイズ別のGloval Average Pooling特徴)も考慮してセグメンテーションを行うことができるようになった.Global Average Poolingで画像全体のコンテキストを利用する先行研究としParseNet[11]が登場していたが,それを画像認識のSpatial Pyramid Pooling[9]の先行例のように,Pyramidを用いて階層的に行ったことがPSPNetの貢献である.

論文[10]中では,PASCAL VOC2012, ADE20K, Cityscapseで実験を行い,FCNでは周辺コンテキスト情報不足で誤識別しているクラス領域でも,PSPNetで学習すると正しくセグメンテーション出来ることを画像付きで示している.

6 DeepLab v3:現在の標準的手法

Chen らのGoogleチームは,DeepLab v1, v2を改善したDeeplab v3 [12]を提案した.PSPNetのような広範囲のGlobal コンテキストも活用する手法にならい,ASPP (DeepLab v2で提案)の改良を行った「改良型ASPP」を提案した.

改良型ASPPでは,CNN特徴に対して,ASPPで4レベルAtrous ConvolutionでPoolingする横に,Global 画像Poolingを追加している.そして元のCNN特徴を$1 \times 1$ convでチャネル次元削減したものGlobal画像Poolingしたものを結合することで,(ParseNetやPSPnetのように)複数スケールのPyramidコンテキストを考慮することを提案した.

加えて,DeepLab v3では,v1, v2で行っていたCRFによる後処理を廃止した.更に,v2だとマルチスケールの3画像でそれぞれ個別に処理する「画像のマルチスケール処理」であったのを,CNNバックボーンの特徴マップに対して後からマルチグリッドスケール処理を行う「特徴のマルチスケール処理」に変更し,計算効率化を達成した.またBatch Normalizationも導入している.

また,翌年2018年に,物体境界部分の改善をターゲットに,以下の改善を行ったDeepLab v3+ [12] (ECCV2018)を提案した :

  • 元はDecoderはstride=16であったのを,層数を減らして代わりにアップサンプリングに変更することで,シンプルな処理に変更しつつも変更前と同様の受容野の広さを確保.
  • depthwiseにatrous convolutionを行う atrous separable convolutionを導入し,更に計算コストを削減.
  • バックボーンをResNetからXceptionに変更し,その畳み込み層もatrous separable convolutionに変更.

これ以降,このDeepLab v3+が(2019年後半まであたり)は,セマンティックセグメンテーションのネットワーク構造の第一選択肢となった.

7 まとめ

深層学習時代に解きやすくなった問題とも言える,画像の「セマンティックセグメンテーション」の,代表的な研究をたどり,その主要な工夫を紹介した.

セマンティックセグメンテーションは1画素ごとに識別性の高い特徴ベクトルを畳み込む必要があり,各画素周辺の広範囲の周辺コンテキストやシーン全体のコンテキストを知っておくほど誤識別が減る.その目的のために,広範囲の周辺コンテキスト特徴を多重解像度的に集めてPoolingするのが基本方針であることを紹介した.

ちなみに,この記事だけを見ると,5章などで「コンテキストを詳細に多重解像度的に学習することは良いことだ」という結論になっているように見えてしまうが,実はそれは良いことだけではなく,コンテキストを積極的に取り込むことは「バイアス(特にラベルの偏り)」を,積極的に取り込んでしまい,過学習につながってしまう悪い面も併せ持っている.5章の頃以降の,2017年ごろ付近以降,コンピュータビジョン全般において,こういったデータセットバイアスに対抗するための研究は盛んになっているが,5章の時期やこの記事の各手法ではまだその対処まで行おうという段階には達していなかった点には注意が必要である.

関連書籍

References

  • [1] V. Badrinarayanan, A. Kendall, and R. Cipolla. Segnet: A deep convolutional encoder-decoder architecture for image segmentation. arXiv:1511.00561, 2015.
  • [2] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015.
  • [3] O. Ronneberger, P. Fischer, and T. Brox. U-Net: Convolutional Networks for Biomedical Image Segmentation, pages 234–241. Springer International Publishing, Cham, 2015
  • [4] M. Cordts, M. Omran, S. Ramos, T. Rehfeld, M. Enzweiler, R. Benenson, U. Franke, S. Roth, and B. Schiele. The Cityscapes Dataset for Semantic Urban Scene Understanding. In CVPR, 2016.
  • [5] B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso, and A. Torralba. Scene parsing through ADE20K dataset. In, CVPR (2017)
  • [6] Yu, Fisher, and Vladlen Koltun. “Multi-Scale Context Aggregation by Dilated Convolutions.” arXiv 2015.
  • [7] L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille. Semantic image segmentation with deep convolutional nets and fully connected crfs. In ICLR, 2015.
  • [8] S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006.
  • [9] K.He, X.Zhang, S.Ren ,and J.Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.
  • [10]L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs. TPAMI, 2017.
  • [11] W. Liu, A. Rabinovich, and A. C. Berg. Parsenet: Looking wider to see better. arXiv:1506.04579, 2015.
  • [12] Liang-Chieh Chen, George Papandreou, Florian Schroff, and Hartwig Adam. Rethinking atrous convolution for semantic image segmentation. arXiv:1706.05587, 2017.
  • [13] Liang-Chieh Chen, Yukun Zhu, George Papandreou, Florian Schroff, and Hartwig Adam. Encoder-decoder with atrous separable convolution for semantic image segmentation. In ECCV, 2018.

外部リンク

3+