セマンティックセグメンテーションの出力形式について


9

セマンティックセグメンテーションペーパーとそれに対応する実装を読んでいると、ソフトレベルを使用するアプローチもあれば、ピクセルレベルのラベリングにシグモイドを使用するアプローチもあることがわかりました。

たとえば、u-netペーパーの場合、出力は2つのチャネルを持つ機能マップです。

これらの2つのチャネル出力でsoftmaxを使用する実装をいくつか見ました。以下の理解が正しいかどうかわかりません。

説明のために、マスクされた部分はクラス1に属し、他の部分はクラス2に属しています。私は、マスクまたは非マスクの2つのクラスのみを想定しています。

xy出力マップを形状(1、image_row、image_col、2)で表すために使用します。次に、xy[1,0,0,0]クラス1に属する(0,0)xy[1,0,0,1]のピクセルの確率を表しますが、クラス2に属するピクセル(0,0)の確率を表します。xy[1,row,col,0]+xy[1,row,col,1]=1

私の理解は正しいですか?

回答:


8

セマンティックセグメンテーションは拡張された分類であり、各ピクセルをに分類しますn_classes

入力がサイズ付きのRGB画像で(cols,rows,3)あり、そのような画像のバッチを(batch_size, cols, rows, 3)CNNに渡すとします。

ネットワークグラフで計算を実行した後、最終的にたたみ込み層が持つように選択することになりますn_outputs

バイナリセグメンテーション(ピクセル単位のyes / no)


次に、持つことができn_outputs = 1、出力形状はになります(batch_size, cols, rows, 1)。後でsigmoidアクティベーション使用のbinary_crossentropy損失を取ります。これはバイナリセグメンテーションでのみ機能することに注意してください。

マルチクラスセグメンテーション(ピクセルごとの確率ベクトル)


そうするとn_outputs = n_classes、出力形状はになります(batch_size, cols, rows, n_classes)。ここでトリッキーな部分があります。softmax各ピクセル確率ベクトルに適用する必要があります。これには、使用しているディープラーニングフレームワークに応じて次元の置換が含まれます。この場合categorical_crossentropy、そのまま使用します

ケラスでは

final_conv_out = Convolution2D(n_classes, 1, 1)(conv9)

x = Reshape((n_classes, rows*cols))(final_conv_out)
x = Permute((2,1))(x)

# seg is a pixelwise probability vector sized (batch_size, rows*cols, n_classes)
seg = Activation("softmax")(x)

バイナリセグメンテーションで、softmaxの代わりにシグモイドアクティベーションを使用する理由
クラウディオ

2
p1p
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.