SSAP [Proposal-freeなInstance Segmentation手法] の紹介と実験

実験と結果

元論文では、The Cityscapes Dataset[4]を用いて実験を行なっています。クラスは19あり、1,024×2,048の大きさの画像5,000枚で学習を行っています。U-NetのEncoder部分にはResNetを用いています。
評価はAP(Average Precision)を用いています。具体的には、推定結果と正解データのIoUを出し、閾値を0.5から0.95まで0.05刻みで変更させて閾値以上のIoUであれば正解とします。各閾値でのPrecisionを計算し、平均をとります。

他にも、Panoptic Segmentation[6]で提案されているPanoptic Quality(PQ)という評価指標を用いています(式(10))。p (predict)は識別したInstanceを、g (ground truth)は正解Instanceを表しています。また、|TP| (True Positive)は識別に成功したInstanceの数を、|FP| (False Positive)は誤って識別してしまったInstanceの数を、|FN| (False Negative)は識別されなかった正解Instanceの数を表します。具体的な例は、図12をご覧ください。なお、識別したInstanceと正解のInstanceのIoUが0.5を超えた場合に識別に成功したとみなします。
図12、「車」クラスの識別を行なった場合の識別結果の例。左図が正解データ、右図が識別結果を示している。
式(10)を丁寧に見ていきましょう。まず、 前半の項の分子はTPであったInstanceのIoUの和を意味しています。つまり、前半の項は識別に成功したInstanceの平均IoUを表しており、Semantic Segmentationの評価をしていることがわかります。また、後半は機械学習の評価指標としてよく用いられるF値そのものです。そのため、後半の項では識別の評価ができるようになっています。前半の項だけではTPのIoUしか計算しないのでSemantic Segmentationの評価指標として用いることはできませんが、後半の項と組み合わせることでSegmentationと識別を総合的に評価できる指標になっています。

Lossの計算には以下の式(11)を用いています。
L^i_sはSemantic Segmentationのlossでfocal loss[7]を使って計算することで、背景などの大きな領域の影響が小さくなるようにします。また、L^i_aはAffinityのlossでL2 lossを使って計算します。なお、\alphaL^i_aの重みで、0.003に設定されています。これにより、Semantic SegmentationとAffinityの学習のバランスをとっています。

また、\lambda_iは解像度毎のlossの重みの設定で、論文では [\frac{1}{4}, \frac{1}{8}, \frac{1}{16}, \frac{1}{32}, \frac{1}{64}] の解像度に対してそれぞれ\lambda_i=[0.01, 0.03, 0.1, 0.3, 1] としています。つまり、解像度が低い、長距離間のAffinityに重きを置いた設定であることがわかります。\alpha\lambda_iの値は様々変えて実験した結果、この値が最善の結果を出したと述べています。
学習の際のBatch sizeは24で、7万Iteration回しています。学習率は 10^{-4}で、3万Iterationの時と5万Iterationの時にさらに学習率を\frac{1}{10} 倍しています。

学習の結果、他の手法と比較して最も良い精度が出ていることを示しています。なお、学習データには正確なアノテーションがついている画像(fine)とおおよそのアノテーションがついている画像(coarse)があり、”Training data”はどのデータセットを使って学習したかを示しています。
表1、他の手法との精度比較。SSAPが最も良い精度を出していることが分かる。
推測したInstance Segmentationの結果を解像度毎に見てみます。解像度が低いうちは荒く、うまく捉えられていない小さな物体も、解像度が上がるにつれてより正確に捉えることができるようになっていることがわかります。
図13、各解像度のInstance Segmentation結果。
また、Semantic SegmentationとInstance Segmentationの出力結果も見てみます。かなり小さい人や標識なども正確に捉えられていることが確認できます。
図14、Semantic SegmentationとInstance Segmentationの結果。
この結果の他にも、様々な条件を変えて実験が行われています。

Semantic SegmentationとAffinityを組み合わせて学習した結果の比較

rはAffinityを取る範囲を示しており、r=0はAffinityを計算しないことを表しています。 表2のmIOU(IoUの平均)の値より、Semantic SegmentationとAffinityを組み合わせて学習することで、Semantic Segmentationの精度が上がっていることがわかります。また、 rの大きさが変化することでも精度に影響が出ていることがわかります。これは、Affinityを取る範囲が小さいほど小さい物体に反応しやすく、逆にAffinityを取る範囲が大きいほど大きい物体に反応しやすいからであると考察されています。
表2、Affinityを取る範囲を変えたときの精度の比較。

階層構造の有無

階層構造を用いたときと、\frac{1}{4}の解像度の特徴量のみを用いたときの比較も行なっています。表3より、階層構造を用いてSemantic SegmentationとAffinityのJoint Learning(JL)を行なった場合が最も精度が高くなることがわかります。なお”dilation”は、dilated convolution[8]と呼ばれる、受容野を増やすconvolutionを適用したことを意味しています。
表3、階層構造の有無、Joint Learning(JL)の有無で比較を行なっている。階層構造でJLをした場合が最も精度が高くなったことを示している。

階層構造の階層数の比較

表4のInit. Res.はグラフ分割をどの解像度から行うかを表しており、1/4は1/4の解像度のSemantic SegmentationとAffinityの結果のみを使うことを示しています。また、1/16などは、1/16→1/8→1/4と階層的にグラフ分割を行うことを示しています。結果は、1/16の解像度から段階的にグラフ分割を行うことで、グラフ分割を使わなかった時に比べ5倍の処理速度の向上があったと述べられています。
また、階層構造を用いることでAPも上がっています。これは低解像度の情報を用いることで識別の際に不要な情報が除けているからだと筆者は述べています。同時に、初めの解像度が1/64というように荒すぎると、逆に間違いを招くとも述べています。
表4、階層構造の階層数の比較。階層数は多すぎても少なすぎても精度が落ちることが分かる。
図15、解像度が高いと、ピクセル数が多くなるにつれてグラフ分割にかかる時間がより長くなる。
他にも、正解Affinityが1であるAffinityのLossを8割dropする手法や、Instanceに含まれるAffinityのLossを3倍する手法、Semantic Refinementの有無などで精度の比較を行なっており、それぞれ導入することで精度が上がることが示されています。

最後にCOCOで実験を行った結果も述べられています。
COCOデータセットでは、512×512にクロップした画像を使用し、Instance Segmentationを行なっています。8万Iteration学習を回し、6万Iteration時と7万Iteration時に学習率を半分にしています。結果、既存手法のDeeperLabよりも良い精度が出たと述べています。
表5、COCOデータセットでの既存手法との精度比較。

SSAP 再現実装

ここまで、SSAPの手法についての解説を行ってきました。最後に、再現実装を行い、学習をした結果を述べます。
データは2014年のCOCOデータセットを使用します。Semantic SegmentationとInstance Segmentationの正解画像をAnnotationファイルとCOCO APIから作成します。Semantic Segmentationはあらかじめクラス毎に色を決めておき、同じクラスは同じ色で塗ります。Instance Segmentationは物体毎に色が被らないように色を塗っていきます。正解のAffinityは、作成した正解Instance Segmentationを用いて、全体を1ピクセルずつずらして同じ色かどうかで作成します。
図16、左から、元画像、正解Semantic Segmentation、正解Instance Segmenation
モデルはU-Netを用い、Encoder部分にはResNet34を用います。学習用の画像は82,783枚、評価用の画像は40,504枚で、クラスは80個あります。Batch Sizeは10で、optimizerにはAdamWを用います(lr=3e-4, weight_decay=1e-5)。画像は224×224になるよう、リサイズした後にクロップします。AffinityのLossの重み\alphaは論文では0.003に設定されていますが、同じ設定で実験を行ったところ、Affinityの学習がほとんど行えていませんでした。そのため、\alpha=1とし、Semantic SegmentationとAffinityのLossを同等に扱うように変更します。

また、論文では [\frac{1}{4}, \frac{1}{8}, \frac{1}{16}, \frac{1}{32}, \frac{1}{64}] の解像度でSemantic SegmentationとAffinity を作成していましたが、再現実装では画像サイズが小さいため、[\frac{1}{1}, \frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \frac{1}{16}] の解像度で実験を行います。他にも、画像サイズが小さいため、画像全体に対するInstance間の境界部分の割合が大きくなります。そのため、論文では正解Affinityが1であるAffinityのLossを8割dropしていますが、再現実装ではdrop率を5割に設定します。さらに、Instanceに含まれるAffinityのLossを3倍していた部分についても1.5倍に調節します。

SSAP 再現実装 実験結果

なお、識別速度と性能を考慮し、\frac{1}{2}\frac{1}{16}の解像度を識別に用いました。
評価は論文で示されているAP及びPQで行いました。代表的なクラスを以下にいくつか挙げます。全クラスの平均は、AP=17.2、PQ=19.2という結果でした。クラスごとに見てみると、バスや停止表示などの大きい物体や形が決まっているものに関しては高い精度が出ることがわかります。一方、フォークなどの比較的小さい物体の検出精度が非常に低いことがわかりました。これは、元画像を小さく縮小したことが影響していると考えられます。
表6、再現実装での学習結果。各クラスのAPとPQ。
また、推測したInstance Segmentation結果を以下に示します。人の識別では、大勢いてもある程度うまくInstanceに分けられていることが分かります。また、象や停止標識などの大きい物体や形が決まっている物体はかなり正確にInstanceとして識別ができています。一方で、フォークなどの小さいInstanceや一部が隠れて見えないInstanceについては識別できていないことが見て取れます。
図17、Instance Segmentation識別結果。左から、入力画像、正解Instance Segmentation、推測Instance Segmentationを示す。

まとめ

本記事では、SSAPの手法の解説と再現実装の結果について述べました。物体のSegmentation maskを取得し、AffinityでそれをInstanceに分けていくという発想は直感に合っている印象を受けました。また、Semantic SegmentationとAffinityを同時に学習していくことでどちらの精度も向上するというのはマルチ学習に近いものがあり、納得感がありました。

今回の再現実装ではメモリが足りず、学習データのサイズやBatchSizeを小さく設定しました。その結果、論文の精度とは程遠い結果となってしまいました。これらを大きくすることで、精度の改善が期待されます。また、解像度が低い画像ほど全体に対するInstanceの境界部分の割合が大きくなるため、解像度が低い画像はAffinityが1である部分のdrop割合を下げるなどの工夫で、より精度が高くなる可能性があると考えています。

私はこれまでクラス分類と物体検出しか実装したことがなく、Segmentationタスクの実装は初めてだったので、手法から実装まで大変勉強になりました。
実装面では、グラフ分割の処理時間が長くかかってしまい、処理時間の短縮に苦労しました。

ここまで読んでいただき、ありがとうございました。Instance Segmentationは自動運転技術などの、精密に物体ごとの形を捉える必要のある課題への応用が期待されています。今後も様々な分野に使われることになると思うので、今後の動向が気になる領域です。ALBERTでは、データサイエンティストを募集しておりますので、先進的な技術を使って様々な企業の課題を解決したいという方はぜひ採用ページをご覧ください。

付録具体的なグラフ分割の解き方(GAEC法)

グラフ分割問題の具体的な解き方について解説します。論文中に具体的な説明はありませんが、恐らく使っていると思われるGreedy Additive Edge Contraction法(GAEC)[9]と言う手法をご説明します。
GAEC法の考え方は、すでにあるグラフを分割していくのではなく、バラバラのノードをエッジの重みを用いてまとめていくというものです。重みが最も大きいエッジの両端のノードをまとめ、同じノード間にエッジが複数ある場合は重みの和を取り更新していきます。これを全エッジの重みが0以下になるまで繰り返します。このようにすることで、グラフ分割問題の制約条件から外れることなくグラフ分割問題を解くことができます。

それでは、具体例を交えながら解説します。
下図のような、ノード[0], [1], [2], [3]を考えます。これらのノードは最初全てバラバラであると考えます。ここで、最も重みが大きいエッジはノード[1]とノード[3]の間のエッジです。そのため、まずノード[1]とノード[3]をまとめます(①)。
次も同様に考えると、ノード[0]とノード[1, 3]をまとめることができます(②)。
ここで、エッジは残り2つになりましたが、よく見るとどちらのエッジもノード[2]とノード[0, 1, 3]をつないでいます。そのため、この重みを足し合わせ、1つのエッジとします(③)。
ノードをまとめ、エッジの重みの和を取る作業を繰り返し、残る全てのエッジの重みが負になったら終了します。今回の図では、グラフをノード[2]とノード[0, 1, 3]に分けることができました。元々分割していたものをまとめるという考え方なので、グラフ分割問題の制約から外れることはありません。
図18、GAEC法でのグラフ分割の例。制約条件を満たし、グラフが分割できている。

参考文献

[1], Naiyu Gao, Yanhu Shan, Yupei Wang, Xin Zhao, Yinan Yu, Ming Yang, Kaiqi Huang. SSAP: Single-Shot Instance Segmentation With Affinity Pyramid. In ICCV, 2019.

[2], Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. Faster r-cnn: Towards real-time object detection with region proposal networks. In NIPS, 2015.

[3], Kaiming He, Georgia Gkioxari, Piotr Dollar, and Ross Girshick. Mask r-cnn. In ICCV, 2017.

[4], Marius Cordts, Mohamed Omran, Sebastian Ramos, Timo Rehfeld, Markus Enzweiler, Rodrigo Benenson, Uwe Franke, Stefan Roth, and Bernt Schiele. The cityscapes dataset for semantic urban scene understanding. In CVPR, 2016.

[5], Olaf Ronneberger, Philipp Fischer, Thomas Brox. U-Net: Convolutional Networks for Biomedical Image Segmentation. In MICCAI 2015.

[6], Alexander Kirillov, Kaiming He, Ross Girshick, Carsten Rother, and Piotr Dollar. Panoptic segmentation. In CVPR, 2019.

[7], Tsungyi Lin, Priya Goyal, Ross B Girshick, Kaiming He, and Piotr Dollar. Focal loss for dense object detection. In ICCV, 2017.

[8], Liangchieh Chen, George Papandreou, Iasonas Kokkinos, Kevin P Murphy, and Alan L Yuille. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs. TPAMI, 40(4), 2018.

[9], Margret Keuper, Evgeny Levinkov, Nicolas Bonneel, Guillaume Lavoue, Thomas Brox, and Bjoern Andres. Efficient decomposition of image and mesh graphs by lifted multicuts. In ICCV, 2015.