evaluateSe​manticSegm​entationの出​力値に関して

2 次查看(过去 30 天)
私は2クラスのセマンティックセグメンテーションを行っており、evaluateSemanticSegmentationを用いて結果の評価をしたいと思っています。
evaluateSemanticSegmentationのドキュメンテーションを見てみると、accuracyスコア = TP / (TP + FN)、IoU スコア = TP / (TP + FP + FN)、の様に計算されているようで、Positive側をクラスのどちらを置くかで値が変わると思います。
出力されたスコアはひとつの値のみでしたので、evaluateSemanticSegmentationで出力される混合行列で左上に来ているクラスをPositiveとしているのではないかと思い、下記の図の様になるようにクラスの値を入れ替えて再度evaluateSemanticSegmentationによりスコアの出力を行いましたが、混合行列は正しく入れ替わっているものの、accuracyやIoUのスコアは入れ替え前と全く同じ値でした。
・ラベル
11111
11221
11111
・ラベルの値
a:1
b:2
・混合行列
a b
a TP FN
b FP TN
  ↓
・ラベル
22222
22112
22222
・ラベルの値
b:1
a:2
・混合行列
b a
b TP FN
a FP TN
一方、bfscoreを使用した場合は、Positiveがどちらの場合でもいいようクラスごとにスコアが出力されているようです。
そこで、evaluateSemanticSegmentationのスコアはどのようになっているか教えて下さい。
また加えてですが、bfscoreにおける BFスコアは、F1スコアやFスコア、F-measureスコアと呼ばれるものと同等のものという解釈でよろしいのでしょうか。
それとも、Boundaryとあるように、輪郭に関して何か他のものと違うのでしょうか。
  2 个评论
Kenta
Kenta 2020-2-14
すいません、こちら解決しましたか?
Masamichi Takahashi
自己解決しました。
しかしbfscoreについては、元の論文を見てみましたがよくわかりませんでした。

请先登录,再进行评论。

采纳的回答

Kenta
Kenta 2020-2-15
こんにちは、コメントのほう、ありがとうございます。
たとえば、edit bfscoreとコマンドウィンドウで打つと、bfscore.mファイルが出てきて、そこには、
「The precision is the ratio of the number of points on the boundary of the predicted segmentation that are close enough to the boundary of the ground truth segmentation to the length of the predicted boundary」
とあります。つまり、境界線を対象として、それのF1スコアを算出していると思われます。
「BF スコアは、オブジェクトの予測境界がグラウンド トゥルース境界にどのくらい近いかを測定します。
BF スコアは、予測境界上の点が、グラウンド トゥルース境界上に一致する点を持つかどうかを決定するために、距離許容誤差を使用して precision recall の値の調和平均 (F1-measure) として定義されます score = 2 * precision * recall / (recall + precision)」とあるので、「bfscoreにおける BFスコアは、F1スコアやFスコア、F-measureスコアと呼ばれるものと同等のものという解釈でよろしいのでしょうか。」に関しては、おおよそご認識の通りと思います。
しかし、注意するべき点が、こちらのbfscoreには閾値があって、(デフォルトでは対角線の0.75%、論文のほうでも同じ)それ以下の距離にある、ある程度近い境界に対してはOK、それ以上に対してはNGとし、境界線に関して、判定を行っていると思います。
例えば、上のGIFファイルでは、距離が100より小さければOKというように閾値を設定していて、下にずらした範囲が99以下の場合は、F1が1になっています。一方、100になった場合は、0.6655となっています。このミスしたとみなされた場所は、groundTruthの境界から100以上離れているところで、上の画像でいう黄色い線に対応します。境界線のピクセル数から黄色いミスしたピクセル数を引いて、全体の四角形の境界のピクセルで割れば、そのbfscoreと同じ値が計算されることが確認できるかと思います。以上のように私は認識しているのですが、もし間違っていそうなところがあれば教えていただけると幸いです。よろしくお願いいたします。
clear;clc;close all
I=zeros(600,500);
groundTruth=insertShape(I,'FilledRectangle',[100,100,300, 300],...
'Color', 'white','Opacity',1);
groundTruth=rgb2gray(groundTruth);
figure;imshow(groundTruth)
figure
for i=0:1:100
prediction=insertShape(I,'FilledRectangle',[100,100+i,300, 300],...
'Color', 'white','Opacity',1);
[F1,precision,recall] = bfscore(rgb2gray(prediction),groundTruth,100);
imshow([groundTruth,rgb2gray(prediction)])
title(strcat('offset = ',num2str(i),' boundary F1 score is = ',num2str(F1)),'FontSize',15)
drawnow
end
  2 个评论
Masamichi Takahashi
丁寧な解説、誠にありがとうございます。
アニメーションまでついて、感覚的に理解しやすいですね。
元の論文の日本語解説がネットで見当たらなく、ドキュメンテーションもざっくりとしか解説していなかったので、本当にこの指標を用いて評価していいのか困っていましたが、理解することができました。重ねて感謝申し上げます。
Kenta
Kenta 2020-2-16
お役に立てたようでよかったです。確かに、bfscoreは日本語での解説は私もほとんど見つけられませんでした。また何かございましたらご連絡ください。

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!