Thắc mắc về Deconvolutional layer


#1

Chào cả nhà, mình có đọc Fully Convolutional Networks for Semantic Segmentation - Jonathan Long, nhưng còn một chỗ khá lấn cấn là Deconvolutional layers mà mình search google được như hình dưới decov

Mình còn tìm Transposed Convolutional layers được như hình dưới

Theo mình hiểu thì hai cách tính này hoàn toàn khác nhau, nhưng rất tiếc Deconvolutional layer và Transposed Convolutional layer là một. Xin nhờ các cao nhân giải thích giúp. Đa tạ.


#2

Theo mình thì cách tính bên trên là đúng


#3

Deconvolution là tên gọi không chuẩn của tranposed convolution. Mục đích ban đầu là người ta muốn làm đảo ngược quá trình của convolution (convolution với giá trị stride lớn hơn một sẽ làm giảm chiều không gian, spatial resolution), thì làm ngược lại sẽ tăng chiều không gian đó lên. Nên nó sẽ làm tăng kích thước output hay có tác dụng như là interpoliation, nội suy, hay up-sampling. Như hình ví dụ trên. Đó là lý do tại sao họ dùng chữ “de” trước convolution. Và đây là cách đặt tên rất “lười”.

Tuy nhiên thuật ngữ deconvolution này lại không chính xác với thuật ngữ deconvolution thường dùng trong signal processing (xử lý tín hiệu) dẫn đến gây hiểu nhầm. Trong xử lý tín hiệu, convolution là việc tính gộp của nhiều pixel lân cận dẫn tới hiệu ứng bị mờ. Điển hình như khi chụp ảnh bị mờ. Và deconvolution là bài toán làm đảo ngược hiệu ứng mờ đó, làm ảnh sắc nét hơn. Chứ không phải làm tăng kích thước của ảnh. Thuật ngữ convolution tranpose là hoàn toàn chính xác trong trường hợp này. Vì theo phép toán đơn giản y = W*x làm giảm chiều của x, thì W^T *y sẽ làm tăng chiều của y.

Hơn nữa, tất cả các implementation, reference về sau đều gọi là tranposed convolution chứ không dùng thuật ngữ deconvolution nữa. Lý do vì, deconvolution chính xác là convolution với cái kernel của filter khác nhau.

Link tham khảo


#4

Mình thấy ở hình trên là filter nhân với input theo kiểu element by element, còn ở hình dưới thì mỗi lần trượt toàn bộ element của filter nhân với một element tương ứng trong input mà. Mình hiểu có gì sai sót chăng?


#5

Mình xin copy lại câu trả lời của bạn Tran Duc Hoa trên facebook group

Mình thấy câu hỏi của chủ thread là về 2 cách tính transposed convolution. Theo mình hiểu thì đó là 2 cách khác nhau thực hiện transposed convolution thông qua format của một phép tính convolution chuẩn: một cách là padding ở bên border, một cách thực chất là chèn thêm 0 vào giữa các phần tử( dựa vào số liệu trong hình), rồi mới convolution. Cả 2 cách đều bảo toàn được ý nghĩa của transposed convolution xét trên khía cạnh up-sampling, dù cho nếu tính toán với cùng một kernel, trên cùng một input, thì output values sẽ khác nhau.

Ví dụ về cách tính size của tranposed convolution XH- height của input, W-width của input, FH filter Height, FW - filter width, UPH scaling factor,

YH = UPH (XH - 1) + FH - CROPTOP - CROPBOTTOM,
YW = UPW (XW - 1) + FW - CROPLEFT - CROPRIGHT.

Link tham khảo.


#6

Các ví dụ minh họa về convolution khác


#7

cảm ơn bạn @ngcthuong , đã thông não.