liên quan đến định dạng đầu ra cho phân đoạn ngữ nghĩa


9

Trong khi đọc các tài liệu phân đoạn ngữ nghĩa cũng như các triển khai tương ứng của chúng, tôi thấy rằng một số cách tiếp cận sử dụng softmax trong khi các phương pháp khác sử dụng sigmoid cho ghi nhãn mức pixel.

Ví dụ, đối với giấy u-net , đầu ra là bản đồ đặc trưng với hai kênh.

Tôi đã thấy một số triển khai sử dụng softmax qua hai đầu ra kênh này. Tôi không chắc liệu sự hiểu biết sau đây của tôi là chính xác hay không?

Đối với mục đích minh họa, phần bịt mặt thuộc về lớp 1 và phần khác thuộc về lớp 2. Tôi chỉ giả sử hai lớp: đeo mặt nạ hoặc không đeo mặt nạ.

Tôi sử dụng xyđể thể hiện bản đồ đầu ra với hình dạng (1, image_row, image_col, 2). Sau đó, xy[1,0,0,0]sẽ đại diện cho xác suất pixel tại (0,0) thuộc về lớp 1 trong khi xy[1,0,0,1]sẽ đại diện cho xác suất pixel (0,0) thuộc về lớp 2. Nói cách khác,xy[1,row,col,0]+xy[1,row,col,1]=1

Tôi hiểu có đúng không?

Câu trả lời:


8

Phân đoạn ngữ nghĩa chỉ là phân loại mở rộng, trong đó bạn thực hiện phân loại từng pixel vào n_classes.

Giả sử đầu vào của bạn là hình ảnh RGB có kích thước (cols,rows,3), bạn chuyển một loạt hình ảnh như vậy có kích thước (batch_size, cols, rows, 3)cho CNN.

Sau khi thực hiện các tính toán trong biểu đồ mạng, bạn sẽ có một lựa chọn để có lớp chập cuối cùng có n_outputs.

Phân đoạn nhị phân (pixelwise yes / no)


Sau đó, bạn có thể có n_outputs = 1và hình dạng đầu ra sẽ được (batch_size, cols, rows, 1). Sau này bạn mất sigmoidkích hoạt sử dụng binary_crossentropy. Lưu ý rằng điều này chỉ hoạt động cho phân khúc nhị phân.

Phân đoạn MultiClass (vectơ xác suất pixel)


Sau đó, bạn có n_outputs = n_classesvà hình dạng đầu ra sẽ được (batch_size, cols, rows, n_classes). Bây giờ đến phần khó khăn. Bạn cần áp dụng softmaxcho từng vectơ xác suất pixel thường bao gồm các kích thước hoán vị tùy thuộc vào khung học tập sâu mà bạn đang sử dụng. Trong trường hợp này bạn sử dụng categorical_crossentropynhư nó

Trong máy ảnh, bạn có thể

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)

Trong phân đoạn nhị phân, tại sao sử dụng kích hoạt sigmoid thay vì softmax?
Claudio

2
p1-p
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.