基于神经网络的三维重建入门学习笔记1

一、对空洞(扩张)卷积的理解

空洞卷积:首先是诞生背景,在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作),之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸。在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。——空洞卷积的作用

在图像分割网络中有两个关键点
1、pooling减少图片的尺寸增大感受野
2、通过upsampling扩大图片尺寸。
由于在先减少再增大的过程中肯定会有一些信息损失,为了减少由pooling带来信息损失,所以就提出空洞卷积,他能不通过pooling来增大感受野。
之前的卷积神经网络(Convolutional Networks)都是通过不断降低图像精度,直到图像被一个仅保留微弱空间信息的特征map表示(一般最后卷积层输出仅为7×7),最后通过计算类别概率来分类图像。这样情况下,尽管前面卷积网络做的很好,但是整个网络却不能获取一个十分精确的结果,例如一个很小的目标对解析图片信息十分重要,但是却被前面卷积网络因为过多降维和其体积很小而直接忽略掉了。
总结来说,Dilated Convolution可以不降低feature map的尺寸而增大卷积感受野。而之前例如FCN使用pooling下采样来增大感受野,但随后又不得不通过Deconvolution或者upsampling来增大特征map尺寸,这样先减后增的操作会让图片特征损失很多信息。
扩张卷积与普通卷积的相同点在于,卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。感受野是卷积核在图像上看到的大小,例如3×3 得卷积核得感受野为9.
在空洞卷积中有个重要的参数叫raterate,这个参数代表了空洞的大小。
要理解空洞概念和如何操作可以从两个角度去看
1) 从原图角度,所谓空洞就是在原图上做采样。采样的频率是根据rate参数来设置的,当rate为1时候,就是原图不丢失任何信息采样,此时卷积操作就是标准的卷积操作,当rate>1,比如2的时候,就是在原图上每隔一(rate-1)个像素采样,如图b,可以把红色的点想象成在原图上的采样点,然后将采样后的图像与kernel做卷积,这样做其实变相增大了感受野。如下图所示:
基于神经网络的三维重建入门学习笔记1_第1张图片

## 二、Dilated Residual Networks 扩张残差网络

分割任务涉及到对像素的密集预测,这对输出feature的分辨率要求较高。而DRN相比于Resnet在分辨率上保持较好,对于上卷积或者后续的增加分辨率的操作需求较少,易于迁移到语义分割应用上
扩张卷积可以应用到任何CNN上,从而达到保护网络的空间分辨率。至于作者为什么应用和撰写将其扩展到残差网络,自然是因为残差网络是当前表现最好的网络之一。 原始的残差网络卷积层是经过了5次striding处理达到降采样的目的。
ResNet:如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练,随着网络深度的加深,训练错误会越来越多。
但有了ResNet就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,尽管目前我还没有看到太多实际应用。但是对 的激活,或者这些中间的激活能够到达网络的更深层。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。
(1)为什么残差学习的效果会如此的好?与其他论文相比,深度残差学习具有更深的网络结构,此外,残差学习也是网络变深的原因?为什么网络深度如此的重要?

解:一般认为神经网络的每一层分别对应于提取不同层次的特征信息,有低层,中层和高层,而网络越深的时候,提取到的不同层次的信息会越多,而不同层次间的层次信息的组合也会越多。

(2)为什么在残差之前网络的深度最深的也只是GoogleNet 的22 层, 而残差却可以达到152层,甚至1000层?

解:深度学习对于网络深度遇到的主要问题是梯度消失和梯度爆炸,传统对应的解决方案则是数据的初始化(normlized initializatiton)和(batch normlization)正则化,但是这样虽然解决了梯度的问题,深度加深了,却带来了另外的问题,就是网络性能的退化问题,深度加深了,错误率却上升了,而残差用来设计解决退化问题,其同时也解决了梯度问题,更使得网络的性能也提升了。
DRN和ResNet得区别
基于神经网络的三维重建入门学习笔记1_第2张图片
有了上面Dilated Convolutions的理解,我们对于这种扩张卷积思想(暂且称谓它为扩张卷积)如何应用到残差网络就很清晰了。实际上,我要指出,扩张卷积可以应用到任何CNN上,从而达到保护网络的空间分辨率。至于作者为什么应用和撰写将其扩展到残差网络,自然是因为残差网络是当前表现最好的网络之一。
原始的残差网络卷积层是经过了5次striding处理达到降采样的目的,输出的特征也就是发生了5次尺度的变化,所以结果对于224×224分辨率输入,最后卷积层输出为7×7
最终特征map输出仅为7×7,最直接增加特征map分辨率的方法就是直接移除层间的subsampling(striding)操作,但是这样操作不能达到原网络每一层同一感受野,显然为了高分辨率而降低感受野是非常不可取的行为。这里就体现了扩张卷积的优点了,就是保持原有网络的感受野并且还能提高图片空间分辨率。 这里由于前面三种类型层(g1,g2,g3)对原始输入进行了降采样,28×28分辨率足够识别图片场景的结构,并且保存了大多数的图片信息去帮助我们正确解析原始图像的像素级信息。 所以本文是在前三层网络输出28×28特征map之后改变原始网络结构(即改变g4,g5)。前后变化如上图:
原始ResNet中两层网络分辨率分别相对于g3输出降了2倍和4倍,也就是从28×28降到了14×14和7×7。但是经过扩张卷积操作特征map的尺度没有发生任何改变,并且感受野和原ResNet对应层一样。最终DRN的g5输出为28×28。

## 三、对一些常用名词的理解

感受野:定义:感受野用来表示网络内部的不同神经元对原图像的感受范围的大小,或者说,convNets(cnn)每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。
基于神经网络的三维重建入门学习笔记1_第3张图片
可以看到在Conv1中的每一个单元所能看到的原始图像范围是33,而由于Conv2的每个单元都是由 22范围的Conv1构成,因此回溯到原始图像,其实是能够看到55的原始图像范围的。因此我们说Conv1的感受野是3,Conv2的感受野是5. 输入图像的每个单元的感受野被定义为1,这应该很好理解,因为每个像素只能看到自己。
全局池化:“global pooling”就是pooling的 滑窗size 和整张feature map的size一样大。这样,每个 W×H×CW×H×C 的feature map输入就会被转化为 1×1×C1×1×C 输出将featuremap 的大小减小到1
1,保留显著特征,降低特征维度,增大kernel的感受野。如果不池化直接接一个全连接层就会导致参数量过大,降低了训练速度,容易过拟合。后面接一个全连接层就是将最后一层卷积得到的feature map stretch(伸展)成一个向量。
global pooling”在滑窗内的具体pooling方法可以是任意的,所以就会被细分为“global avg pooling”、“global max pooling”等。由于传统的pooling太过粗暴,操作复杂,目前业界已经逐渐放弃了对pooling的使用。替代方案 如下:
采用 Global Pooling 以简化计算;增大conv的 stride 以免去附加的pooling操作。
空间金字塔池化:使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量),送入全连接层。
把前一卷积层的feature maps的每一个图片上进行了3个卷积操作。最右边的就是原图像,中间的是把图像分成大小是4的特征图,最右边的就是把图像分成大小是16的特征图。
基于神经网络的三维重建入门学习笔记1_第4张图片
我们假设输入的map大小为13∗13,这里的256表示的是map的个数,所以,SPP得到的输出的特征数量为(4∗4+2∗2+1∗1)∗256=5376,不管最开始输入的图片多大,经SPP输出后的特征数量都为5376。
深度图像; 深度图像也叫距离影像,是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像。获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法。深度图像经过坐标转换可以计算为点云数据;有规则及必要信息的点云数据可以反算为深度图像。
平面法向量:向量(A,B,C)是该平面的法向量,至于D就是满足所有点在平面上的后缀。可以这样说,你确定ABC你就确定一组平行平面族。你确定了D你就确定了唯一的平面。ABC定平面的属性,D定位。D就是平面族之间的距离,D=0就表示平面通过原点
UV坐标:UV" 这里是指u,v纹理贴图坐标的简称(它和空间模型的X, Y, Z轴是类似的). 它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将图像上每一个点精确对应到模型物体的表面. 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图.
卷积输出大小计算公式:输入图片大小 W×W Filter大小 F×F 步长 S
padding的像素数 P 于是我们可以得出 N = (W − F + 2P )/S+1
输出图片大小为 N×N

你可能感兴趣的:(基于神经网络的三维重建入门学习笔记1)