图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,

深度学习

概念

深度学习的概念源于人工神经网络的研究。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

深度学习是机器学习中一种基于对数据进行表征学习 的方法。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。

从一个输入中产生一个输出所涉及的计算可以通过一个流向图(flow graph)来表示:流向图是一种能够表示计算的图,在这种图中每一个节点表示一个基本的计算以及一个计算的值,计算的结果被应用到这个节点的子节点的值
考虑这样一个计算集合,它可以被允许在每一个节点和可能的图结构中,并定义了一个函数族。输入节点没有父节点,输出节点没有子节点。这种流向图的一个特别属性是深度(depth):从一个输入到一个输出的最长路径的长度。传统的前馈神经网络能够被看做拥有等于层数的深度(比如对于输出层为隐层数加1)。SVMs有深度2(一个对应于核输出或者特征空间,另一个对应于所产生输出的线性混合)。

深度学习的核心思路如下:

①无监督学习用于每一层网络的pre-train;

②每次用无监督学习只训练一层,将其训练结果作为其高一层的输入;

③用自顶而下的监督算法去调整所有层

应用有:

计算机视觉,语音识别,自然语言识别等等

CNN

1. 卷积神经网络的基本架构

从一个例子进行说明:首先图像会经过第一个卷积层,然后得到四个通道,接着经过非线性的**函数,得到新的四个卷积层,再通过pooling层,将通道map的大小降到一半,此时经过一个卷积层,可将4个通道变为8个通道,再经过非线性**函数,得到新的8个通道,再经历一个全局的pooling过程,把8个map变成8维的向量,最后经过一个全连接层,最终可以得到分数。如果在分类中就可以给出各类的分数。
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,

2.神经网络的组成

卷积层依赖卷积操作,在二维空间中,进行翻转平移操作。有连续卷积和离散卷积的两种形式的表达式。

**层依赖**函数pooling层常用的例子:Max pooling和average pooling

全连接层,全连接的意思是输入的每个神经元都和每个输出神经元相连,输入和输出层的神经元的数量可以不相等。我们通常说的深度卷积网络,其实就是许多卷积层和**层的叠加,以开头的例子为例,将其中的卷积层和**层分别进行了N次和M次的重复,就能得到一个深度卷积网络

3.如何学习神经网络

1.loss function在学习参数前,首先需要定义loss function本质上是对预测的结果,做指数操作时,再归一化,最后取对数,可以通过设置Ground-truth的值来确定对数的底。接着是Regression loss function中的Euclidean loss(欧式损失),本质上是对预测值和真实值值差的平方相加

2.参数优化参数优化一般选择随机梯度下降,SGD,一般分为四步,第一步:做采样一部分样本,从n个样本中选择m个样本出来。第二步:计算m个样本的梯度。第三步:更新速度,最后更新模型参数。

4.最新的研究成果

1.batch Normalization 算法分为4步,包括计算均值和方差,标准化,线性变化(使得网络性能维持)它的目的是稳定每一层的输入分布,减少偏移。

2.Skip connection用于使得优化简单,P可以选择不同的形式,比如I、幂次、或者是正交形式3.Group Convolution用来提高参数效率,例子:将通道分为两部分,然后分别卷积,接着输出结果相加,最后再做1*1 的卷积,使得两部分结果相关

3.Interleaved Group Convolution这个模型先用Group convolution,然后再做第二次的Convolution,分成三组,每组中选择上次不同的分组,然后分别做卷积,适用于手机和电视,模型参数小,比别的卷积网络性能更好。

4.Bottleneck Layer这个模型先做一个11 的卷积操作,降低宽度,然后再做33的卷积操作,之后再做1*1 的卷积操作,回复到之前的宽度。用于降低参数的数量,提高训练的效率


深度学习卷积神经网络——经典网络LeNet-5、AlexNet、ZFNet网络的搭建与实现

CNN卷积神经网络的经典网络综述

图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net, 以上为LeNet-5

1.C1层是一个卷积层(通过卷积运算,可以使原信号特征增强,并且降低噪音)

2、S2层是一个下采样层(平均池化层)(利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息,降低网络训练参数及模型的过拟合程度)。

3、C3层是一个卷积层

4、S4层是一个下采样层(平均池化层)没有需要学习的参数。

5、F5层是一个全连接层F5层有120*(400+1)=48120个可训练参数。如同经典神经网络,F5层计算输入向量和权重向量之间的点积,再加上一个偏置。

6、F6层是一个全连接层F6层有84*(120+1)=10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。

7、Output输出层
输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。

换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。

总结:随着网络越来越深,图像的宽度和高度都在缩小,信道数量一直在增加。目前,一个或多个卷积层后边跟一个池化层,再接上一个全连接层的排列方式很常用。

AlexNet网络

图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
卷积层 5个,池化层 3个,全连接层:3个(其中包含输出层)。卷积神经网络的结构并不是各个层的简单组合,它是由一个个“模块”有机组成的,在模块内部,各个层的排列是有讲究的。
比如AlexNet的结构图,它是由八个模块组成的。

1、AlexNet——模块一和模块二

结构类型为:卷积-**函数(ReLU)-降采样(池化)-标准化

这两个模块是CNN的前面部分,构成了一个计算模块,这个可以说是一个卷积过程的标配,

从宏观的角度来看,就是一层卷积,一层降采样这样循环的,中间适当地插入一些函数来控制数值的范围,以便后续的循环计算。

2、AlexNet——模块三和模块四

模块三和四也是两个same卷积过程,差别是少了降采样(池化层),原因就跟输入的尺寸有关,特征的数据量已经比较小了,所以没有降采样。

3、AlexNet——模块五

模块五也是一个卷积和池化过程,和模块一、二一样的。模块五输出的其实已经是6\6的小块儿了。(一般设计可以到1\1的小块,由于ImageNet的图像大,所以6\6也正常的。)原来输入的227\227像素的图像会变成6*6这么小,主要原因是归功于降采样(池化层),当然卷积层也会让图像变小,一层层的下去,图像越来越小。

4、模块六、七、八

模块六和七就是所谓的全连接层了,全连接层就和人工神经网络的结构一样的,结点数超级多,连接线也超多,所以这儿引出了一个dropout层,来去除一部分没有足够**的层。模块八是一个输出的结果,结合上softmax做出分类。有几类,输出几个结点,每个结点保存的是属于该类别的概率值
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
代码框架
1、AlexNet.py文件实现前向传播过程以及网络的参数。

2、train.py文件实现训练的过程。

3、eval.py文件实现测试的过程

ZFNet

图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,

MASK-RCNN

Mask R-CNN进行实分割,就是要在每一个像素上都表示出来目标所属的具体类别。 完成类别检测,图像分割和特征点定位。

在原有Faster R-CNN的基础上增加掩码预测分支,因为原有的Faster R-CNN架构缺少精细的像素对齐,故此Mask R-CNN进行了一定程度的弥补。
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
Mask R-CNN主要分为两个阶段:

(1)**生成候选框区域。**该流程与Faster R-CNN相同,都是使用的RPN(Region Proposal Network)。

(2)在候选框区域上使用RoIPool来提取特征并进行分类和边界框回归,同时为每个RoI生成了一个二元掩码。
这与当前大部分系统不一样,当前这些系统的类别分类依赖于 mask 的预测。我们还是沿袭了 Fast R-CNN 的精神,它将矩形框分类和坐标回归并行的进行,这么做很大的简化了R-CNN的流程。注释:掩码将一个对象的空间布局进行了编码,与类标签或框架不同的是,Mast R-CNN可以通过卷积的像素对齐来使用掩码提取空间结构。
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,

FCN

与CNN的关系

卷积神经网络(CNN)自2012年以来,在图像分类和图像检测等方面取得了巨大的成就和广泛的应用。

CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。

这些抽象的特征对分类很有帮助,可以很好地判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓、指出每个像素具体属于哪个物体,因此做到精确的分割就很有难度。

传统的基于CNN的分割方法的做法通常是:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:一是存储开销很大。
例如对每个像素使用的图像块的大小为15x15,则所需的存储空间为原来图像的225倍。
二是计算效率低下
相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。
三是像素块大小的限制了感知区域的大小。
通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。

针对这个问题, UC Berkeley的Jonathan Long等人提出了**Fully Convolutional Networks (FCN)**用于图像的分割。该网络试图从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类

FCN的原理

**FCN将传统CNN中的全连接层转化成一个个的卷积层。**在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。

可以发现,经过多次卷积(还有pooling)以后,得到的图像越来越小,分辨率越来越低(粗略的图像),那么FCN是如何得到图像中每一个像素的类别的呢?为了从这个分辨率低的粗略图像恢复到原图的分辨率,FCN使用了上采样。例如经过5次卷积(和pooling)以后,图像的分辨率依次缩小了2,4,8,16,32倍。对于最后一层的输出图像,需要进行32倍的上采样,以得到原图一样的大小。

这个上采样是通过反卷积(deconvolution)实现的。对第5层的输出(32倍放大)反卷积到原图大小,得到的结果还是不够精确,一些细节无法恢复。于是Jonathan将第4层的输出和第3层的输出也依次反卷积,分别需要16倍和8倍上采样,结果就精细一些了。

FCN的优点和不足

与传统用CNN进行图像分割的方法相比,FCN有两大明显的优点:一是可以接受任意大小****的输入图像,而不用要求所有的训练图像和测试图像具有同样的尺寸。二是更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题

同时FCN的缺点也比较明显
一是得到的结果还是不够精细。
进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
二是对各个像素进行分类。
没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

U-Net(基于FCN框架)

在医学图像处理领域,有一个应用很广泛的网络结构—-U-net
组成
:收缩路径(contracting path)和扩展路径(expanding path)。

收缩路径主要是用来捕捉图片中的上下文信息(context information),而与之相对称的扩展路径则是为了对图片中所需要分割出来的部分进行精准定位(localization)。 前提:深度学习的结构需要大量的sample和计算资源。利用数据增强(data augmentation)可以对一些比较少样本的数据进行训练,特别是医学方面相关的数据。
图像处理基本库的学习笔记4--深度学习,CNN等经典网络的搭建与实现,MASK-RCNN,FCN,U-Net,
U-Net有一个很重要的有点是其基本可以对任意形状大小的图片进行卷积操作,特别是任意大的图片