联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
深度学习卷积网络详解
深度学习卷积网络详解
背景
CNN可以对图片停止分类,可是怎样样才干辨认图片中特定局部的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully Convolutional Networks for Semantic Segmentation》在图像语义分割挖了一个坑,于是无量无尽的人往坑里面跳。
这里写图片描绘
全卷积网络 Fully Convolutional Networks
CNN 与 FCN
通常CNN网络在卷积层之后会接上若干个全衔接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN构造合适于图像级的分类和回归任务,由于它们最后都希冀得到整个输入图像的一个数值描绘(概率),比方AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。
栗子:下图中的猫, 输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高。
这里写图片描绘
FCN对图像停止像素级的分类,从而处理了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后运用全衔接层得到固定长度的特征向量停止分类(全联接层+softmax输出)不同,FCN能够承受恣意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map停止上采样, 使它恢复到输入图像相同的尺寸,从而能够对每个像素都产生了一个预测, 同时保存了原始输入图像中的空间信息, 最后在上采样的特征图上停止逐像素分类。
最后逐一像素计算softmax分类的损失, 相当于每一个像素对应一个锻炼样本。下图是Longjon用于语义分割所采用的全卷积网络(FCN)的构造表示图:
这里写图片描绘
简单的来说,FCN与CNN的区域在把于CNN最后的全衔接层换成卷积层,输出的是一张曾经Label好的图片。
这里写图片描绘
其实,CNN的强大之处在于它的多层构造能自动学习特征,并且能够学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些部分区域的特征;较深的卷积层具有较大的感知域,可以学习到愈加笼统一些的特征。这些笼统特征对物体的大小、位置和方向等敏理性更低,从而有助于辨认性能的进步。下图CNN分类网络的表示图:
这里写图片描绘
这些笼统的特征对分类很有协助,能够很好地判别出一幅图像中包含什么类别的物体,但是由于丧失了一些物体的细节,不能很好地给出物体的详细轮廓、指出每个像素详细属于哪个物体,因而做到准确的分割就很有难度。
传统的基于CNN的分割办法:为了对一个像素分类,运用该像素四周的一个图像块作为CNN的输入用于锻炼和预测。这种办法有几个缺陷:一是存储开支很大。例如对每个像素运用的图像块的大小为15x15,然后不时滑动窗口,每次滑动的窗口给CNN停止判别分类,因而则所需的存储空间依据滑动窗口的次数和大小急剧上升。二是计算效率低下。相邻的像素块根本上是反复的,针对每个像素块逐一计算卷积,这种计算也有很大水平上的反复。三是像素块大小的限制了感知区域的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些部分的特征,从而招致分类的性能遭到限制。
而全卷积网络(FCN)则是从笼统的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。
全衔接层 -> 成卷积层
全衔接层和卷积层之间独一的不同就是卷积层中的神经元只与输入数据中的一个部分区域衔接,并且在卷积列中的神经元共享参数。但是在两类层中,神经元都是计算点积,所以它们的函数方式是一样的。因而,将此两者互相转化是可能的:
关于任一个卷积层,都存在一个能完成和它一样的前向传播函数的全衔接层。权重矩阵是一个宏大的矩阵,除了某些特定块,其他局部都是零。而在其中大局部块中,元素都是相等的。
相反,任何全衔接层都能够被转化为卷积层。比方,一个
全衔接层转化为卷积层:在两种变换中,将全衔接层转化为卷积层在实践运用中愈加有用。假定一个卷积神经网络的输入是
针对第一个衔接区域是[7x7x512]的全衔接层,令其滤波器尺寸为F=7,这样输出数据体就为[1x1x4096]了。
针对第二个全衔接层,令其滤波器尺寸为F=1,这样输出数据体为[1x1x4096]。
对最后一个全衔接层也做相似的,令其F=1,最终输出为[1x1x1000]
实践操作中,每次这样的变换都需求把全衔接层的权重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网络中一切的层都是卷积层,故称为全卷积网络。
这里写图片描绘
下图是一个全卷积层,与上图不一样的是图像对应的大小下标,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以后,得到的图像越来越小,分辨率越来越低。其中图像到
这里写图片描绘
最后的输出是1000张heatmap经过upsampling变为原图大小的图片,为了对每个像素停止分类预测label成最后曾经停止语义分割的图像,这里有一个小trick,就是最后经过逐一像素地求其在1000张图像该像素位置的最大数值描绘(概率)作为该像素的分类。因而产生了一张曾经分类好的图片,如下图右侧有狗狗和猫猫的图。
这里写图片描绘
upsampling
相较于运用被转化前的原始卷积神经网络对一切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之后的图像停止再次反卷积补充细节,最后就完成了整个图像的复原。
这里写图片描绘
缺陷
在这里我们要留意的是FCN的缺陷:
是得到的结果还是不够精密。停止8倍上采样固然比32倍的效果好了很多,但是上采样的结果还是比拟含糊战争滑,对图像中的细节不敏感。
是对各个像素停止分类,没有充沛思索像素与像素之间的关系。疏忽了在通常的基于像素分类的分割办法中运用的空间规整(spatial regularization)步骤,缺乏空间分歧性。
上一条:深度学习中常遇到的问题
下一条:深度学习中的卷积神经网络