0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文深度解析全卷积网络FCN

罗欣 来源:博客园 - 代码初学者 作者:佚名 2018-10-11 11:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

背景

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)则是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。

全连接层 ->成卷积层

全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数形式是一样的。

因此,将此两者相互转化是可能的:

• 对于任一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。权重矩阵是一个巨大的矩阵,除了某些特定块,其余部分都是零。而在其中大部分块中,元素都是相等的。

• 相反,任何全连接层都可以被转化为卷积层。比如,一个 K=4096 的全连接层,输入数据体的尺寸是 7∗7∗512,这个全连接层可以被等效地看做一个 F=7,P=0,S=1,K=4096 的卷积层。换句话说,就是将滤波器的尺寸设置为和输入数据体的尺寸一致了。因为只有一个单独的深度列覆盖并滑过输入数据体,所以输出将变成 1∗1∗4096,这个结果就和使用初始的那个全连接层一样了。

全连接层转化为卷积层:在两种变换中,将全连接层转化为卷积层在实际运用中更加有用。假设一个卷积神经网络的输入是 224x224x3 的图像,一系列的卷积层和下采样层将图像数据变为尺寸为 7x7x512 的激活数据体。AlexNet使用了两个尺寸为4096的全连接层,最后一个有1000个神经元的全连接层用于计算分类评分。

我们可以将这3个全连接层中的任意一个转化为卷积层:

针对第一个连接区域是[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以后,得到的图像越来越小,分辨率越来越低。其中图像到 H/32∗W/32 的时候图片是最小的一层时,所产生图叫做heatmap热图,热图就是我们最重要的高维特诊图,得到高维特征的heatmap之后就是最重要的一步也是最后的一步对原图像进行upsampling,把图像进行放大、放大、放大,到原图像的大小。

最后的输出是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)步骤,缺乏空间一致性。

本文来源:博客园-代码初学者

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FCN
    FCN
    +关注

    关注

    0

    文章

    9

    浏览量

    8933
  • 全卷积网络
    +关注

    关注

    0

    文章

    7

    浏览量

    2265
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶中常提的卷积神经网络是个啥?

    在自动驾驶领域,经常会听到卷积神经网络技术。卷积神经网络,简称为CNN,是种专门用来处理网格状数据(比如图像)的
    的头像 发表于 11-19 18:15 1826次阅读
    自动驾驶中常提的<b class='flag-5'>卷积</b>神经<b class='flag-5'>网络</b>是个啥?

    CNN卷积神经网络设计原理及在MCU200T上仿真测试

    CNN算法简介 我们硬件加速器的模型为Lenet-5的变型,网络粗略分共有7层,细分共有13层。包括卷积,最大池化层,激活层,扁平层,连接层。下面是各层作用介绍: 卷积层:提取
    发表于 10-29 07:49

    NMSIS神经网络库使用介绍

    :   神经网络卷积函数   神经网络激活函数   连接层函数   神经网络池化函数   Softmax 函数   神经
    发表于 10-29 06:08

    卷积运算分析

    卷积运算的基础运算是乘加运算(MAC,Multiplication and Accumulation),本文设计了基本运算单元PE模块来实现MAC运算。对于卷积运算而言,次性至少处理
    发表于 10-28 07:31

    在Ubuntu20.04系统中训练神经网络模型的些经验

    模型。 我们使用MNIST数据集,训练卷积神经网络(CNN)模型,用于手写数字识别。旦模型被训练并保存,就可以用于对新图像进行推理和预测。要使用生成的模型进行推理,可以按照以下步
    发表于 10-22 07:03

    ​​PCBA拼板分板流程解析:从设计到量产,每步都很关键!

    的核心要点。 PCBA拼板分板流程解析 、PCBA拼板设计规范 1. 标准化尺寸匹配 - 根据SMT设备进板规格设计拼板尺寸 - 常规建议拼板尺寸控制在250mm×150mm以内 - 保留≥5mm工艺边并设置定位孔 2. V
    的头像 发表于 09-02 09:23 746次阅读
    ​​PCBA拼板分板<b class='flag-5'>全</b>流程<b class='flag-5'>解析</b>:从设计到量产,每<b class='flag-5'>一</b>步都很关键!

    宁畅与与百度心大模型展开深度技术合作

    与部署。 凭借覆盖训练、推理、微调流程的AI 服务器产品矩阵,宁畅帮助企业在大模型时代键打通算力与应用“任督二脉”,显著缩短模型落地周期。 在已启动的深度技术合作中,双方将基于
    的头像 发表于 07-07 16:26 638次阅读

    技术干货 | 从偏移误差到电源抑制比,DAC核心术语解析

    偏移误差、增益误差、INL/DNL、转换时间……这些关键指标如何定义?如何影响DAC性能?本文DAC核心术语解析带您掌握关键参数!
    的头像 发表于 06-19 10:38 422次阅读
    技术干货 | 从偏移误差到电源抑制比,DAC核心术语<b class='flag-5'>全</b><b class='flag-5'>解析</b>

    Nginx核心功能深度解析

    Nginx核心功能深度解析
    的头像 发表于 05-09 10:50 688次阅读

    边缘AI MPU深度盘点:品牌、型号与技术特性解析

    边缘AI MPU深度盘点:品牌、型号与技术特性解析 随着边缘计算与人工智能的深度融合,边缘AI MPU(微处理器)已成为支撑物联网、智能制造、自动驾驶等场景的核心硬件。本文从品牌、型
    的头像 发表于 04-30 17:27 3310次阅读

    十种主流电机拆解解析:内部结构大揭秘!

    点击附件查看全文*附件:十种主流电机拆解解析:内部结构大揭秘!.doc (免责声明:本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第时间告知,删除
    发表于 04-01 14:25

    如何使用MATLAB实现维时间卷积网络

    本文对卷积操作进行介绍,包括维扩展卷积维因果卷积,以及 MATLAB 对
    的头像 发表于 03-07 09:15 1660次阅读
    如何使用MATLAB实现<b class='flag-5'>一</b>维时间<b class='flag-5'>卷积</b><b class='flag-5'>网络</b>

    解析工业互联网

    电子发烧友网站提供《解析工业互联网.pptx》资料免费下载
    发表于 02-20 16:42 1次下载

    BP神经网络卷积神经网络的比较

    多层。 每层都由若干个神经元构成,神经元之间通过权重连接。信号在神经网络中是前向传播的,而误差是反向传播的。 卷积神经网络(CNN) : CNN主要由
    的头像 发表于 02-12 15:53 1301次阅读

    深度解析研华栈式AI产品布局

    在人工智能迈向边缘智能化的浪潮中,研华科技通过“Edge AI+生态协同”战略推动AIoT 2.0时代的产业落地。本文专访研华科技产品总监邱柏儒,深度解析研华栈式AI产品布局、差异化技术积累与生态共创实践。
    的头像 发表于 12-05 09:51 1450次阅读