1.正卷积
正向卷积的实现过程。假设输入的图片 input 尺寸为 4x4,元素矩阵为:
卷积核的尺寸为 3x3,其元素矩阵为:
正向卷积操作:步长 strides = 1, 填充 padding = 0,输出形状为 2x2,该过程如下图所示:
在上面这幅图中,底端为输入,上端为输出,卷积核为 3x3。如果我们用矩阵乘法去描述这个过程: 把 input 元素矩阵展开成一个列向量 X
input=[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15]T
把输出图像 output 的元素矩阵展开成一个列向量 Y
input=[y1,y2,y3,y4]T
对于输入元素矩阵 X 和输出元素矩阵 Y ,用矩阵运算描述这个过程:
Y=CX
通过推导,我们可以获得稀疏矩阵 C
稀疏矩阵 C 的形状为 4x16, X 形状为 16x1,Y 的形状为 4x1,将 Y 进行 reshape 后便是我们的期望输出形状 2x2。
2.反卷积
那么,反卷积的操作就是要对这个矩阵运算过程进行转置,通过输出 Y 得到输入 X:
X=CTY
从矩阵元素形状的角度出发,可以理解为:16x1=16x4x4x1,下面这个动画比较生动地描述了反卷积过程:
值得注意的是,反卷积操作并不是卷积操作的可逆过程,也就是说图像经过卷积操作后是不能通过反卷积操作恢复原来的样子。这是因为反卷积只是转置运算,并非可逆运算。
参考
1.https://yunyang1994.github.io/posts/FCN/