深度学习中的卷积与反卷积操作

一、卷积

1. 符号规定:

为描述方便,各维度的参数均设为一致,用一致的字母表示:

i	输入图像尺寸
k	卷积核尺寸
s	卷积步长
p	单侧0填充数量
o	输出图像尺寸#(在s>1时,tensorflow中的"SAME"填充方式可能出现两侧填充数可相差1,)

具体的卷积运算方式不再赘述。

2. 步长s=1时
2.1 Same (Half) padding

即输出和入具有相同尺寸(o=i),只能在s=1实现。
此时:

s = 1
p = floor(k/2)
2.2 Full padding

o>i时,即输出尺寸变大,
此时:

s = 1
p = k - 1 

之所以叫full padding,是因为当p=k-1时,卷积核的移动位置满足:
(1)窗口内有输入图像的元素
(2)满足(1)的前提下,包含了所有可能的窗口位置
在这里插入图片描述

3. 不能整除时
o = 1 + floor( (i+2p-k)/s )

当(i+2p-k)不是s的倍数时,会出现i末尾处数据多余的情况。
设 除法的余数为a:

a = (i+2p-k)%s

则所有输入为 (i+a), a={0, 1, 2, …, s-1}的图像卷积之后具有相同的输出尺寸。这点在反卷积时需特别注意。

二、反卷积

1. 逆过程解释

这篇文章从矩阵角度解释了反卷积过程,这里再补充一下反卷积作为卷积的逆过程的角度:
在这里插入图片描述
本质上,反卷积运算也是和卷积运算一样的数学操作,只是需要改变此卷积操作的参数,使得In到Out的尺寸变化,恢复成Out到In。此外,不单是尺寸要恢复,还要考虑各元素间的对应关系。
已知了正向卷积的参数(k, s, p),输出结果Out。现在需要确定反卷积的“卷积操作”参数(k’, s’, p’),找出原来的In的尺寸。同时,需保留元素间的位置对应关系:例如,下图2.1的卷积中,4 * 4输入的左上角元素,只对2 * 2输出的左上角元素起贡献。
在这里插入图片描述

2. 符号规定:

在这里插入图片描述
其中,实际输入 i" 指 s>1 时,对 i’ 中间填0后的尺寸(不包括p’),在第4小节有详细说明。
有:反卷积的输出o’即为卷积的输入i;反卷积的核尺寸与卷积的相等。

3. 卷积步长s=1时

在这里插入图片描述
图4.1为图2.1的反卷积过程。

卷积i=4, k=3, s=1, p=0, o=2
反卷积i‘=2, k’=3, s‘=1, p’=2, o’=4

这里要解释为什么要在外周填充2层0,即为什么p’=2:
(1)首先,p’=2保证了 o’ = i
(2)这种填充方式,保证了反卷积过程元素位置对应关系,与卷积过程相同。例如:
正向卷积过程中,绿色图像左上角的元素,只对蓝色图像左上角元素有贡献。在反卷积时,这样的padding使得,只有蓝色的左上角会影响绿色的左上角数值。

为了保证这种对应关系,有如下结论:

p' = k-p-1
4. 卷积步长s>1时

直观上,卷积的 s>1 时,反卷积的 s’<1,这也是反卷积又叫 fractionally strided convolutions的原因。
但是不可能真的用非整数的s’做反卷积,为了实现 s’<1:需要在 i’ 每相邻两数间填充 (s-1)个0,填充完后,用 s’=1 的设置进行卷积。
即:(中间填充0)+(s’=1)的组合操作,实现了理论上的 s’ < 1

在这里插入图片描述
图4.6综合体现了一般反卷积过程。

卷积i=5, k=3, s=2, p=1, o=3
反卷积i‘=3, i"=5, k’=3, s‘=1, p’=1, o’=5
5. 一般反卷积的步骤
 1. 设对应的卷积参数为:i, k, s, p, o;2. 目标是:已知  i' = o,恢复出形状 i,即 o' = i;3. 对 i' 相邻元素间填充(s-1)个0,得到 i" = i' + (i'-1)(s-1);4. 对i''进行padding,p' = k-p-1;5. 最后进行 k'=k, s'=1 的卷积操作。
6. 卷积 (i+2p-k)/s 无法整除时

在前文中,说明了卷积时,无法整除的情况:

a = (i+2p-k)%s

则所有输入为 (i+a), a={0, 1, 2, …, s-1}的图像卷积之后具有相同的输出尺寸。这点在反卷积时需特别注意。

这种卷积所对应的反卷积操作:在一般卷积的第4步之后:在图像右和下侧,填充 a 个0。

 1. 设对应的卷积参数为:i, k, s, p, o;2. 目标是:已知  i' = o,恢复出形状 i,即 o' = i;3. 对 i' 相邻元素间填充(s-1)个0,得到 i" = i' + (i'-1)(s-1);4. 对i''进行padding,p' = k-p-1;5. 再在i''的右和下侧,填充 a 个0;6. 最后进行 k'=k, s'=1 的卷积操作。
参考:

[1] A guide to convolution arithmetic for deep learning


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部