bezüglich des Ausgabeformats für die semantische Segmentierung

9

Beim Lesen der semantischen Segmentierungspapiere sowie der entsprechenden Implementierungen stellte ich fest, dass einige Ansätze Softmax verwenden, während andere Sigmoid für die Beschriftung auf Pixelebene verwenden.

In Bezug auf U-Net-Papier ist die Ausgabe beispielsweise eine Feature-Map mit zwei Kanälen.

Ich habe einige Implementierungen mit Softmax über diese beiden Kanalausgänge gesehen. Ich bin nicht sicher, ob mein folgendes Verständnis richtig ist oder nicht?

Zur Veranschaulichung gehört der maskierte Teil zur Klasse 1 und der andere Teil zur Klasse 2. Ich gehe nur von zwei Klassen aus: maskiert oder nicht maskiert.

Ich verwende xy, um die Ausgabekarte mit Form darzustellen (1, image_row, image_col, 2). Dann xy[1,0,0,0]wird die Wahrscheinlichkeit von Pixeln bei (0,0) dargestellt, die zu Klasse 1 gehören, während xy[1,0,0,1]die Wahrscheinlichkeit von Pixeln bei (0,0) dargestellt wird, die zu Klasse 2 gehören. Mit anderen Worten,xy[1,row,col,0]+xy[1,row,col,1]=1

Ist mein Verständnis richtig?

user785099
quelle

Antworten:

8

Die semantische Segmentierung ist nur eine erweiterte Klassifizierung, bei der Sie die Klassifizierung jedes Pixels in die durchführen n_classes.

Angenommen, Ihre Eingabe ist ein RGB-Bild mit einer Größe (cols,rows,3). Sie übergeben einen Stapel solcher Bilder (batch_size, cols, rows, 3)an CNN.

Nachdem Sie die Berechnungen im Netzwerkdiagramm durchgeführt haben, haben Sie die Wahl, die letzte Faltungsschicht zu haben n_outputs.

Binäre Segmentierung (pixelweise Ja / Nein)


Dann können Sie haben n_outputs = 1und die Ausgabeform wird sein (batch_size, cols, rows, 1). Sie nehmen später den sigmoidAktivierungsnutzungsverlust binary_crossentropy. Beachten Sie, dass dies nur für die binäre Segmentierung funktioniert.

MultiClass-Segmentierung (pixelweiser Wahrscheinlichkeitsvektor)


Dann haben Sie n_outputs = n_classesund die Ausgabeform wird sein (batch_size, cols, rows, n_classes). Jetzt kommt der schwierige Teil. Sie müssen auf softmaxjeden Pixelwahrscheinlichkeitsvektor anwenden , bei dem im Allgemeinen Dimensionen abhängig vom verwendeten Deep-Learning-Framework permutiert werden. In diesem Fall verwenden Sie categorical_crossentropyals es

In Keras können Sie

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)
stochastic_zeitgeist
quelle
Warum sollte in der binären Segmentierung die Sigmoid-Aktivierung anstelle von Softmax verwendet werden?
Claudio
2
p1- -p