上采样的方式

本文详细介绍了几种常见的上采样技术,包括双线性插值、反卷积(转置卷积)、反池化和插值方法。重点解析了双线性插值的原理及应用,并解释了反卷积在上采样中的作用。

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

上采样的方式

1、双线性插值

线性插值: 插值函数为一次多项式的插值方式。线性插值的几何意义为利用A点和B点的直线来近似表示原函数。线性插值可以用来近似代替原函数,也可以用来计算得到查表过程中没有的数值。

如下图所示,假设已知 y 1 = f ( x 1 ) , y 2 = f ( x 2 ) y_1 = f(x_1), y_2 = f(x_2) y1=f(x1),y2=f(x2), 现在要通过线性插值的方式得到区间 [ x 1 , x 2 ] [x_1, x_2] [x1,x2]内任何一点的 f ( x ) f(x) f(x)值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUbaiu7g-1661763262873)(../img/image-20220816155059649.png)]

通过上图很容易得到以下公式:
y − y 1 x − x 1 = y 2 − y 1 x 2 − x 1 \frac{y-y_1}{x-x_1} = \frac{y_2-y_1}{x_2-x_1} xx1yy1=x2x1y2y1
变换可以得到:
y = x 2 − x x 2 − x 1 y 1 + x − x 1 x 2 − x 1 y 2 y = \frac{x_2-x}{x_2-x_1}y_1 + \frac{x-x_1}{x_2-x_1}y_2 y=x2x1x2xy1+x2x1xx1y2
双线性插值

双线性插值, 又称双线性内插,在数学上,双线性插值是由两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值

通过以上介绍我们知道,双线性插值就是分别在两个方向上分别进行一次简单的线性插值。如下图所示,每个点的数值是由 z = f ( x , y ) z= f(x, y) z=f(x,y)即x, y两个变量决定。下图可理解为沿z轴方向的俯视图。我们已知 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22四个点中插入一个点p, 并算出p点的值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZFniDUtW-1661763262875)(../img/image-20220816161521060.png)]

根据上图我们已知 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22四个点的值:
f ( Q 11 ) = F ( x 1 , y 1 ) f ( Q 12 ) = F ( x 1 , y 2 ) f ( Q 21 ) = F ( x 2 , y 1 ) F ( Q 22 ) = F ( x 2 , y 2 ) f(Q_{11}) = F(x_1, y_1)\\ f(Q_{12}) = F(x_1, y_2)\\ f(Q_{21}) = F(x_2, y_1)\\ F(Q_{22}) = F(x_2, y_2) f(Q11)=F(x1,y1)f(Q12)=F(x1,y2)f(Q21)=F(x2,y1)F(Q22)=F(x2,y2)
在求P点之前,首先根据线性插值的方法求得 R 1 R_1 R1, R 2 R_2 R2的值,对于 R 1 R_1 R1点,我们可以根据 Q 11 , Q 21 Q_{11}, Q_{21} Q11,Q21两个点根据线性插值的办法得到,而 Q 11 , Q 21 Q_{11}, Q_{21} Q11,Q21两个点的y值是相同的,所以两点的连线可看作只关于x一个变量的函数。

根据上述线性插值公式,可以求得 R 1 R_1 R1点的值:
f ( R 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f(R_1) = \frac{x_2-x}{x_2-x_1}f(Q_{11}) + \frac{x-x_1}{x_2-x_1}f(Q_{21}) f(R1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)
同理,求得 R 2 R_2 R2点的值:
f ( R 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f(R_2) = \frac{x_2-x}{x_2-x_1}f(Q_{12}) + \frac{x-x_1}{x_2-x_1}f(Q_{22}) f(R2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)
得到 R 1 , R 2 R_1, R_2 R1R2的插值后,接着我们去计算P点的插值。$R_1, R_2 $两个点的x值是相同的,所以两点的连线可看做只关于y 一个变量的函数。通过线性插值公式可以得
f ( P ) = y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P) = \frac{y_2-y}{y_2-y_1}f(R_1) + \frac{y-y_1}{y_2-y_1}f(R_2) f(P)=y2y1y2yf(R1)+y2y1yy1f(R2)
带入 f ( R 1 ) , f ( R 2 ) f(R_1), f(R_2) f(R1),f(R2),
f ( P ) = x 2 − x x 2 − x 1 y 2 − y y 2 − y 1 f ( Q 11 ) + x − x 1 x 2 − x 1 y 2 − y y 2 − y 1 f ( Q 21 ) + x 2 − x x 2 − x 1 y − y 1 y 2 − y 1 f ( Q 12 ) + x − x 1 x 2 − x 1 y − y 1 y 2 − y 1 f ( Q 22 ) f(P) = \frac{x_2-x}{x_2-x_1}\frac{y_2-y}{y_2-y_1}f(Q_{11}) + \frac{x-x_1}{x_2-x_1}\frac{y_2-y}{y_2-y_1}f(Q_{21}) \\ + \frac{x_2-x}{x_2-x_1}\frac{y-y_1}{y_2-y_1}f(Q_{12}) + \frac{x-x_1}{x_2-x_1}\frac{y-y_1}{y_2-y_1}f(Q_{22}) f(P)=x2x1x2xy2y1y2yf(Q11)+x2x1xx1y2y1y2yf(Q21)+x2x1x2xy2y1yy1f(Q12)+x2x1xx1y2y1yy1f(Q22)


在图像中,常见的坐标如下图所示,以图像左上角为坐标原点,水平向右为x轴正方向,竖直向下为y轴正方向。注意像素值是从(0, 0)点开始,假设我们在图像中插入一个点P, 离P点最近的相邻四个像素点是 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22并利用双线性插值的方法求其值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5L4JyVk2-1661763262878)(../img/image-20220816163742118.png)]

  • 由于 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22四个点是图像中相邻的像素,故有:

    x 2 − x 1 = 1 , y 2 − y 1 = 1 x_2 - x_1 = 1, y_2 - y_1 = 1 x2x1=1,y2y1=1

  • 带入公式进一步化简可得:
    f ( P ) = ( x 2 − x ) ( y 2 − y ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) f ( Q 21 ) + ( x 2 − x ) ( y − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) f ( Q 22 ) f(P) ={(x_2-x)}{(y_2-y)}f(Q_{11}) + (x-x_1){(y_2-y)}f(Q_{21}) \\ + (x_2-x)(y-y_1)f(Q_{12}) + (x-x_1)(y-y_1)f(Q_{22}) f(P)=(x2x)(y2y)f(Q11)+(xx1)(y2y)f(Q21)+(x2x)(yy1)f(Q12)+(xx1)(yy1)f(Q22)

  • 令:
    x − x 1 = u , y − y 1 = v x - x_1 = u, y - y_1 = v xx1=u,yy1=v

  • 带入公式可得:
    f ( P ) = ( 1 − u ) ( 1 − v ) f ( Q 11 ) + u ( 1 − v ) f ( Q 21 ) + ( 1 − u ) v f ( Q 12 ) + u v f ( Q 22 ) f(P) ={(1-u)}{(1-v)}f(Q_{11}) + u(1-v)f(Q_{21}) + (1-u)vf(Q_{12}) + uvf(Q_{22}) f(P)=(1u)(1v)f(Q11)+u(1v)f(Q21)+(1u)vf(Q12)+uvf(Q22)

  • 然后令:
    x 1 = i , y 1 = j f ( Q 11 ) = f ( i , j ) x_1 = i, y_1 = j \\ f(Q_{11}) = f(i, j) x1=i,y1=jf(Q11)=f(i,j)

  • 那么有:
    f ( Q 11 ) = f ( i , j ) , f ( Q 12 ) = f ( i , j + 1 ) f ( Q 21 ) = f ( i + 1 , j ) , f ( Q 22 ) = f ( i + 1 , j + 1 ) f(Q_{11}) = f(i, j), f(Q_{12}) = f(i, j+1)\\ f(Q_{21}) = f(i+1, j), f(Q_{22}) = f(i+1, j+1) f(Q11)=f(i,j),f(Q12)=f(i,j+1)f(Q21)=f(i+1,j),f(Q22)=f(i+1,j+1)

  • 进一步带入公式得:
    f ( P ) = ( 1 − u ) ( 1 − v ) f ( i , j ) + u ( 1 − v ) f ( i + 1 , j ) + ( 1 − u ) v f ( i , j + 1 ) + u v f ( i + 1 , j + 1 ) f(P) = (1-u)(1-v)f(i, j) + u(1-v)f(i+1, j) + (1-u)vf(i, j+1)+ uvf(i+1, j+1) f(P)=(1u)(1v)f(i,j)+u(1v)f(i+1,j)+(1u)vf(i,j+1)+uvf(i+1,j+1)

2、反卷积(转置卷积)

在语义分割或者GAN网络中比较常见,其主要作用是用来上采样

对于转置卷积需要注意的是:

  • 转置卷积不是卷积的逆运算
  • 转置卷积也是卷积

(带你理解转置卷积(反卷积)_史丹利复合田的博客-优快云博客_转置卷积和反卷积

转置卷积不是卷积的逆运算(一般卷积操作是不可逆的),它只能恢复到原来的大小(shape)数值与原来不同。转置卷积的运算步骤可以归为以下几步:

  • 在输入特征图元素间填充s-1行,列0(其中s表示转置卷积的步距)
  • 在输入特征图四周填充k-p-1行,列0(其中k表示转置卷积的kernel_size大小,p为转置卷积的padding, 注意这里的padding和卷积操作有些不同)
  • 将卷积核参数上下,左右翻转
  • 做正常卷积运算(填充0, 步距1)

转置卷积操作后特征图的大小可以通过如下公式计算:
H o u t = ( H i n − 1 ) × s t r i d e [ 0 ] − 2 × p a d d i n g [ 0 ] + k e r n e l s i z e [ 0 ] W o u t = ( E i n − 1 ) × s t r i d e [ 1 ] − 2 × p a d d i n g [ 1 ] + k e r n e l s i z e [ 1 ] H_{out} = (H_{in} - 1) \times stride[0] - 2 \times padding[0] + kernel_size[0]\\ W_{out} = (E_{in} - 1) \times stride[1] - 2 \times padding[1] + kernel_size[1] Hout=(Hin1)×stride[0]2×padding[0]+kernelsize[0]Wout=(Ein1)×stride[1]2×padding[1]+kernelsize[1]
其中stride[0]表示高度方向的stride, padding[0]表示高度方向的padding, kernel_size[0]表示高度方向的kernel_size, 通过上面公式可以看出padding越大,输出的特征矩阵高宽越小。

3、反池化

与池化相反,是把图片从小变大的操作,严格意义上讲, 池化过程中丢失了很多信息,是不可逆的,反池化只是一个近似恢复的操作。

在这里插入图片描述

4、upsampling 上采样

最常见的技术为插值,即把分辨率低的图片放大到需要的大小,再用插值的方法补齐像素的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值