上采样(upsampling):又名放大图像、图像插值;
主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上;
上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling);
图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
插值算法还包括了传统插值,基于边缘图像的插值,还有基于区域的图像插值。
下采样(subsampled):又名降采样、缩小图像;
主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图;
其实下采样就是池化;
对于一副图像Ⅰ尺寸为MN,对其进行s倍下采样,即得到(M/s)(N/s)尺寸的分辨率图像,当然,s应该是M和N的公约数才可以;
如果考虑是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值或者最大值(也就是Pooling池化操作等)。
对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。
Pk = Σ Ii / s2
其实下采样就是池化。
采样层是使用 pooling 的相关技术来实现的,目的就是用来降低特征的维度并保留有效信息,一定程度上避免过拟合;
但是pooling的目的不仅仅是这些,他的目的是保持旋转、平移、伸缩不变形等。采样有最大值采样,平均值采样,求和区域采样和随机区域采样等;
池化也是这样的,比如最大值池化,平均值池化,随机池化,求和区域池化等。
卷积神经网络中的卷积操作可以看做是输入和卷积核的内积运算。其运算过程非常容易理解,下面有举例。
一次卷积运算指的是:如下图,当我们有一个过滤器(黄色矩阵块)与卷积核相乘;
移动输入图片子区域,将这个方块对应要处理的输入矩阵的一部分,位置一一对应卷积核相乘,然后把结果再相加得到一个数;
1)输入是一个 5 ∗ 5 5*5 5∗5的图片,其像素值如下:
[ 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 ] \begin{bmatrix} 1& 1& 1& 0& 0\\ 0& 1 & 1 & 1 &0 \\ 0& 0& 1& 1 & 1\\ 0& 0& 1& 1 & 0\\ 0& 1& 1& 0 &0 \end{bmatrix} ⎣⎢⎢⎢⎢⎡1000011001111110111000100⎦⎥⎥⎥⎥⎤
2)卷积核(kernel是需要训练的参数,这里为了讲解卷积运算的操作,所以最开始我们假设卷积核的值如下:
[ 1 0 1 0 1 0 1 0 1 ] \begin{bmatrix} 1& 0 & 1\\ 0& 1& 0\\ 1& 0 &1 \end{bmatrix} ⎣⎡101010101⎦⎤
3)通过窗口和卷积核的内积操作得到的结果叫做feature map。
图片来源:Convolution schematic
如下图所示(对应的是上面提到的数据),我们在输入图片上框出一个和卷积核相同大小的区域,基于此计算子区域和卷积核对应元素乘积之和:
1 ∗ 1 + 1 ∗ 0 + 1 ∗ 1 + 0 ∗ 0 + 1 ∗ 1 + 1 ∗ 0 + 0 ∗ 1 + 0 ∗ 0 + 1 ∗ 1 = 4 1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4 1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4
是黄色输入矩阵行与卷积核的列分别相乘的结果。
所以feature map的第一个元素值为4。后面计算类似。
上面这幅图是对一个 5 ∗ 5 5*5 5∗5的矩阵进行 3 ∗ 3 3*3 3∗3的矩阵的卷积;
那么就从左上角到右下角,生成卷积之后的矩阵的大小是(5-3+1)*(5-3+1)的矩阵,生成之后的矩阵的元素值,是之前的两个矩阵对应元素的乘积之和;
更进一步的卷积与反卷积内容参考这篇博客:https://blog.csdn.net/quiet_girl/article/details/84579038
池化最直观的作用便是降维,常见的池化有最大池化、平均池化和随机池化;池化层不需要训练参数;
最大池化是对局部的值取最大;平均池化是对局部的值取平均;随机池化是根据概率对局部的值进行采样,采样结果便是池化结果。
如下图,左侧是 4 ∗ 4 4*4 4∗4的矩阵,要进行大小为 2 ∗ 2 2*2 2∗2的池化;
Max pooling,即对邻域内特征点只求最大值;
Average pooling,即对邻域内特征点只求平均值;
池化操作中最常见的最大池化和平均池化,因此最常见的反池化操作有反最大池化和反平均池化,其示意图如下:
反最大池化需要记录池化时最大值的位置,反平均池化不需要此过程。
在两个方向分别进行一次线性插值(首先在一个方向上使用线性插值,然后再在另一个方向上使用线性插值执行双线性插值。尽管每个步骤在采样值和位置上都是线性的,但是插值总体上不是线性的,而是在采样位置上是二次的。)
双线性插值减少了由于将图像调整大小为非整数缩放因子而导致的某些视觉失真。
一般用于重新采样图像和纹理。
计算四个周围纹理像素的属性(颜色,透明度等)的加权平均值,并将其应用于屏幕像素。
(简单来说,要求一个已知坐标的像素值,先去找他四个周围已知像素的坐标,通过两次单线性插值,找到他的像素值是多少)
用x和x0,x1的距离作为一个权重,用于y0和y1的加权。双线性插值本质上就是在两个方向上做线性插值。
如图所示,我们需要求P点的像素值。我们已知了Q11、Q21、Q12、Q22、P的坐标。也知道Q11、Q21、Q12、Q22的像素值。所以先用关于X的单线性插值去分别计算R1、R2的像素值:
在右边的等式中的字母f(Q11)、f(Q12)、f(Q21)、f(Q22)、x1、x2、x都是已知的,求出的f(x,y1)与f(x,y2)即为R1、R2的像素值。
再使用关于y方向的单线性插值计算P点的像素值得出:
在右边的等式中的字母y1、y2、y都是已知的,f(x,y1)与f(x,y2)即为上一个式子中求出的R1、R2像素值。可以得出答案f(x,y)。
如上图所示,可以通过在第20行和第21行的第14列和第15列的值之间进行线性内插,来计算计算为在第20.2行第14.5列处的像素处的强度值.(这里也正好说明了一般使用最相邻的像素点)
双线性插值的直观展示:
这里的是平面的双线性插值(Bilinear)
参考链接:
111
https://blog.csdn.net/quiet_girl/article/details/84579038
333