深度学习中的卷积与反卷积操作
一、卷积
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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
