什么是上采样:
中文版*上的解释,“升采样是一种插值的过程,应用于数字信号处理,当一串数列或连续的讯号经过升采样后,输出的结果约略等于讯号经由更高的取样速率采样后所得的序列。”
也就是说上采样就是插值,约等于提高了采样的频率。
上采样在图像处理中的作用:
提高图像分辨率。因为,分辨率是一张图像像素点的个数,经过上采样后,像素点个数提高了,所以,分辨率提高了。
上采样的方法:
三个常见的插值方法:最近邻插值,双线性插值,双三次插值
三个常见unpooling:nearest neighbor, bed of nails, max unpooling
一个转置卷积
转置卷积的优点:
转置卷积含有可以学习的参数,这些参数可以经过反向传播来更新,即可以学习如何高效地上采样,其他方法都有固定的过程,一经算出结果,结果不会再改变,没有学习的过程。
转置卷积是什么:
卷积的相反过程,可以恢复尺寸,但不可以恢复值。
卷积,pooling,转置卷积,unpooling的关系:
卷积和pooling都是用来减少层的尺寸的方法,但是卷积因为是带有参数的可学习的方法,所以比用固定规则来实现的pooling更强大。
转置卷积和unpooling都是用来增加层的尺寸的方法,同样因为转置卷积的可学习性所以其优于unpooling。
卷积之于pooling的关系相当于转置卷积相当于unpooling的关系。
转置卷积的应用场景:
1,编码后,解码的过程用到转置卷积。比如,语义分割里,图像经过卷积,也就是提取特征,也就是编码,得到特征图,然后,经过转置卷积,也就是解码,得到与原图像大小一样的图像。
2,把特征图投影到高维空间中。比如,DCGAN的生成器把随机噪声reshape成特征图后,这些特征图经过转置卷积后得到一张图片。
转置卷积的计算:
所举例子满足下列条件:
1,二维转置卷积 N=2
2,输入的高宽相等
i
1
=
i
2
=
i
i_1=i_2=i
i1=i2=i
3,核的高宽相等
k
1
=
k
2
=
k
k_1=k_2=k
k1=k2=k
4,两个方向的步幅相等
s
1
=
s
2
=
s
s_1=s_2=s
s1=s2=s
5,两个方向的零填充相等
p
1
=
p
2
=
p
p_1=p_2=p
p1=p2=p
计算方法可以扩展到N维,非方形的情况,这里的方形指的是
i
1
=
i
2
i_1=i_2
i1=i2这样的意思。
加一撇表示转置过程的参数。字母
o
o
o表示输出尺寸。
1,
p
=
0
,
s
=
1
p=0,s=1
p=0,s=1这样的卷积过程对应的转置卷积过程的参数是
k
′
=
k
,
s
′
=
s
,
p
′
=
k
−
p
−
1
,
o
′
=
i
′
+
(
k
−
1
)
−
2
p
k'=k,s'=s,p'=k-p-1,o'=i'+(k-1)-2p
k′=k,s′=s,p′=k−p−1,o′=i′+(k−1)−2p
2,
p
≠
0
,
s
=
1
p\neq0,s=1
p=0,s=1对应
k
′
=
k
,
s
′
=
s
,
p
′
=
k
−
p
−
1
,
o
′
=
i
′
+
(
k
−
1
)
−
2
p
k'=k,s'=s,p'=k-p-1,o'=i'+(k-1)-2p
k′=k,s′=s,p′=k−p−1,o′=i′+(k−1)−2p
3,
k
=
2
n
+
1
,
n
∈
N
,
s
=
1
,
p
=
⌊
k
/
2
⌋
=
n
k=2n+1,n\in \N,s=1,p=\lfloor k/2 \rfloor=n
k=2n+1,n∈N,s=1,p=⌊k/2⌋=n对应
k
′
=
k
,
s
′
=
s
,
p
′
=
p
,
o
′
=
i
′
k'=k,s'=s,p'=p,o'=i'
k′=k,s′=s,p′=p,o′=i′
4,
s
=
1
,
p
=
k
−
1
s=1,p=k-1
s=1,p=k−1对应
k
′
=
k
,
s
′
=
s
,
p
′
=
0
,
o
′
=
i
′
−
(
k
−
1
)
k'=k,s'=s,p'=0,o'=i'-(k-1)
k′=k,s′=s,p′=0,o′=i′−(k−1)
5,
p
=
0
,
i
−
k
=
z
s
,
z
∈
Z
+
p=0,i-k=zs,z\in \Z^+
p=0,i−k=zs,z∈Z+对应
加
s
−
1
s-1
s−1个0再每个输入单元之间,
k
′
=
k
,
s
′
=
11
,
p
′
=
k
−
1
,
o
′
=
s
(
i
′
−
1
)
+
k
k'=k,s'=11,p'=k-1,o'=s(i'-1)+k
k′=k,s′=11,p′=k−1,o′=s(i′−1)+k
6,
p
≠
0
,
i
+
2
p
−
k
=
z
s
,
z
∈
Z
+
p\neq 0,i+2p-k=zs,z\in \Z^+
p=0,i+2p−k=zs,z∈Z+对应
k
′
=
k
,
s
′
=
1
,
p
′
=
k
−
p
−
1
,
o
′
=
s
(
i
′
−
1
)
+
k
−
2
p
k'=k,s'=1,p'=k-p-1,o'=s(i'-1)+k-2p
k′=k,s′=1,p′=k−p−1,o′=s(i′−1)+k−2p
7,
p
≠
0
p \neq 0
p=0对应
加
s
−
1
s-1
s−1个0在每个输入单元之间,
a
=
(
i
+
2
p
−
k
)
%
s
a=(i+2p-k)\%s
a=(i+2p−k)%s代表加到底部和右边的0的个数,
o
′
=
s
(
i
′
−
1
)
+
a
+
k
−
2
p
o'=s(i'-1)+a+k-2p
o′=s(i′−1)+a+k−2p
三个常见的unpooling方法:
1,nearest neighbor: 重复每一个元素
2,bed of nails: 把数值放在一个特定的位置,其他位置为0
3,max unpooling: bed of nails的特殊形式,把数值放在对应的max pooling层的最大元素的位置
三种插值方法:
bilinear interpolation:
nearest neighbor interpolation:
bicubic interpolation:
Reference:
1,*中文版关于上采样的解释
2,cs231n 2017 lecture11
3,Fully Convolutional Networks
Nikhil Sardana
4,A guide to convolution arithmetic for deep learning
5, *三种插值方法