卷积与反卷积

一、卷积

1. 定义

  之前在博客里面提到过卷积神经网络,里面有提到卷积操作,最近在阅读论文的时候又遇到了反卷积,所以将二者拿出来进行分析比较。
  卷积是利用卷积核实现的,以一副图片为例,当它与一个卷积核进行卷积运算的时候,会得到一个feature map,feature map的大小与原图像相比一般会减小,这样就达到了提取特征的目的,同时,与全连接神经网络相比,又能够有效的减少参数数量,假设图像的大小为M*N, 卷积核大小为s*t, 步长为k,padding大小为p, 则对应的feature map大小为
H = [ ( M + 2 ∗ p − s ) / k ] + 1 , W = [ ( N + 2 ∗ p − t ) / k ] + 1 H=[(M+2*p-s)/k]+1, W=[(N+2*p-t)/k]+1 H=[(M+2ps)/k]+1,W=[(N+2pt)/k]+1
二者均要向下取整。

2. 实现

假设有一副4*4的图像为
x 1 , 1 x 1 , 2 x 1 , 3 x 1 , 4 x 2 , 1 x 2 , 2 x 2 , 3 x 2 , 4 x 3 , 1 x 3 , 2 x 3 , 3 x 3 , 4 x 4 , 1 x 4 , 2 x 4 , 3 x 4 , 4 \begin{matrix} x_{1,1}&x_{1,2}&x_{1,3}&x_{1,4} \\x_{2,1}&x_{2,2}&x_{2,3}&x_{2,4} \\x_{3,1}&x_{3,2}&x_{3,3}&x_{3,4} \\x_{4,1}&x_{4,2}&x_{4,3}&x_{4,4} \end{matrix} x1,1x2,1x3,1x4,1x1,2x2,2x3,2x4,2x1,3x2,3x3,3x4,3x1,4x2,4x3,4x4,4
一个3*3的卷积核为
w 1 , 1 w 1 , 2 w 1 , 3 w 2 , 1 w 2 , 2 w 2 , 3 w 3 , 1 w 3 , 2 w 3 , 3 \begin{matrix} w_{1,1}&w_{1,2}&w_{1,3} \\w_{2,1}&w_{2,2}&w_{2,3} \\w_{3,1}&w_{3,2}&w_{3,3} \end{matrix} w1,1w2,1w3,1w1,2w2,2w3,2w1,3w2,3w3,3
将他们进行卷积操作,得到一个2*2的feature map,
r 1 , 1 r 1 , 2 r 2 , 1 r 2 , 2 \begin{matrix} r_{1,1}&r_{1,2} \\r_{2,1}&r_{2,2} \end{matrix} r1,1r2,1r1,2r2,2
相应地,我们有
r 1 , 1 = w 1 , 1 ∗ x 1 , 1 + w 1 , 2 ∗ x 1 , 2 + w 1 , 3 ∗ x 1 , 3 + w 2 , 1 ∗ x 2 , 1 + w 2 , 2 ∗ x 2 , 2 + w 2 , 3 ∗ x 2 , 3 + w 3 , 1 ∗ x 3 , 1 + w 3 , 2 ∗ x 3 , 2 + w 3 , 3 ∗ x 3 , 3 r_{1,1}=w_{1,1}*x_{1,1}+w_{1,2}*x_{1,2}+w_{1,3}*x_{1,3}+w_{2,1}*x_{2,1}+w_{2,2}*x_{2,2}+w_{2,3}*x_{2,3}+w_{3,1}*x_{3,1}+w_{3,2}*x_{3,2}+w_{3,3}*x_{3,3} r1,1=w1,1x1,1+w1,2x1,2+w1,3x1,3+w2,1x2,1+w2,2x2,2+w2,3x2,3+w3,1x3,1+w3,2x3,2+w3,3x3,3

r 1 , 2 , r 2 , 1 , r 2 , 2 r_{1,2},r_{2,1},r_{2,2} r1,2,r2,1,r2,2可以依次类推。
如果原图用矩阵X表示,feature map用矩阵Y表示,则卷积运算可以表示为如下:
Y = C ∗ X Y=C*X Y=CX
Y是一个4*1的矩阵, [ r 1 , 1 , r 1 , 2 , r 2 , 1 , r 2 , 2 ] T [r_{1,1},r_{1,2},r_{2,1},r_{2,2}]^T [r1,1,r1,2,r2,1,r2,2]T
C是一个4*16的系数矩阵,
w 1 , 1 w 1 , 2 w 1 , 3 0 w 2 , 1 w 2 , 2 w 2 , 3 0 w 3 , 1 w 3 , 2 w 3 , 3 0 0 0 0 0 0 w 1 , 1 w 1 , 2 w 1 , 3 0 w 2 , 1 w 2 , 2 w 2 , 3 0 w 3 , 1 w 3 , 2 w 3 , 3 0 0 0 0 0 0 0 0 w 1 , 1 w 1 , 2 w 1 , 3 0 w 2 , 1 w 2 , 2 w 2 , 3 0 w 3 , 1 w 3 , 2 w 3 , 3 0 0 0 0 0 0 w 1 , 1 w 1 , 2 w 1 , 3 0 w 2 , 1 w 2 , 2 w 2 , 3 0 w 3 , 1 w 3 , 2 w 3 , 3 \begin{matrix} w_{1,1}&w_{1,2}&w_{1,3}&0&w_{2,1}&w_{2,2}&w_{2,3}&0&w_{3,1}&w_{3,2}&w_{3,3}&0&0&0&0&0\\ 0&w_{1,1}&w_{1,2}&w_{1,3}&0&w_{2,1}&w_{2,2}&w_{2,3}&0&w_{3,1}&w_{3,2}&w_{3,3}&0&0&0&0\\ 0&0&0&0&w_{1,1}&w_{1,2}&w_{1,3}&0&w_{2,1}&w_{2,2}&w_{2,3}&0&w_{3,1}&w_{3,2}&w_{3,3}&0\\ 0&0&0&0&0&w_{1,1}&w_{1,2}&w_{1,3}&0&w_{2,1}&w_{2,2}&w_{2,3}&0&w_{3,1}&w_{3,2}&w_{3,3} \end{matrix} w1,1000w1,2w1,100w1,3w1,2000w1,300w2,10w1,10w2,2w2,1w1,2w1,1w2,3w2,2w1,3w1,20w2,30w1,3w3,10w2,10w3,2w3,1w2,2w2,1w3,3w3,2w2,3w2,20w3,30w2,300w3,1000w3,2w3,100w3,3w3,2000w3,3
X是一个16*1的矩阵
[ x 1 , 1 , x 1 , 2 , x 1 , 3 , x 1 , 4 , x 2 , 1 , x 2 , 2 , x 2 , 3 , x 2 , 4 , x 3 , 1 , x 3 , 2 , x 3 , 3 , x 3 , 4 , x 4 , 1 , x 4 , 2 , x 4 , 3 , x 4 , 4 ] T [x_{1,1},x_{1,2},x_{1,3},x_{1,4},x_{2,1},x_{2,2},x_{2,3},x_{2,4},x_{3,1},x_{3,2},x_{3,3},x_{3,4},x_{4,1},x_{4,2},x_{4,3},x_{4,4}]^T [x1,1,x1,2,x1,3,x1,4,x2,1,x2,2,x2,3,x2,4,x3,1,x3,2,x3,3,x3,4,x4,1,x4,2,x4,3,x4,4]T
由此可见,卷积运算可以转化为矩阵的运算。
示例
具体的运算过程如下:
具体的操作

二、反卷积

  反卷积的英文名称有很多,deconvolution, transposed convolution, fractionally-strided convolution,其实都是一个意思。
  我们将卷积运算展开成了矩阵的运算,同样的,我们也可以利用矩阵的运算来实现反卷积。

利用卷积操作,我们将4*4的图像变成了2*2的feature map, 我们的方法是利用一个4*16的矩阵乘一个16*1的矩阵;反过来,我们要将2*2的feature map恢复成一个4*4的图像,可以利用一个16*4的矩阵乘一个4*1的矩阵,于是有
Y = C T ∗ X Y=C^T*X Y=CTX
Y是一个16*1的矩阵, C T C^T CT是一个16*4的矩阵,X是一个4*1的矩阵。这里的C的size和卷积操作中的是一样的。卷积的正向传播是反卷积的反向传播;卷积的反向传播是反卷积的反向传播。
反卷积中的系数矩阵C不一定和原卷积操作中的一致,但是他们的size符合转置的关系。

  所以,我们可以将反卷积看作卷积的逆过程,他们的系数矩阵互为转置。反卷积的操作可以分为三步

  1. 在输入矩阵中添加0
  2. 对1中的矩阵进行卷积操作
  3. 对2中的结果进行裁剪

keras中有Conv2DTranspose之类的网络层,可以实现相关的操作。

参考资料1


  1. Up-sampling with Transposed Convolution. https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0, 2016/2018-8.19. ↩︎

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值