mengenai format output untuk segmentasi semantik

9

Saat membaca makalah segmentasi semantik serta implementasi yang sesuai, saya menemukan bahwa beberapa pendekatan menggunakan softmax sementara yang lain menggunakan sigmoid untuk pelabelan tingkat piksel.

Misalnya, sehubungan dengan kertas u-net , output adalah peta fitur dengan dua saluran.

Saya telah melihat beberapa implementasi menggunakan softmax pada dua keluaran saluran ini. Saya tidak yakin apakah pemahaman saya berikut ini benar atau tidak?

Untuk tujuan ilustrasi, bagian bertopeng milik kelas 1 dan bagian lainnya milik kelas 2. Saya hanya menganggap dua kelas: bertopeng atau tidak bertopeng.

Saya gunakan xyuntuk mewakili peta output dengan bentuk (1, image_row, image_col, 2). Kemudian, xy[1,0,0,0]akan mewakili probabilitas piksel pada (0,0) milik kelas 1 sedangkan xy[1,0,0,1]akan mewakili probabilitas piksel (0,0) milik kelas 2. Dengan kata lain,xy[1,row,col,0]+xy[1,row,col,1]=1

Apakah pemahaman saya benar?

pengguna785099
sumber

Jawaban:

8

Segmentasi semantik hanyalah klasifikasi yang diperluas, di mana Anda melakukan klasifikasi setiap piksel ke dalam n_classes.

Katakanlah input Anda adalah gambar RGB dengan ukuran (cols,rows,3), Anda mengirimkan sejumlah gambar seperti itu (batch_size, cols, rows, 3)ke CNN.

Setelah melakukan perhitungan dalam grafik jaringan, Anda akan mendapatkan pilihan untuk memiliki lapisan konvolusional terakhir n_outputs.

Segmentasi biner (pixelwise ya / tidak)


Maka Anda dapat memiliki n_outputs = 1dan bentuk output akan (batch_size, cols, rows, 1). Anda kemudian mengambil kerugian sigmoidpenggunaan aktivasi binary_crossentropy. Perhatikan bahwa ini hanya berfungsi untuk segmentasi biner.

Segmentasi multiClass (vektor probabilitas pixelwise)


Maka Anda miliki n_outputs = n_classesdan bentuk output akan (batch_size, cols, rows, n_classes). Sekarang sampai pada bagian yang sulit. Anda perlu menerapkan softmaxpada setiap vektor probabilitas piksel yang umumnya melibatkan permutasi dimensi tergantung pada kerangka pembelajaran mendalam yang Anda gunakan. Dalam hal ini Anda gunakan categorical_crossentropyapa adanya

Di Keras kamu bisa

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
sumber
Dalam segmentasi biner, mengapa menggunakan aktivasi sigmoid bukan softmax?
Claudio
2
@Claudio - Dalam segmentasi biner Anda dapat mengasumsikan setiap aktivasi piksel pmewakili probabilitas piksel yang menjadi latar depan , dengan demikian menghasilkan1p, probabilitas piksel tersebut sebagai latar belakang, oleh karena itu tidak perlu memiliki variabel terpisah untuk hal yang sama.
stochastic_zeitgeist