画像のセマンティックセグメンテーション(Semantic Segmentation)

1. Semantic Segmentation の概要

セマンティックセグメンテーション (semantic segmentation) とは,シーン画像に対して,画素ごとに独立して意味(Semantics) のクラス識別を行い,画像全体の意味的な領域に分割する問題である.画素ごとに識別するクラスとしては,例えば「道路」「人」「空」「海」「建物」などの,おおまかな意味単位を,正解としてラベル付けするクラスに用いる (SegNet [1] など).2010年代に入って以降の「自動運転」研究の開始に伴い,取り組む研究者が増えた問題でもある.

Deep Neural Network 登場のおかげで,高精度かつ短時間の推定時間により解けるようになってきた.以前から画像の(特に2値ラベルでの)セグメンテーションは,MRF (Markov Random Field)や CRF (Conditional Random Field)などの確率的グラフィカルモデルを画像に適用することで取り組まれていた(Graph Cut アルゴリズムによる手法など).しかし,MRF・CRFを用いた手法では,グラフィカルモデルの解の推定に計算時間がかかる上に,シーンに多数の物体が配置されて複数の異なる意味クラスの物体・背景が登場していると,あまり正確には領域分割ができずに,それ以上の発展に少し行き詰まっていた問題設定であった.

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

以降,この記事では,セマンティックセグメンテーションについて,代表的な手法およびデータセットの登場について,時系列順に述べていく.まずは1.1節にて,2節以降で述べる各手法で用いる技術の全体像から述べたい.

1.1 この記事で登場する各技術の全体像

Deep Neural Networksを用いたセマンティックセグメンテーションでは,主に以下のような技術を部品として用いることが多い:

  • 砂時計 (Hourglass) 形の Encoder-Decoder型のネットワーク構造を使用し,入力画像と同じサイズのラベル画像を出力する.(関連記事: Encoder-Decoder Model [ディープラーニングの文脈で])
  • Encoder-Decoder 中の各層に,Pyramind PoolingDilated (Atrous) Convolutionを用いることで,画素ごとの周辺範囲のコンテキストをより多解像度・効率的に加味できるようにすることで,高精度な予測を目指す.
  • スキップ接続を用いることで,Encoder 序盤の特徴マップの低レベル特徴量も,Decoder終盤まで直接受け渡すことができ,これにより低レベル特徴も利用した細かな変化に強いラベル出力を可能にする.
  • Fully Convolutional Networks (FCN) [2] を採用し,(CNN初期のLeNetやVGGnetの頃のように) 終盤に全結合層を用いる方針を却下して,全ての層を畳み込み層にすることで,可変長サイズの入(出)力画像でラベル画像を推定できるネットワークを学習する. (関連記事:Fully Convolutional Networks (FCN))

上記の各アプローチは,セマンティックセグメンテーション目的で初登場したあと,他のタスクでもよく用いられる.例えば,物体検出(例 SSDのバックボーンへのFCN [2] の採用)や,人物姿勢推定(例 カスケード学習を行うStacked Hourglass Network)に,画像変換 (Image Translation) などでも,Hourglass型のEncoder-Decoderや,スキップ接続・Dilated Convolutionが使用されるようになっている.

1.2 記事の構成

2節以降,この記事では以下の構成でセグメンテーションネットワークについて述べていく:

  • 2節 FCN (Fully Convolutional Networks)とスキップ接続
  • 3節 SegNetとU-Net
  • 4節 データセットの登場
  • 5節 マルチスケールのコンテキストを活用する路線
  • 6節 DeepLab v3:現在の標準的手法

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

メイン記事:Fully Convolutional Networks (FCN)

Fully Convolutional Network (FCN) [2] は,物体一枚が写っている Pascal VOCデータセットの画像にして,前景背景セグメンテーション向けのCNN拡張の簡単なアレンジである.[2] では,CNN終盤の全結合層を撤廃して畳み込み層だけで行う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層にする」手法が,その後提案されていく.

関連記事:畳み込みニューラルネットワーク (CNN)

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での使用座標の一貫性を保持).

インスタンスセグメンテーション (Instance Segmentation) との違い

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

関連記事:画像のインスタンスセグメンテーション (Instance Segmentation)

3.2 U-Net

U-Net [3]は,FCN [2]で提案された「スキップ接続 」を更に多用して,特徴マップ計算のマルチスケール処理度を高めた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を日本の車載前方映像に対してテストしても,画像の様子がかなり違うのであまり精度が出ないという「他国・他地域のシーン画像の違いにCityscapesでは対応できない問題」がある.また,国間のシーンの違いだけではなく,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)を行うにしても,なるべく効率的な処理で済ませたい.また,事前学習済のバックボーン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](PSPnetのプロジェクトページ)は,SenseTimeの研究者とそのメインの母体であるCHUKの教員達による研究で,ISLVRC2016の優勝論文でもある.Spatial Pyramid Poolingをセグメンテーションにも応用した研究で,これにより複数スケールのリッチなコンテキストも考慮した特徴マップを作成できるので,高精度のセマンティックセグメンテーションが可能となった.

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も導入している.

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

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

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

7 まとめ

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

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

「過学習」になりそうな工夫の怖さについて

ちなみに,この記事だけを読むと,5章などで「コンテキストを詳細に多重解像度的に学習することは良いことだ」という安直な結論に陥ってしまいがちであるが,各画素で周辺コンテキストをつぶさに取り込むことが必ずしも良い結果をもたらす訳ではない.コンテキスト情報を積極的に取り込むということは,同時に「バイアス(特にラベルの偏り)」も積極的に取り込んでしまい,過学習につながってしまう時もあるという悪い面も併せ持っている(と著者は以前から考えている)からである.

5章の頃以降の(すなわち2017年ごろ以降)コンピュータビジョン業界全般では,そのような「データセットバイアス」に対抗するための研究は盛んになっているが,5章の時期やこの記事の各手法では,まだ試し試し色々と提案している初期段階であった.従って,セマンティックセグメンテーションやCNNの研究全体も「特殊な効率的・畳み込み手法の影響により起こる,過学習の危険性もきちんと考慮し防いで行こう」という段階には達していなかった点に注意が必要である.例えば,dilated convolution を畳み込み画素位置まで可変にした「deformable convolution」という層も最近は使用されるが,これもベンチマークテストでは精度が向上しているものの,カーネルが学習したdeform画素の位置に,クラスごとに可適合していそうで,汎化性能が落ちていそうな怖い面があると個人的には感じる.

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.

外部参照リンク

関連記事