摘要:当前语义分割方法面临3个挑战。

1 Cityscapes数据集介绍

Cityscapes评测数据集即城市景观数据集,在2015年由奔驰公司推动发布,是目前公认的机器视觉领域内最具权威性和专业性的图像分割数据集之一。Cityscapes拥有5000张精细标注的在城市环境中驾驶场景的图像(2975train,500 val,1525test)。它具有19个类别的密集像素标注(97%coverage),其中8个具有实例级分割。具体类别名称见于下表1。

表1 Cityscapes数据集中的类别名称

2 Deep High-Resolution Representation Learning for Visual Recognition(HRNet)

2.1动机

当前语义分割方法面临3个挑战,其中第一个挑战是基于FCN的分辨率由高到低会损失信息。

语义分割方法需要高分辨率特征,图中1展示了几种基于FCN的经典方法的,它们的共同点通过一个网络得到 低分辨 feature map,然后通过上采样或反卷积恢复到高分辨率。

图1 基于FCN方法的几种经典结构

这些看起来不同,但本质核心思路是差不多的。这些方法存在一个缺点,分辨率由高到低会损失信息!

2.2 模型结构与核心代码

为了解决2.1中的问题,作者团队(MSRA和中科院)提出一个方法,核心思路是“不恢复高分辨率,而是保持分辨率”。如下图2中是一个基本的高分辨率保持网络结构,该结构把不同分辨率的feature map并联,相同分辨率的占一条分支,不同分辨率的占不同分支。并在不同分支之间添加通路(图中的斜线),形成high-resolution network。

图2 基本的high-resolution network结构

图2中的机构由4个stage组成,每一个蓝底色块为一个stage。在SOTA方法中,采用的是HRNet-W48,其结构图如图3所示。

图3 HRNet-W48结构图

HRNet V2-W48是在4个stage(图3中蓝、绿、红、黄4种底色区域)的头部加上stem net(图3中白色底色区域),尾部加上segment head后(图中未画出)组成。下面按照先后顺序依次对stem net、4个stage以及segment head进行介绍。

(1)stem net

stem net由两个Bottelneck组成,与Resnet的结构一样,经过两个Bottelneck以后,输入图像的维度由H*W*3变成了(H/4)*(W/4)*256

(2)4个stage

  • 每个 stage 上的各个组件配置如下表2,以 hrnet_48 为例
  • stage之间通过transition_layer连接,stage内由重复的基本单元HighResolutionModule组成。
  • HighResolutionModule由分支以及分支末尾的fuse_layers组成。
  • 每条分支内由重复的basicblock组成,具体数量见表2

表2 HRNet-W48模型配置表

A:stage间的transition layer:完成 stage之间通道转换和尺寸下采样,即图3中不同底色之间连接的直线和斜线stage之间的斜线,指向不做任何处理。

图4 stage间的transition layer构建代码

B:构建stage

每个stag均是有若干重复的HighResolutionModule组成,因此构架stage的核心在与构建HighResolutionModule。构建HighResolutionModule分两步:构建分支、构建分支末尾的fuse_layers。

构建分支:图3种的4个连续的basicblock即一个分支。

图5 HighResolutionModule内分支构建代码

构建fuselayer:

以下图中蓝色框为例说明fuselayer层的处理过程:

图6 fuselayer层

图6 HighResolutionModule内fuselayer层构建代码

3 Object-Contextual Representations for Semantic Segmentation(OCR)

3.1 动机

当前语义分割方法面临3个挑战中第二个挑战是没有解决好物体上下文信息。

上下文特征:图像中的每一个像素点不可能是孤立的,一个像素一定和周围像素是有一定的关系的,大量像素的互相联系才产生了图像中的各种物体,所以上下文特征就指像素以及周边像素的某种联系。具体到图像语义分割,就是在判断某一个位置上的像素属于哪种类别的时候,不仅考察到该像素的灰度值,还充分考虑和它临近的像素。

当前方法分析上下文信息如下图7所示,比如说红色点是我们关注的点,周围绿色几个点是采样出来的,可以看到,绿色点分为两部分,一部分是属于车的,还有一部分是属于背景的。当前方法并没有进行区分。

图7 上下文信息图

那我们该怎么办?我们找这个物体,要通过周围物体的象素表征来帮助。因此,我们需要把红色像素周围属于 object 的pixel取出来做为上下文,如下图8所示:

图8 对象区域上下文信息图

3.2 模型结构与核心代码

核心思路:OCR提出了一种新的关系上下文方法,该方法根据粗分割结果学习像素与对象区域特征之间的关系来增强像素特征的描述。模型结构如下图所示。

图9 OCR模型结构图

计算步骤:

  • STEP1:获得粗分割结果。

从backbone最后输出的FM,在接上一组conv的操作,然后计算cross-entropy loss。

  • STEP2:获得对象区域特征。

结合图9中可知,该步骤需要两个分支的tensor进行矩阵乘:

Tensor1:pixel representation,骨干网络最后一层FM,维度为b×c×h×w->b×c×hw

Tensor2:soft object region,FM经过softmax后的结果,维度为b×k×h×w->b×k×hw

将Tensor1和tensor2相乘后的输出结果为b×k×c,b×k×c便是图9中对象区域特征的表示。

图10 对象区域特征计算代码

  • STEP3:获得pixel-region relation。

结合图9中可知,该步骤需要两个分支的tensor进行矩阵乘:

Tensor1:pixel representation,骨干网络最后一层FM,维度为b×c×h×w->b×c×hw

Tensor2:STEP2中的对象区域特征,维度为b×k×c

代码中将两个tensor的维度进行了转化,转化两个tensor的维度分别为b×key×hw和b×key×k。两个tensor相乘后得到pixel-region relation的表达式为b×k×h×w。

  • STEP4:计算最终对象特征上下文表示。

结合图9中可知,该步骤需要两个分支的tensor进行矩阵乘:

Tensor1:STEP3中获得的pixel-region relation,维度为b×k×h×w

Tensor2:STEP2中的对象区域特征,维度为b×k×c

两个特征相乘后便得到对象上下文特征,即图10中的红色块。

图11 step2-step4中相关代码

4 SegFix: Model-Agnostic Boundary Refinement for Segmentation(SegFix)

4.1SegFix的动机

基于FCN的方法面临的第三个挑战是边缘分割不准确。下图12显示了分割结果的误差图。下图12中的第一列显示了分割GT图,第二列/第三/ 第四列分别显示了DeepLabv3 / HRNet / Gated-SCNN的误差图。 这些示例是从Cityscapes val set中裁剪的。 我们可以看到,对于这三种方法,在细边界上都存在许多错误。

图12 模型分割结果误差图

基于经验观察的结果,即内部像素的标签预测更加可靠,因此用内部像素的预测代替边界像素的最初不可靠的预测,可能提高模型对边缘的分割效果。提出了一种新颖的模型无关的后处理机制,通过将边界像素的标签替换为对应内部像素的标签来减少分割结果,从而减少了边界误差。

4.2模型结构与核心代码

根据4.1中的描述,理所当然的会牵引出两个问题:(1)如何确定边缘(2)如何关联边缘像素与内部像素。这里借助于一个边缘预测分支和一个方向预测分支来完成。在获得良好的边界和方向预测之后,就可以直接拿来优化现有方法预测的分割图了。所以另一问题在于,如何将现有的针对边缘的关联方向的预测应用到实际的预测优化上。这主要借助于一个坐标偏移分支。这三个分支构成了SegFix的主要结构,其结构图如图13所示。

图13 SegFix模型结构图

边缘预测分支:

方向预测分支:

获取真值:

坐标偏移分支:

5 Hierarchical Multi-Scale Attention for Semantic Segmentation

5.1动机

大尺度物体在较小分辨率的特征图上会分割的更好,而小尺度物体则需要精细的细节去推理分割结果,所以在较高分辨率的特征图上进行预测结果会更好。且论文也举例分析了此情况的缘由,如下图所示。

图12 不同尺寸物体在不同分辨率上的分割表现

因此本文采用注意力机制的方法让网络去学习如何最好地组合多个尺度的推理预测。非常直观的做法就是输入不同分辨率的图片,让网络学习一下,什么样的物体应该用什么样的分辨率。

5.2模型结构

图13 分层多尺度注意力机制

训练阶段:

本文提出的attention机制与之前的某个方法类似(Attention to scale: Scale-aware semantic image segmentation,图13中左侧方法),对于每个尺度学习一个密集的mask,然后不同尺度的预测再结合起来,这些多尺度预测通过在mask之间进行像素相乘,然后在不同尺度之间进行像素求和,从而得到最终结果。

在本文的分层方法中,学习相邻尺度之间的相对attention掩码,而不是学习每个固定尺度集的所有attention掩码。在训练网络时,只训练相邻尺度对。如上图13所示,给出一组来自lower scale的特征图,预测一个两个图像尺度之间的密集的相关attention。在实验中,为了得到scaled图像对,使用一个输入图像然后将其下采样两倍利用scale尺度2,这样,就有一个1x的输入和一个0.5x的缩放输入,当然其他scale-down尺度也可以选择。需要注意的是,网络输入本身是原始训练图像的重新缩放版本,因为我们在训练时使用图像缩放增强。这使得网络学会预测一个范围内的图像尺度的相对注意力。

在训练过程中,给定的输入图像按因子r进行缩放,其中r= 0.5表示向下采样按因子2进行,r= 2.0表示向上采样按因子2进行,r= 1表示不进行操作。对于训练过程,选择r= 0.5和r= 1.0。因此,对于两种尺度的训练和推断,以U为双线性上采样操作,将∗和+分别作为像素级的乘法和加法,方程可以形式化为:

上式中注意力权重α的计算步骤:

1)获得OCR模块输出的augmentations,即图9中的正蓝色块。

2)见过若干次连续的conv-bn-relu后,获得维度为b×1的向量

3)对b×1的向量进行sogmoid后,便获得一个batch上的注意力权重α。

推理阶段:

在推理阶段,分层的应用学到的注意力来结合N个不同的scale预测。关于各尺度的组合优先考虑较低的scale,然后逐步上升到较高的scale,因为,它们具有更多的全局上下文信息,对于需要改进的scale可以使用更高scale的预测。

多尺度推理时,各尺度组合先后顺序:{2.0,1.5,1.0,0.5}

6 论文链接

1.HRNet:https://arxiv.org/abs/1908.07919

2.OCR:https://arxiv.org/abs/1909.11065

3.SegFix:https://arxiv.org/abs/2007.04269

4.Hierarchical Multi-Scale Attention:https://arxiv.org/abs/2005.10821

本文分享自华为云社区《语义分割数据集Cityscapes上SOTA方法总结》,原文作者:fdafad。

点击关注,第一时间了解华为云新鲜技术~

4种语义分割数据集Cityscapes上SOTA方法总结的更多相关文章

  1. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  2. [论文笔记][半监督语义分割]Universal Semi-Supervised Semantic Segmentation

    论文原文原文地址 Motivations 传统的训练方式需要针对不同 domain 的数据分别设计模型,十分繁琐(deploy costs) 语义分割数据集标注十分昂贵,费时费力 Contributi ...

  3. 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...

  4. 自动网络搜索(NAS)在语义分割上的应用(一)

    [摘要]本文简单介绍了NAS的发展现况和在语义分割中的应用,并且详细解读了两篇流行的work:DARTS和Auto-DeepLab. 自动网络搜索 多数神经网络结构都是基于一些成熟的backbone, ...

  5. 比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab

    简介 语义分割:给图像的每个像素点标注类别.通常认为这个类别与邻近像素类别有关,同时也和这个像素点归属的整体类别有关.利用图像分类的网络结构,可以利用不同层次的特征向量来满足判定需求.现有算法的主要区 ...

  6. 自动网络搜索(NAS)在语义分割上的应用(二)

    前言: 本文将介绍如何基于ProxylessNAS搜索semantic segmentation模型,最终搜索得到的模型结构可在CPU上达到36 fps的测试结果,展示自动网络搜索(NAS)在语义分割 ...

  7. PyTorch中的MIT ADE20K数据集的语义分割

    PyTorch中的MIT ADE20K数据集的语义分割 代码地址:https://github.com/CSAILVision/semantic-segmentation-pytorch Semant ...

  8. Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图

    Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图 分类: OpenCV图像处理2013-02-21 21:35 6459人阅读 评论(8) 收藏 举报   原文链接  ht ...

  9. 多篇开源CVPR 2020 语义分割论文

    多篇开源CVPR 2020 语义分割论文 前言 1. DynamicRouting:针对语义分割的动态路径选择网络 Learning Dynamic Routing for Semantic Segm ...

  10. 【Semantic segmentation Overview】一文概览主要语义分割网络(转)

    文章来源:https://www.tinymind.cn/articles/410 本文来自 CSDN 网站,译者蓝三金 图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类 ...

随机推荐

  1. 【对象存储】Minio本地运行和 golang客户端基本操作

    运行环境 OS和Golang版本: go version go1.21.0 darwin/arm64 安装 源码安装 下载最新版本的源码,地址https://github.com/minio/mini ...

  2. Mach-O Inside: BSS Section

    1 BSS 起源 BSS(Block Started by Symbol)这个词最初是 UA-SAP 汇编器(United Aircraft Symbolic Assembly Program)中的一 ...

  3. 一个基于Vue模型的表单生成器

    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者.实践者.分享者! Vuetify Form Base是一个基于模型的表单生成器,目的是提供一个工具,以便以较少的努力从任何模型数据生成可编辑的表单, ...

  4. MySQL索引、事务与存储引擎

    MySQL索引.事务与存储引擎 索引介绍 1.索引的概念 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址). 使用 ...

  5. 一起来探索CSS中margin属性的奥秘吧!!

    作者:WangMin 格言:努力做好自己喜欢的每一件事 众所周知 margin属性 是用来声明当前所设置或者指定元素所有外边距的宽度,或者设置各边上外边距的宽度.一直以来我认为它是一个很简单的属性,但 ...

  6. CSS 浮动和清除浮动方法总结

    作者:WangMin 格言:努力做好自己喜欢的每一件事 什么是浮动 float? 标准流:盒子会各占整行位置.子盒子若是标准流,父盒子虽然没有高度,但是会撑开父盒子高度. 浮动:盒子浮了起来,不会占据 ...

  7. JPA中@ElementCollection使用

    转载请注明出处: 在JPA中,@ElementCollection注解主要用于映射集合属性,例如List.Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射.这个注解可以 ...

  8. 彻底掌握Python中 * 号

    Python中的 *号是一个特殊的符号,在其他编程语言中,它最广为人知的用途就是作为乘法运算的符号.而在Python中,它的用途远不止如此. 本文总结了Python中*号的所有用途,以供参考. 1. ...

  9. 题解 P9326

    前言 数学符号约定 \(n\):任意正整数. \(\#\):从未出现过的小写字母. \(\Sigma\):字符集,这里指小写字母集合. \(S\):最终答案的字符矩阵. 其余符号同题目翻译中所写. 如 ...

  10. linux锁定脚本防止脚本重复运行

    问题描述:设置在定时任务中的脚本一定要注意防止脚本重复执行,要不然会带来一些想象不到的结果. 方式一:使用锁定文件的方式来进行防止脚本重复运行,类似数据库socket文件,但是这种情况有一种弊端就是, ...