图像上采样

上采样在数字信号处理中是一种插值过程,用于提高图像分辨率。常见方法包括最近邻插值、双线性插值和双三次插值。转置卷积作为可学习的上采样方式,相较于固定过程的unpooling更具优势,常用于解码阶段如语义分割和生成对抗网络。计算转置卷积涉及参数调整,如步幅、填充等。三种unpooling方法分别为最近邻、bedofnails和最大值unpooling。在Python的OpenCV库中,可以通过cv2.INTER_LINEAR、cv2.INTER_NEAREST和cv2.INTER_CUBIC调用不同插值方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是上采样:

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

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

上采样在图像处理中的作用:

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

上采样的方法:

三个常见的插值方法:最近邻插值,双线性插值,双三次插值
三个常见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=kp1,o=i+(k1)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=kp1,o=i+(k1)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,nN,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=k1对应
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(k1)

5, p = 0 , i − k = z s , z ∈ Z + p=0,i-k=zs,z\in \Z^+ p=0,ik=zs,zZ+对应
s − 1 s-1 s1个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=k1,o=s(i1)+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+2pk=zs,zZ+对应
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=kp1,o=s(i1)+k2p

7, p ≠ 0 p \neq 0 p=0对应
s − 1 s-1 s1个0在每个输入单元之间, a = ( i + 2 p − k ) % s a=(i+2p-k)\%s a=(i+2pk)%s代表加到底部和右边的0的个数, o ′ = s ( i ′ − 1 ) + a + k − 2 p o'=s(i'-1)+a+k-2p o=s(i1)+a+k2p

三个常见的unpooling方法:

1,nearest neighbor: 重复每一个元素
2,bed of nails: 把数值放在一个特定的位置,其他位置为0
3,max unpooling: bed of nails的特殊形式,把数值放在对应的max pooling层的最大元素的位置

nearest neighbor,  bed of nails
max unpooling

三种插值方法:

bilinear interpolation:
bilinear interpolation
nearest neighbor interpolation:
nearest neighbor interpolation
bicubic interpolation:
在这里插入图片描述

cv2中怎么调用

双线性插值(默认)(bilinear interpolation): cv2.INTER_LINEAR
最近邻插值(nearest neighbor interpolation): cv2.INTER_NEAREST
双三次插值(bicubic interpolation): cv2.INTER_CUBIC

Reference:
1, 升采样
2, cs231n_2017_lecture11.pdf
3, Fully Convolutional Networks
Nikhil Sardana

4, A guide to convolution arithmetic for deep learning
5, Bilinear interpolation
6, Nearest Neighbor Interpolation
7, Bicubic interpolation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值