【Network Architecture】SegNet论文解析(转)

文章来源: https://blog.csdn.net/fate_fjh/article/details/53467948

Introduction

自己制作国内高速公路label,使用SegNet训练高速公路模型,测试效果

参考:http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html

SegNet是Cambridge提出旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,开放源码,基于caffe框架。SegNet基于FCN,修改VGG-16网络得到的语义分割网络,有两种SegNet,分别为正常版与贝叶斯版,同时SegNet作者根据网络的深度提供了一个basic版(浅网络)。

Outline

                                              图1

  • 1

SegNet网络结构如图1所示,Input为输入图片,Output为输出分割的图像,不同颜色代表不同的分类。语义分割的重要性就在于不仅告诉你图片中某个东西是什么,而且告知你他在图片的位置。我们可以看到是一个对称网络,由中间绿色pooling层与红色upsampling层作为分割,左边是卷积提取高维特征,并通过pooling使图片变小,SegNet作者称为Encoder,右边是反卷积(在这里反卷积与卷积没有区别)与upsampling,通过反卷积使得图像分类后特征得以重现,upsampling使图像变大,SegNet作者称为Decoder,最后通过Softmax,输出不同分类的最大值。这就是大致的SegNet过程,下面对这个过程里面使用到的方法进行介绍。

Convolution

SegNet的Encoder过程中,卷积的作用是提取特征,SegNet使用的卷积为same卷积(详见卷积神经网络CNN(1)),即卷积后不改变图片大小;在Decoder过程中,同样使用same卷积,不过卷积的作用是为upsampling变大的图像丰富信息,使得在Pooling过程丢失的信息可以通过学习在Decoder得到。SegNet中的卷积与传统CNN的卷积并没有区别。

Batch Normalisation

批标准化(详见卷积神经网络CNN(2))的主要作用在于加快学习速度,用于激活函数前,在SegNet中每个卷积层都会加上一个bn层,bn层后面为ReLU激活层,bn层的作用过程可以归纳为:

(1)训练时:

1.向前传播,bn层对卷积后的特征值(权值)进行标准化,但是输出不变,即bn层只保存输入权值的均值与方差,权值输出回到卷积层时仍然是当初卷积后的权值。

2.向后传播,根据bn层中的均值与方差,结合每个卷积层与ReLU层进行链式求导,求得梯度从而计算出当前的学习速率。

(2)测试时:每个bn层对训练集中的所有数据,求取总体的均值与方差,假设有一测试图像进入bn层,需要统计输入权值的均值与方差,然后根据训练集中整体的无偏估计计算bn层的输出。注意,测试时,bn层已经改变卷积的权值,所以激活层ReLU的输入也被改变。

ReLU

ReLU是对于传统激活函数sigmoid的改进,主要在梯度消失的问题上得到很好的解决。ReLU函数如下图所示,ReLU的输出为a=max(0,z)。

                图2

  • 1

在传统的CNN网络中,ReLU通常在全连接之后,结合偏置bias用于计算权值的输出,但是,在Seg

Net作者的研究中发现,激活层越多越有利于图像语义分割。图3为论文中,不同深度的卷积层增加与不增加激活函数的对比图。

                                           图3

  • 1

Pooling&Upsampling

Pooling在CNN中是使得图片缩小一半的手段,通常有max与mean两种Pooling方式,图4所示的是max Pooling。max Pooling是使用一个2x2的filter,取出这4个权重最大的一个,原图大小为4x4,Pooling之后大小为2x2,留意原图左上角粉色的四个数,最后只剩最大的6,这就是max的意思。

                                                  图4

  • 1

在SegNet中的Pooling与其他Pooling多了一个index的功能,也就是每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置,对于图4的6来说,6在粉色2x2 filter中的位置为(1,1)(假设index从0开始),黄色的3的index为(0,0)。同时,从图1可以看到绿色的pooling与红色的upsampling通过pool indices相连,实际上是pooling后的indices输出到对应的upsampling(因为网络是对称的,所以第1此的pooling对应最后1次的upsamping,如此类推)。

Upsamping就是Pooling的逆过程,Upsamping使得图片变大2倍。我们清楚的知道Pooling之后,每个filter会丢失了3个权重,这些权重是无法复原的,但是在Upsamping层中可以得到在Pooling中相对Pooling filter的位置。所以Upsampling中先对输入的特征图放大两倍,然后把输入特征图的数据根据Pooling indices放入,如图5所示,Unpooling对应上述的Upsampling,switch variables对应Pooling indices。

                         图5

  • 1

Deconvolution

从图5中右边的Upsampling可以知道,2x2的输入,变成4x4的图,但是除了被记住位置的Pooling indices,其他位置的权值为0,因为数据已经被pooling走了。因此,SegNet使用的反卷积在这里用于填充缺失的内容,因此这里的反卷积与卷积是一模一样的(反卷积详见卷积神经网络CNN(1)),在图1中跟随Upsampling层后面的是也是卷积层。

Output

在图1中,SegNet,最后一个卷积层会输出所有的类别(包括other类),网络最后加上一个softmax层,由于是end to end, 所以softmax需要求出所有每一个像素在所有类别最大的概率,最为该像素的label,最终完成图像像素级别的分类。


Bayesian SegNet

可以知道,在SeNet中最后每个像素都会对每一类的概率进行计算,再通过Softmat输出概率最大的一个,然后这个像素点就认为是这一类别,对应的概率就是这一像素属于该类的概率。这种由原因到结果的推导,可以称为先验概率,任何先验概率使用都会出现一个问题,不能知道这一结果的可靠性,即便先验概率非常大,但是对于不同的样本,先验概率无法保证一定正确。正是如此,才需要有从结果寻找原因的贝叶斯概率,即后验概率,它能给出结果的可信程度,即置信度。Bayesian SegNet正是通过后验概率,告诉我们图像语义分割结果的置信度是多少。Bayesian SegNet如图6所示。

                                            图6

  • 1

对比图1与图6,并没有发现Bayesian SegNet与SegNet的差别,事实上,从网络变化的角度看,Bayesian SegNet只是在卷积层中多加了一个DropOut层,其作用后面解释。最右边的两个图Segmentation与Model Uncertainty,就是像素点语义分割输出与其不确定度(颜色越深代表不确定性越大,即置信度越低)。

DropOut

在传统神经网络中DropOut层的主要作用是防止权值过度拟合,增强学习能力。DropOut层的原理是,输入经过DropOut层之后,随机使部分神经元不工作(权值为0),即只激活部分神经元,结果是这次迭代的向前和向后传播只有部分权值得到学习,即改变权值。

因此,DropOut层服从二项分布,结果不是0,就是1,在CNN中可以设定其为0或1的概率来到达每次只让百分之几的神经元参与训练或者测试。在Bayesian SegNet中,SegNet作者把概率设置为0.5,即每次只有一半的神经元在工作。因为每次只训练部分权值,可以很清楚地知道,DropOut层会导致学习速度减慢。

Gaussian process & Monte Carlo Dropout Sampling

参考论文:Dropout as a Bayesian approximation: Representing model uncertainty in deep learning

这里只说明高斯过程与蒙特卡罗抽样的作用,不详细解释原理。

高斯过程是指任意有限个随机变量都服从联合高斯分布,同时只需要知道均值与协防差就能够确定一个高斯过程,所以高斯过程可以用于从有限维到无限维的回归问题,从已知高斯分布,增加新的随机变量分布可以求出新的高斯分布,根据新的分布可以求出其均值与方差。

如何确定一个高斯分布?需要多次采样才能确定一个分布。蒙特卡罗抽样告诉我们可以通过设计一个试验方法将一个事件的频率转化为概率,因为在足够大的样本中,事件发生的频率会趋向事件发生的概率,因此可以很方便地求出一个未知分布。通过蒙特卡罗抽样,就可以求出一个新分布的均值与方差,这样使用方差大小就可以知道一个分布对于样本的差异性,我们知道方差越大差异越大。

Use Bayesian SegNet

在Bayesian SegNet中通过DropOut层实现多次采样,多次采样的样本值为最后输出,方差最为其不确定度,方差越大不确定度越大,如图6所示,mean为图像语义分割结果,var为不确定大小。所以在使用Bayesian SegNet预测时,需要多次向前传播采样才能够得到关于分类不确定度的灰度图,Bayesian SegNet预测如图7所示。

                                                 图7

  • 1

第一行为输入图像,第二行为ground truth,第三行为Bayesian SegNet语义分割输出,第四行为不确定灰度图。可以看到,

1.对于分类的边界位置,不确定性较大,即其置信度较低。

2.对于图像语义分割错误的地方,置信度也较低。

3.对于难以区分的类别,例如人与自行车,road与pavement,两者如果有相互重叠,不确定度会增加。

原文地址:https://www.cnblogs.com/kk17/p/10015627.html

时间: 2024-11-10 08:59:24

【Network Architecture】SegNet论文解析(转)的相关文章

【Network Architecture】Densely Connected Convolutional Networks 论文解析

0. Paper link 1. Overview ??文章开篇提到了如果在靠近输入与输出的层之间存在短连接(shorter connections),可以训练更深.更准确.更有效的卷积网络,DenseNet利用了这个性质,每层都与之前所有的层进行连接,即之前所有层的feature map都作为这一层的输入.DenseNet有减少梯度消失,增强特征传递,鼓励特征重利用同时极大的减少了参数的数量.在很多任务上达到了state-of-the-art. ??另外DenseNet并不是像ResNet那样

3D U-Net论文解析

3D U-Net这篇论文的诞生主要是为了处理一些块状图(volumetric images),基本的原理跟U-Net其实并无大差,因为3D U-Net就是用3D卷积操作替换了2D的,不过在这篇博文中我会按照论文的结构大概介绍一下整体的原理及结构运用.当然在原本的论文中,论文作者为了证实框架的可执行性及实验的最终结果,是设立了两组不同的实验的,一个是半自动设置(即:人为地利用算法对3D图像中地某些切片(slices)进行标注然后再放入模型中去跑程序),而另外一种情况则是作者假设有代表性地,稀疏地标

HectorSLAM论文解析?代码重写(3)

这篇文章为HectorSLAM系列的以下部分 HectorSLAM的整体逻辑 激光匹配 地图构造 地图更新 500行代码重写一个LidarSLAM 测试数据的准备,和测试数据读取模块的编写 GUI编写 地图模块的编写 核心模块的编写 主循环 匹配算法 本文中的代码和数据放在:https://github.com/scomup/lslam 在[HectorSLAM论文解析?代码重写(2)]中,我们已经理清楚理论,从这一篇文章开始,我们就用python,手把手把上面的内容用代码实现. 当然在代码之前

CVPR2020论文解析:视频分类Video Classification

CVPR2020论文解析:视频分类Video Classification Rethinking Zero-shot Video Classification: End-to-end Training for Realistic Applications 论文链接:https://arxiv.org/pdf/2003.01455.pdf 摘要 深度学习(deep learning,DL)是在大型数据集上进行训练的,它可以将视频准确地分为数百个不同的类.然而,视频数据的注释是昂贵的.Zero-sh

【Network Architecture】Feature Pyramid Networks for Object Detection(FPN)论文解析(转)

目录 0. 前言 1. 博客一 2.. 博客二 0. 前言 ??这篇论文提出了一种新的特征融合方式来解决多尺度问题, 感觉挺有创新性的, 如果需要与其他网络进行拼接,还是需要再回到原文看一下细节.这里转了两篇比较好的博客作为备忘. 1. 博客一 这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测,有许多亮点,特来分享. 论文:feature pyramid networks for object detection 论文链接:https://arxiv.org/abs/1612.031

【Network architecture】Rethinking the Inception Architecture for Computer Vision(inception-v3)论文解析

0. paper link inception-v3 1. Overview ??这篇文章很多"经验"性的东西,因此会写的比较细,把文章里的一些话摘取出来,多学习一下,希望对以后自己设计网络有帮助. 2. Four General Design Principles ??这里文章介绍了四种设计网络设计原则,这是作者利用各种卷积网络结构,通过大量的实验推测的. 避免特征表示瓶颈,尤其是在网络的前面.要避免严重压缩导致(pooling,卷积等操作)的瓶颈.特征表示尺寸应该温和的减少,从输入

【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析

0. Paper link MobileNets 1. Overview ??MobileNets是一种基于深度可分割卷积的轻量流线型结构,引进了两个简单的全局超参数在延迟与准确率之间达到了平衡,并且超参数让model builder可以按照不同的应用场景的限制去选择合适大小的模型,网络的主要贡献是把传统的卷积拆成了"deepwise convolution"与"pointwise convolution"来减少卷积过程的计算量与参数数量,同时利用了两个超参数来改变

视频动作定位的分层自关注网络:ICCV2019论文解析

Hierarchical Self-Attention Network for Action Localization in Videos 论文链接: http://openaccess.thecvf.com/content_ICCV_2019/papers/Pramono_Hierarchical_Self-Attention_Network_for_Action_Localization_in_Videos_ICCV_2019_paper.pdf 摘要 提出了一种新的分层自聚焦网络(HISA

HectorSLAM论文解析?代码重写(2)

这篇文章为HectorSLAM系列的以下部分 HectorSLAM的整体逻辑 激光匹配 地图构造 地图更新 500行代码重写一个LidarSLAM 测试数据的准备,和测试数据读取模块的编写 GUI编写 地图模块的编写 核心模块的编写 主循环 匹配算法 首先绘制一张以扫描匹配为核心的SLAM(例如Hector,Karto_slam,Cartographer..)大概的流程图: 基本上以这一类SLAM流程分以下几个部分: motion prediction(运动预测) scan matching(扫