图像上采样

什么是上采样:
中文版*上的解释,“升采样是一种插值的过程,应用于数字信号处理,当一串数列或连续的讯号经过升采样后,输出的结果约略等于讯号经由更高的取样速率采样后所得的序列。”

也就是说上采样就是插值,约等于提高了采样的频率。

上采样在图像处理中的作用:
提高图像分辨率。因为,分辨率是一张图像像素点的个数,经过上采样后,像素点个数提高了,所以,分辨率提高了。

上采样的方法:
三个常见的插值方法:最近邻插值,双线性插值,双三次插值
三个常见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, *三种插值方法

上一篇:D(X)=E(X^2)-E^2(X)


下一篇:蓝桥杯试题 算法训练 麦森数 C/C++