首页 > 编程知识 正文

cnn卷积神经网络的优点,CNN卷积神经网络的主要结构

时间:2023-05-04 17:41:28 阅读:13590 作者:825

说明图像的语义分割。 简单来说,就是按图像中的像素进行分类

主要贡献:

引入端到端全卷网络进行语义分割,重用ImageNet的预训练网络逐渐普及,为了语义分割,采用卷积层进行上采样,引入跳跃连接,上采样粗糙

背景CNN可以对图像进行分类,但如何识别图像中特定部分的物体,到2015年为止一直是世界性的课题。 神经网络大神Jonathan Long宣布《Fully Convolutional Networks for Semantic Segmentation》用图像语义分割挖了一个洞,无数人冲进了洞内。

所有卷网络完整聚合网络

CNN和FCN

全连接层-辊叠层

对于第一连接区域为[7x7x512]的所有连接层,如果滤波器尺寸为F=7,则整个输出数据为[1x1x4096]。 对于第二个所有连接层,滤波器大小被设置为F=1,并且整个输出数据被设置为[1x1x4096]。 最后的所有连接层也同样设定F=1,最终的输出为[1x1x1000] upsampling

缺点通常是,CNN网络在卷积层之后连接若干全连通性层,并且将在卷积层生成的特征地图映射到固定长度的特征向量。 以AlexNet为代表的经典CNN结构适用于图像级分类和回归任务。 最终,这是因为AlexNet的ImageNet模型希望输出1000维向量,以表示输入图像属于各级的概率(softmax规范化)。

板栗:下图中的猫,输入AlexNet可以得到长1000的输出向量。 这表示输入图像属于各级的概率,其中“tabby cat”这样的统计概率最高。

FCN通过在像素级别对图像进行分类,解决了语义级别的图像分割问题。 相对于经典CNN在卷积层之后使用在全连通层中获得的固定长度特征向量进行分类(全连通层softmax输出),FCN可以接受任意大小的输入图像,并且在反卷积层中上采样最后卷积层的特征映射

最后,为每个像素计算softmax分类的损耗对应于将训练样本与每个像素相关联。 下图是Longjon用于语义划分的全卷积网络(FCN )的结构示意图。

简而言之,FCN和CNN区域将CNN最后的全部连接层变为辊压层叠,已经输出了水平较好的照片。

其实,CNN的强大之处在于多层结构可以自动学习特征,学习多个层次的特征。 浅卷积层感知域小,学习一些局部区域的特征。 深卷积层具有较大的感知域,可以学习更抽象的特征。 这些抽象特征对物体的大小、位置、方向等的敏感性更低,有助于提高识别性能。 下图中的CNN分类网络示意图:

这些抽象特征有助于分类,可以很好地判断一幅图像中包含什么类型的物体,但由于物体细节的丢失,无法很好地显示物体的具体轮廓,也无法指出各像素具体属于哪个物体,从而进行准确的分割

传统的基于CNN的分割方法:为了对一个像素进行分类,将其像素周围的一个图像块作为CNN的输入用于训练和预测。 这种方法有几个缺点。 一是存储开销很大。 例如,由于将每个像素所使用的图像块的大小设定为15x15,一个接一个地滑动窗口,按照滑动窗口判别和分类CNN,所以所需的存储区域随着窗口被滑动的次数和大小而急剧上升。 二是计算效率低。 相邻的像素块基本上是重叠的,并且计算用于每个像素块的卷积的计算也显着重叠。 第三,感知区域的大小受像素块大小的限制。 通常,像素块的大小明显小于整个图像的大小,并且只能提取局部特征,这限制了分类的性能。

另一方面,全卷积网络(FCN )从抽象的特征中恢复每个像素所属的类别。 也就是说,从图像级分类进一步扩展到像素级分类。

所有连接层和卷积层的唯一区别在于卷积层中的神经元仅连接到输入数据中的一个局部区域,而卷积列中的神经元共享参数。 但是,在这两种层中,神经元都计算点积,所以函数的形状是一样的。 因此,能够将这两者相互转换:

对于任何卷积层,都存在能够实现与其同样的前向传播函数的所有连接层。 权重矩阵是一个巨大的矩阵,除特定块外,其馀部分为零。 在大多数块中,元素是相同的。

相反,所有连接层可以转换为卷积层。 例如,一个

将所有连接层转换为卷积层:在两个转换中,将所有连接层转换为卷积层比实际应用中更有用。 卷积神经网络的输入

在实际操作中,每次这种变换都需要将全连接层的权重w重构为卷积的滤波器。 那么,这样的转换有什么作用呢? 通过在更大的输入图像上滑动卷积网络以获得多个输出,可以更高效地完成这一点。 这种转换可以在单个前向传播过程中进行

述的操作。

举个栗子:如果我们想让224×224尺寸的浮窗,以步长为32在384×384的图片上滑动,把每个经停的位置都带入卷积网络,最后得到6×6个位置的类别得分。上述的把全连接层转换成卷积层的做法会更简便。如果224×224的输入图片经过卷积层和下采样层之后得到了[7x7x512]的数组,那么,384×384的大图片直接经过同样的卷积层和下采样层之后会得到[12x12x512]的数组。然后再经过上面由3个全连接层转化得到的3个卷积层,最终得到[6x6x1000]的输出((12 – 7)/1 + 1 = 6)。这个结果正是浮窗在原图经停的6×6个位置的得分!

面对384×384的图像,让(含全连接层)的初始卷积神经网络以32像素的步长独立对图像中的224×224块进行多次评价,其效果和使用把全连接层变换为卷积层后的卷积神经网络进行一次前向传播是一样的。

Evaluating the original ConvNet (with FC layers) independently across 224x224 crops of the 384x384 image in strides of 32 pixels gives an identical result to forwarding the converted ConvNet one time.

如下图所示,FCN将传统CNN中的全连接层转化成卷积层,对应CNN网络FCN把最后三层全连接层转换成为三层卷积层。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个不同类别的概率。FCN将这3层表示为卷积层,卷积核的大小 (通道数,宽,高) 分别为 (4096,1,1)、(4096,1,1)、(1000,1,1)。看上去数字上并没有什么差别,但是卷积跟全连接是不一样的概念和计算过程,使用的是之前CNN已经训练好的权值和偏置,但是不一样的在于权值和偏置是有自己的范围,属于自己的一个卷积核。因此FCN网络中所有的层都是卷积层,故称为全卷积网络。


语义分割的一个主要框架:



FCN主要使用了三种技术:

卷积化(Convolutional)上采样(Upsample)跳跃结构(Skip Layer)

下图是一个全卷积层,与上图不一样的是图像对应的大小下标,CNN中输入的图像大小是同意固定resize成 227x227 大小的图像,第一层pooling后为55x55,第二层pooling后图像大小为27x27,第五层pooling后的图像大小为13*13。而FCN输入的图像是H*W大小,第一层pooling后变为原图大小的1/4,第二层变为原图大小的1/8,第五层变为原图大小的1/16,第八层变为原图大小的1/32(勘误:其实真正代码当中第一层是1/2,以此类推)。

经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像到 H/32∗W/32 的时候图片是最小的一层时,所产生图叫做heatmap热图,热图就是我们最重要的高维特征图,得到高维特征的heatmap之后就是最重要的一步也是最后的一步对原图像进行upsampling,把图像进行放大、放大、放大,到原图像的大小。

最后的输出是1000张heatmap经过upsampling变为原图大小的图片,为了对每个像素进行分类预测label成最后已经进行语义分割的图像,这里有一个小trick,就是最后通过逐个像素地求其在1000张图像该像素位置的最大数值描述(概率)作为该像素的分类。因此产生了一张已经分类好的图片,如下图右侧有狗狗和猫猫的图。

相较于使用被转化前的原始卷积神经网络对所有36个位置进行迭代计算,使用转化后的卷积神经网络进行一次前向传播计算要高效得多,因为36次计算都在共享计算资源。这一技巧在实践中经常使用,一次来获得更好的结果。比如,通常将一张图像尺寸变得更大,然后使用变换后的卷积神经网络来对空间上很多不同位置进行评价得到分类评分,然后在求这些分值的平均值。

最后,如果我们想用步长小于32的浮窗怎么办?用多次的向前传播就可以解决。比如我们想用步长为16的浮窗。那么先使用原图在转化后的卷积网络执行向前传播,然后分别沿宽度,沿高度,最后同时沿宽度和高度,把原始图片分别平移16个像素,然后把这些平移之后的图分别带入卷积网络。

如下图所示,当图片在网络中经过处理后变成越小的图片,其特征也越明显,就像图像中颜色所示,当然啦,最后一层的图片不再是一个1个像素的图片,而是原图像 H/32xW/32 大小的图,这里为了简化而画成一个像素而已。

如下图所示,对原图像进行卷积conv1、pool1后原图像缩小为1/2;之后对图像进行第二次conv2、pool2后图像缩小为1/4;接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap。

现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这样的操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个差值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。


而不同上采样结构得到的结果对比如下: 


当然,你也可以将pool1, pool2的输出再上采样输出。不过,作者说了这样得到的结果提升并不大。 
这是第一种结构,也是深度学习应用于图像语义分割的开山之作,所以得了CVPR2015的最佳论文。但是,还是有一些处理比较粗糙的地方,具体和后面对比就知道了。

在这里我们要注意的是FCN的缺点:

是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。

是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。