仿站定制优惠中 --更多类型选择联系-> 服务热线:13025755889
当前位置:网站首页 >> 新闻资讯 >> 公司新闻 >> 查看详情
新闻资讯
公司新闻

公司新闻

DeepLab-V3语义分割网络架构的设计与实现TensorFlow

来源:惠州网站建设  日期:2018-03-29 09:08:35  点击: 
深度卷积神经网络来实现各类计算机视觉应用了显着成效,语义分割也不例外。本文介绍了语义师TensorFlow实现,并讨论最相关的论文和语义分割共同的目标--DeepLab-V3。DeepLab-V3由谷歌开发的语义网络分段,近日,谷歌开源的最新版本的系列--DeepLab-V3 +的。

 

  从培养基中筛选

  作者:Thalles席尔瓦

  参与:努尔哈赤空,刘晓昆

  深度卷积神经网络来实现各类计算机视觉应用了显着成效,语义分割也不例外。本文介绍了语义师TensorFlow实现,并讨论最相关的论文和语义分割共同的目标--DeepLab-V3。DeepLab-V3由谷歌开发的语义网络分段,近日,谷歌开源的最新版本的系列--DeepLab-V3 +的。

  GitHub的地址:https:// github上。COM / sthalles / deeplab_v3

  语义分割

  常规卷积深度图像分类的神经网络具有类似的结构。这些模型图像作为输入,并输出一个值代表图像类别。

  在一般情况下,卷积神经网络分类的深度有四个主要操作。卷积激活功能,以及全连接层的游泳池。传送图片,通过一系列这些操作中的每个类别标签输出的概率将包括的特征向量。请注意,在此设置中,我们的整个画面进行分类。换句话说,分配的标签的图像。

  

  对于学习图像识别标准深度模型。

  和图像分类是不同的,我们将图像中的每个像素进行分类的语义分割。因此,对于每个像素,模型需要其分类为预定义的类别中的一个。换句话说,语义分割理解的是,在像素级的图像。

  请记住,语义分割并不目标实例区分。所以,如果我们有同一类的两个目标,他们最终将有同一类标签。分割的例子是区分类的不同实例的问题。

  

  例如语义分割分割差。(在),尽管它们是相同的目标,它们被归类为不同的靶(实施例划分)。(右)相同的目标,同样的类别(语义分割)。

  然而,传统的卷积深度神经网络(如AlexNet和VGG)并不适用于预测的密集型任务。第一,这些模型包括多个层的用于减少输入特征的空间维度。其结果是,这些层最终产生一个高度抽象的特征矢量缺乏清晰的细节。具有全量程固定输入和松散空间信息计算处理的第二,粘结层。

  作为一个例子,假设图像以通过一系列卷积的,而不是使用全细胞和连接层。我们将每一圈以1:2,填充步骤设置 "相同"。通过这一过程,各个卷积保留空间维度输入。我们可以叠加很多这样的卷积,最后得到一个细分模型。

  

  对于密集的神经网络预测全卷积。需要注意的是,整个细胞层和连接层不存在。

  该模型可以被输出到[W,H,C]概率张量,其中W和H分别表示的宽度和高度的形状,C表示类别标签的数量。在第三维函数将被应用到最大化形状[W,H,1]张量。然后,每个像素之间的交叉熵我们计算真实图像与我们的预测。最后,我们平均的结果,并使用反向传播算法训练网络。

  但是,这种方法的一个问题。如前面提到的,在1,填充步骤中使用 "相同",保留输入的尺寸。然而,这样做的后果是模型将是非常耗时的存储和计算复杂性是很大的。

  为了缓解这一问题,将网络通常具有三个主要组件:一个卷积层,层的下采样和上采样层。

  

  图像分割语义模型编码器 - 解码器结构。

  两个卷积神经网络的下采样通常方式:常规的卷积步骤或通过改变电池运行。一般地,目标是减少下采样图的给定特征的空间尺寸.。因此,下采样可以让我们没有太多的表演更深的记忆卷积运算时要考虑。然而,在某些功能丧失的时间这样的计算。

  值得注意的是,这种架构的第一部分看起来像卷积神经网络分类的正常水深。不同的是,在其中未设置整个连接层。

  的第一部分之后,我们得到了一个特征矢量[W,H,d],其中W,H,d是张量的特征宽度,高度和深度的形状。需要注意的是比原来的输入就更少了,但更坚定的向量空间降维。

  

  上图:原始形式VGG-16网络。值得注意的是,堆叠的卷积的顶层具有三个完全连接层。底部:使用1x1卷积,而不是整个连接层VGG-16网络。这种变化使网络输出粗糙的热图。

  在这点上,传统的分类的神经网络卷积深度将打印出的概率为致密的每个类别(非空间)载体。相反,我们将进入到一个压缩的载体层上的一系列样品。这些层的功能是样品的相同的输入和输出向量维度重建。

  典型地,该采样是基于替换完成卷积步骤(跨距转置卷积)。这些功能变得从深层浅且宽的和窄层。在这里,我们使用了维特征向量更换卷积提高到期望的结果。

  在大多数文件,网络的两个分开部分被称为编码器和解码器。总之,的信息的第一部分 "编码" 作为输入向量压缩的代表。第二部分(解码器)的作用是所期望的输出信号被重构。

  有许多基于编码器 - 神经网络解码器结构来实现。FCNs,SegNet,它是最流行的几个UNET的。

  模型架构

  与大多数的编码器 - 解码器结构不同,Deeplab语义分割提供了一种不同的方法。Deeplab提出用于控制信号提取结构和多尺度研究上下文特征。

  

  Deeplab在训练前ImagNet RESNET得到作为其主要特征提取网络。但是,它的特点是多尺度研究增加新的残余块。最后的块使用RESNET中空卷积(卷积atrous),而不是常规的卷积。另外,在残留的块中的每个卷积被用来捕获所述上下文信息的多尺度的不同的膨胀率。

  此外,残余块的顶端使用汇集的空隙空间金字塔(ASPP,Atrous空间金字塔池)。ASPP使用不同的膨胀率的卷积任何规模的区域分类。

  要了解Deeplab架构,我们需要集中注意力三个部分。(I)RESNET框架,(ⅱ)中空卷积,(iii)所述中空空间金字塔汇集(ASPP的)。接下来,我们描述每个部分的。

  ResNets

  RESNET是一个非常受欢迎的深卷积神经网络结构,从而赢得了2015年ILSVRC分类任务的冠军挑战赛。它的一个主要贡献是提供一个框架,以简化深入学习模型训练。

  RESNET在原始形式,计算模块包含四个。每个模块包含不同数目的剩余单元的。卷积运算装置执行一系列的特殊形式。类似地,每个模块电池运行包含物最大空间尺寸,以减少。

  原始提出两个残留单元:基线块和瓶颈块。

  基线数据块包括两个3×3的卷积,采用BN卷积(批次归一化)和激活功能RELU。

  

  剩余模块。 左:基线块; 右:瓶颈块。

  第二块的瓶颈,它包括三个部分叠层,用一系列1x1,3x3和1x1的卷积,而不是以前的设计。两个1x1的卷积是减少和恢复尺寸。这使得3×3的卷积中间体可以在特征向量的相对低的密度操作。此外,每个卷积后,BN分别非线性RELU之前施加。

  为了帮助弄清这个问题,我们将在本组操作定义为的架F函数的输入 - F(X)。

  后的非线性变换(x)为F时,单元F(x)和组合原始输入x的结果。的两种功能这种组合是通过对所获得的获得。原始输入x与非线性函数F(x)的合并带来的一些优点。它允许访问层梯度信号后面的前层。换句话说,跳过操作F(x)的,以允许访问所述前层更强的梯度信号。这种类型的连接已经被证明有助于更深入的培训网络。

  当我们增加模型的能力,非瓶颈单元也有助于提高展会的准确性。然而,瓶颈残差单元具有许多实用的优点。首先,他们可以在几乎相同数量的参数执行额外的计算。其次,他们类似于非瓶颈计算单元的复杂性。

  在实践中,瓶颈部还适用于更深层次的培训模式的培训时间,因为他们需要更少的计算资源和。

  在我们的实现,我们将使用完整的预激活剩余单元(全预活化残基单元),唯一的区别是,标准单元放置顺序瓶颈BN和激活功能RELU。对于全预活化,BN和RELU(以该顺序)的卷积之前出现。

  

  不同积木块架构RESNET。 最左边的:原始RESNET模块; 最右边:改进的全预激活版。

  如 "在深残留网络标识映射" 在同一节目。充分活化预单元要优于其他变体。

  需要注意的是,这些设计之间的唯一区别是堆叠在BN和RELU的顺序卷积。

  空卷积

  中空卷积(卷积或膨胀),其具有传统的卷积因子,此因子使我们能够扩大的视图过滤器的场。

  在实施例3×3滤波器的卷积。当扩展因子等于1,它的行为就像一个标准的卷积。但是,如果扩展系数设置为2,它扩大了卷积核的作用。

  从理论上讲,它的工作原理是这样的:首先,将卷积滤波器的膨胀比扩大。然后,用零填充空的空间,创建一个稀疏状滤波器。最后,使用常规的滤波卷积膨胀。

  

  不同的膨胀率的空卷积

  因此,3×3的大小,2的卷积的膨胀速率将使它能够覆盖5×5的区域。但是,由于它的作用就像一个稀疏滤波器,只有原来的3×3单元执行计算,并生成一个结果。

  以类似的方式,扩展系数是3. 的传统3×3 7×7的卷积获得对应于该区域的信号。

  这种效应使我们能够计算分辨率的控制响应特性。此外,在卷积不增加的参数数量的增加腔计算或上下文信息更宽的范围的量。

  Deeplab也表现出的膨胀速率必须根据图1的特征的尺寸来调整.。他们研究使用地图上的小功能大膨胀率的结果。

  

  图小的特征设定为膨胀比的较大侧。使用3×3的卷积的膨胀率为14×14,15输入的图像,类似于1×1的常规的卷积的结果。

  当膨胀比非常接近特征地图的大小,3×3 1×1标准常规空腔滤波器的效果是一样的卷积。

  换句话说,卷积效率依赖于扩展率选择的腔体。出于这个原因,了解在长(输出步幅)的概念神经网络的输出步骤是非常重要的。

  输出步骤反射的图大小,它定义了输入矢量信号的抽象程度的输出特性的输入图像尺寸比由网络进行。

  输出步骤16中,当224x224x3图像大小,比输入图像小的输出特性的尺寸的16倍,到14×14。

  此外,Deeplab讨论的划分输出模型的不同步骤的影响。Deeplab认为过于强烈的信号,抽象,不利于集约预测任务。总之,具有小输出步骤(抽象较弱的信号)输出模型倾向于更精细的分割结果。然而,使用较小的输出步训练模式需要更多的训练时间。

  Deeplab还示出了在(8和16)的结果设置两个输出步骤。正如预期的那样,步长等于8可以产生略微更好的结果。在这里,出于实际考虑,我们选择了16作为输出步。

  另外,由于中空卷积块下采样没有实现,它也运行在相同的尺寸ASPP响应特性。因此,允许使用从多尺度相对较大的膨胀比学习特征的上下文。

  空隙残余块包括三个新的剩余部。三个单元共有3×3的卷积的三个块。通过多重网格(多重网格)方法的启发,Deeplab设置不同的膨胀速率为每个卷积。总之,多重网格3个卷积每个卷积的限定膨胀的不同速率。

  事实上:

  用于块4,当步骤16的输出是,对于多格(2,4)时的膨胀比三个卷积(2,4,8)。

  金字塔池的空白处

  汇集(ASPP)空空间金字塔的想法是提供信息的多尺度模型。要做到这一点,ASPP加入不同膨胀速率的系列中空卷积。扩张速度被设计为捕获各种情况下。此外,为了提高整体的上下文信息,所述ASPP也由池的总体平均水平集成了图像的特征(GAP)。

  这ASPP的版本包括四个并行操作。它们三者的1×1和3×3的卷积(膨胀速率,分别为(12,18))的卷积。正如我们前面所提到的,现在,在图标称步长大小(标称跨度)是16.

  在原执行的基础上,我们使用的513 惠州网站优化 X513训练和测试的作物规模。因此,使用装置16输出32×32 ASPP的步长接收的特征矢量。

  此外,为了与ASPP级特征图像添加更多的全球环境信息,并结合。首先,其将从最后一个孔GAP块输出被施加的特征。接着,将所得设有1×1被输入到具有卷积滤波器256。最后,采样的结果正确的尺寸双线性的大小。

  @瘦.add_arg_scope

  DEF atrous_spatial_pyramid_pooling(净,范围,深度= 256):

  "" "

  ASPP由(a)一种1×1卷积和三个3×3的卷积用率=(6,12,18),当输出步幅= 16的

  (所有与256层的过滤器和批标准化),和(b)图像级的特征如描述的https://的arXiv.组织/ ABS / 1706.05587

  :PARAM净:形状的张量[BATCH_SIZE,宽度,高度,深度]

  :PARAM范围:ASPP层的范围名称

  :返回:与ASPP网络层applyed到它.

  "" "

  与TF.variable_scope(范围):

  feature_map_size = TF.形状(净值)

  #将全球平均池

  图片_level_features = TF.reduce_mean(净,[1,2],名称= '图片_level_global_pool',keep_dims =真)

  图片_level_features =苗条.conv2d(image_level_features,深度,[1,1],范围= "image_level_conv_1x1",activation_fn =无)

  image_level_features = TF.image.resize_bilinear(image_level_features,(feature_map_size [1],feature_map_size [2]))

  at_pool1x1 =苗条.conv2d(净,深度,[1,1],范围= "conv_1x1_0",activation_fn =无)

  at_pool3x3_1 =苗条.conv2d(净,深度,[3,3],范围= "conv_3x3_1",速率= 6,activation_fn =无)

  at_pool3x3_2 =苗条.conv2d(净,深度,[3,3],范围= "conv_3x3_2",速率= 12,activation_fn =无)

  at_pool3x3_3 =苗条.conv2d(净,深度,[3,3],范围= "conv_3x3_3",速率= 18,activation_fn =无)

  净= TF.的CONCAT((image_level_features,at_pool1x1,at_pool3x3_1,at_pool3x3_2,at_pool3x3_3),轴= 3,

  名称= "concat")

  净=苗条.conv2d(净,深度,[1,1],范围= "conv_1x1_output",activation_fn =无)

  返回网

  最后,各个分支的特征通过连接各个矢量组合成一个操作。然后使用另一个1×1(使用BN,和过滤器256)的卷积的输出进行卷积。

  ASPP后,我们将进一步导致对的1×1的卷积,以产生最终的分割逻辑。

  实施细节

  作为一个特征提取器实现的RESNET-50,Deeplab_v3网络配置通过如下:

  输出步骤16 =

  新腔的残余块(块4)的固定速率的卷积多重网格空腔(1,2,4)

  所述ASPP的最后卷积残余块空腔(12,18)之后使用膨胀率。

  输出步长设置为16利于可持续快速培训。相比于其他输出步骤8中,输出步骤是这样的空腔16,其中,当图8的图步骤中的处理是小四倍特征残余块的处理。

  膨胀比被施加到多网格块的残余中空卷积3内。

  最后,ASPP并联卷积三个不同的速率膨胀 - (6,12,18)。

  计算交叉熵损失函数之前,我们会从逻辑上划分输入图像尺寸调整。正如文章指出,为了保持该决议的细节,更好地调整逻辑分割大小调整的尺寸比实际的标签。

  在原有基础上的培训过程中,我们使用了0.5-2为每个图像之间的随机因素做推广。此外,我们也做了缩放图像,随机左右翻转。

  最后,我们削减图像尺寸为513 X513的培训和测试。

  DEF deeplab_v3(输入,指定参数时,is_训练,再利用):

  #平均减法正常化

  输入=输入 - [_R_MEAN,_G_MEAN,_B_MEAN]

  #输入具有形状[分批,513,513,3]

  与苗条.arg_scope(resnet_utils.resnet_arg_scope(参数.l2_regularizer,is_training,

  ARGS.batch_norm_decay,

  ARGS.batch_norm_epsilon)):

  RESNET = GETATTR(resnet_v2,ARGS.resnet_model)

  _,End_points = RESNET(输入,

  ARGS.number_of_classes,

  is_training = is_training,

  global_pool =假

  spatial_squeeze =假

  output_stride = ARGS.output_stride,

  重用=重用)

  与TF.variable_scope( "DeepLab_v3"化,再利用=重用):

  #获取块4所输出的特征

  净= end_points [参数.resnet_model + '/块4']

  净= atrous_spatial_pyramid_pooling(净, "ASPP_layer",深度= 256,再利用=重用)

  净=苗条.conv2d(净值,ARGS.number_of_classes,[1,1],activation_fn =无,

  normalizer_fn =无,范围= 'logits')

  大小= TF.形状(输入)[1:3]

  #调整输出logits相匹配的标签尺寸

  #网= TF.image.resize_nearest_neighbor(净,大小)

  净= TF.image.resize_bilinear(净,大小)

  返回网

  为了实现与多个网格网络块4残余尿卷积,我们只是改变了resnet_utils.下面的代码PY文件:

  ...

  与TF.variable_scope( 'unit_%d' %(I + 1),值= [净):

  #如果我们已经达到了目标output_stride,那么我们就需要使用

  #Atrous卷积跨度= 1和乘以所述atrous率

  #当前单位对后续层中使用的步幅.

  如果output_stride不无和current_stride == output_stride:

  #只使用多graid率atrous盘旋在最后(块4)块

  如果块.范围== "块4":

  净=块.unit_fn(净,速率=率* multi_grid [I],**字典(单元,跨度= 1))

  其他:

  净=块.unit_fn(净,速率=率,**的dict(单元,跨度= 1))

  率* =部.获得( '步幅',1)

  training

  对网络进行训练,我们决定从使用 "从逆探测器语义轮廓" 帕斯卡VOC数据集的放大版本。

  从8252包括图像数据的训练。有5623训练集,验证集有2299。为了使用原来的VOC2012验证数据集来测试模型中,我们重点从验证图像558删除。558这张照片也出现在核查官VOC浓度。此外,我还添加了330张图片来自VOC的2012训练集,在5623他们既没有出现在训练集,它并没有出现在2299集中认证。最后,在10%的图像8252(约825图像)用于验证剩余训练图像保持。

  需要注意的是,这是原始的纸张是不一样的:实现有数据收集COCO没有预先训练。此外,本文介绍了一些训练和评估技术没有使用。

  结果

  模型可以在验证组PASCAL VOC得到良好的结果。

  像素准确率:约91%

  平均准确率:约82%

  和平均存款比率(米欧):约74%

  频率和跨比(FWIoU)右侧:约86%

  以下是验证图像分割PASCAL VOC收集的结果。

  

  

  结论是

  语义分割无疑是计算机视觉领域最热门的领域之一。Deeplab提供的传统编码器 - 解码器的一个替代架构。它促进多范围的背景下使用空心卷积学习特征。

  原文链接:https://开头中.freecodecamp.组织/潜水 - 进入 - 深卷积语义分割的网络和 - deeplab-v3-4f094fa387df

  本文几乎人类编译,转载请联系授权的公共无.。

  编辑:

本文由惠州欣惠网络整理发布,转载请注明出处:http://www.web1998.com/companynews/349.html

Copyright © 2013-2019 www.web1998.com 惠州网站建设 欣惠网络公司 版权所有 粤ICP备19023339号-1