con respecto al formato de salida para la segmentación semántica

9

Mientras leía los documentos de segmentación semántica, así como sus implementaciones correspondientes, descubrí que algunos enfoques usan softmax, mientras que otros usan sigmoide para el etiquetado a nivel de píxeles.

Por ejemplo, con respecto al papel u-net , la salida es un mapa de características con dos canales.

He visto algunas implementaciones que usan softmax en estas salidas de dos canales. ¿No estoy seguro de si mi siguiente comprensión es correcta o no?

Con fines ilustrativos, la parte enmascarada pertenece a la clase 1 y la otra parte pertenece a la clase 2. Solo asumo dos clases: enmascaradas o no enmascaradas.

Yo uso xypara representar el mapa de salida con forma (1, image_row, image_col, 2). Luego, xy[1,0,0,0]representará la probabilidad de que el píxel en (0,0) pertenezca a la clase 1, mientras xy[1,0,0,1]que representará la probabilidad de que el píxel (0,0) pertenezca a la clase 2. En otras palabras,xy[1,row,col,0]+xy[1,row,col,1]=1

¿Es correcto mi entendimiento?

usuario785099
fuente

Respuestas:

8

La segmentación semántica es solo una clasificación extendida, donde realiza la clasificación de cada píxel en n_classes.

Digamos que su entrada es una imagen RGB con tamaño (cols,rows,3), le pasa un lote de imágenes de ese tamaño (batch_size, cols, rows, 3)a la CNN.

Después de realizar cálculos en el gráfico de red, terminará con la opción de tener la última capa convolucional que tenga n_outputs.

Segmentación binaria (pixelwise sí / no)


Entonces puede tener n_outputs = 1y la forma de salida será (batch_size, cols, rows, 1). Luego tomas la pérdida de sigmoiduso de activación binary_crossentropy. Tenga en cuenta que esto solo funciona para la segmentación binaria.

Segmentación multiclase (vector de probabilidad por píxeles)


Entonces tienes n_outputs = n_classesy la forma de salida será (batch_size, cols, rows, n_classes). Ahora viene la parte difícil. Debe aplicar softmaxa cada vector de probabilidad de píxel, que generalmente implica permutar dimensiones dependiendo del marco de aprendizaje profundo que esté utilizando. En este caso lo usas categorical_crossentropycomo

En Keras puedes

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
fuente
En la segmentación binaria, ¿por qué usar la activación sigmoidea en lugar de softmax?
Claudio
2
@Claudio: en la segmentación binaria, puede suponer que cada activación de píxel representa la probabilidad de que ese píxel esté en primer plano , lo que hace que , la probabilidad de que ese píxel sea de fondo, por lo tanto, no es necesario tener una variable separada para el mismo. pags1-pags
stochastic_zeitgeist