knowwell-livewellの日記

knowwell-livewellの日記

好きなこととかもろもろ書きます

セマンティックセグメンテーションで利用されるloss関数(損失関数)について④

本記事は連載4回目になります。

1回目:
セマンティックセグメンテーションで利用されるloss関数(損失関数)について① - knowwell-livewellの日記

2回目:
セマンティックセグメンテーションで利用されるloss関数(損失関数)について② - knowwell-livewellの日記

3回目:
セマンティックセグメンテーションで利用されるloss関数(損失関数)について③ - knowwell-livewellの日記

f:id:knowwell-livewell:20220130221411p:plain
https://github.com/JunMa11/SegLossより引用

今回はBoundary-based LossのHD Lossについて紹介します。

⑦Hausdorff Distance Loss (HD Loss)

こちらは、医療セグメンテーション分野における精度評価指標であるHausdorff Distance(HD)に基づいたLoss関数です。提案論文*1中では、正解マスク画像とモデル出力からHDを推定する方法として、a. Distance Transform-based、 b. Morphological Erosion-based 、c. Circuluar Kernels-basedの3種類を提案しています。まずは、そもそもHausdorff Distanceとは何なのか、から説明していきます。

Hausdorff Distanceとは...

f:id:knowwell-livewell:20220211000753p:plain
https://arxiv.org/pdf/1904.10030v1.pdfより引用

Hausdorff Distanceは2つの点の集まり(集合)に対して定義されるもので、ある集合Xから他方の集合YへのHDは以下のように表されます。

f:id:knowwell-livewell:20220211002415p:plain
Hausdorff Distance

これは一体何を表しているのかというと「X内のどんな点(図の青点線上のどんな点)からでも距離 rの範囲内にYの点(図の赤線上の点)が必ず存在する」ような距離 rの最小値です。ちょっと言葉では分かりにくいですね。こちらのブログ記事がとても分かりやすいです。
ハウスドルフ距離 (Hausdorff distance) - 大人になってからの再学習
一方、集合Yから集合XへのHDは上式で x yを入れ替えれば計算できます。上記のブログ記事でh(b,a)はb2とa2の距離かb2とa1の距離の小さいほうになります。ちなみに、論文中では上式のHDを小文字のhd(one-sided HD)で表し、hd(x,y)とhd(y,x)の大きい方を大文字のHD(bidirectional HD)と表記しています。
それでは、HD Lossについて見ていきましょう。

a. Distance Transform-based
一つ目の方法はDitance Transform(DT)を用いる方法です。ある2値画像(0:背景、1:前景)に対するDTは、その画像と同じサイズで、各画素値が任意の前景位置との距離の最小値になっているような画像(行列)のことです。ここで、2値画像を Xとすると、 Xのある画素 [i,j]における DT_{X}[i,j]は以下の式で表されます。

f:id:knowwell-livewell:20220211180430p:plain
Distance Transform

ここで、正解マスク画像 \bar{p}の境界 \delta pに対するDTを d_pと表現すると、 HD_{DT}(\delta q, \delta p)は以下のように表すことができます。

f:id:knowwell-livewell:20220211184658p:plain
Hausdorff Distanceの計算方法①

ここで、 \bar{p} \triangle \bar{q} = (\bar{p} \backslash \bar{q}) \bigcup  (\bar{q} \backslash \bar{p}) で、 \circは要素積、 \Omegaは全ての画素を意味しています。図を見るとイメージしやすいかと思います。 \bar{p} \triangle \bar{q}(緑の領域と赤の領域を合わせた領域)内で、 d_p(緑の境界への距離)が最も大きいのは( HD_{DT}(\delta q, \delta p) =  d_pとなる画素位置は)図(c)の白点の位置になりそうで、これは確かにHasudorff Distanceとは...で見た定義と同じになりそうですよね。

f:id:knowwell-livewell:20220211182023p:plain
https://arxiv.org/pdf/1904.10030v1.pdfより引用

当然ながら、 HD_{DT}(\delta p, \delta q) d_p d_qに入れ替えたものになります。上記のようなHDの推定方法に基づいて、HD Lossを以下のように定義しています。

f:id:knowwell-livewell:20220211203117p:plain
HD Lossの定義①

 \bar{p} \triangle \bar{q}の部分に関しては、 |p-q|で計算できそうなのは分かりやすいですね(ここでは絶対値ではなく2乗を利用しています)。ちなみに、 p qは多値であることを意味します(正解マスクである pは2値であることが一般的です)。また、bidirectional HDを意識して、 d_p d_qの両方を考慮しているようです。 \alphaは2.0が良かったとのことです。
ところで、上記の Loss_{DT}(q,p)は計算コストが高く、特に、モデル出力 qを基に算出する d_qは学習の度変化することになるので、(かつ正確なHDを求める必要は必ずしもないことから)以下のように d_pのみを考慮したLoss関数も提案しています。OSはOne-Sidedのことです。

f:id:knowwell-livewell:20220211205506p:plain
HD Lossの定義②


(思ったより長くなってきたので)続きます...
(間違っていたらコメントでお教えいただけますと助かります。)