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

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

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

4种语义分割数据集Cityscapes上SOTA方法总结相关推荐

  1. 无人驾驶常用数据集---图像语义分割数据集--Cityscapes数据集的解读(for 小白)

    ** 无人驾驶常用数据集–图像语义分割数据集–Cityscapes数据集的解读(for 小白) ** 一.什么是Cityscapes数据集? Cityscapes是关于城市街道场景的语义理解图片数据集 ...

  2. 超详细!手把手带你轻松用 MMSegmentation 跑语义分割数据集

    在带你轻松掌握 MMSegmentation 整体构建流程一文中,我们带大家认识了 MMSegmentation 的整体框架,分享了 MMSegmentation 中已经复现的主流语义分割模型. Op ...

  3. 遥感影像语义分割数据集

    遥感图像语义分割数据集 文章目录 遥感图像语义分割数据集 1.建筑 1.1 Aerial Image Segmentation Dataset 1.2 INRIA aerial image datas ...

  4. 自动驾驶深度多模态目标检测和语义分割:数据集、方法和挑战

    自动驾驶深度多模态目标检测和语义分割:数据集.方法和挑战 原文地址:https://arxiv.org/pdf/1902.07830.pdf Deep Multi-Modal Object Detec ...

  5. 语义分割——数据集选择

     语义分割:是指根据图像内容进行分类,分割出图像中的不同对象 语义分割数据集 数据集在人工智能中起着至关重要的作用,根据不同的应用领域,主要运用的数据集有: 1.Pascal VOC系列: The P ...

  6. labelme 语义分割数据集_labelme自定义语义分割数据集 Python文件调用labelme_json_to_da...

    labelme自定义语义分割数据集 Python文件调用labelme_json_to_da labelme自定义语义分割数据集 Python文件调用labelme_json_to_dataset 批 ...

  7. 图像分割数据集制作matlab,制作自己的图像语义分割数据集

    本文教你如何正确制作自己的图像语义分割数据集.假设我当前目录下有500张图片,命名从1.jpg开始,一直往上递增,我事先已经调整好了图像的大小. 首先下载Labelme工具:https://githu ...

  8. 无人机遥感图像语义分割数据集UAVid使用

    一.无人机遥感图像语义分割数据集UAVid UAVid数据集是用于针对城市场景的语义分割任务的UAV视频数据集.它具有几个特点: 语义分割 4K分辨率无人机视频 8种物体类别 街景环境 示例图像: 下 ...

  9. 快速制作自己的VOC语义分割数据集

    语义分割数据集制作与转换方法 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 基于PS的语义分割标注 第二章 构建VOC语义分割数据集 文章目录 语义分割数据集制作与转换方法 ...

最新文章

  1. 原来AGILE就是这么一回事啊!
  2. Qt 自定义信号与槽
  3. android绘制心形_Android自定义View系列(一)——打造一个爱心进度条
  4. selenium 定制启动 chrome 的选项
  5. AWS云使用100条宝贵经验分享
  6. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装
  7. sun game server (sgs)初探
  8. 三分钟掌握PHP操作数据库
  9. 前端学习(1272):Vue前端路由
  10. hive常见的建表方式有哪些?各自的使用场景是?
  11. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_19-页面静态化-模板管理-模板存储...
  12. 数论基础 欧几里得
  13. rs232读取智能电表_深度了解智能电度表,面板内容大揭秘!
  14. iexplore应用程序错误
  15. python search函数_python 正则表达式 (search与match函数)
  16. Java中Object类的几个常用方法
  17. 每日一句_《鹧鸪天·西都作》
  18. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
  19. Qt运行过程中错误未找到信号的符号undefined symbol: _ZN11FileManager12sigTechFilesE4QMapIi7QSt
  20. win7系统下如何关闭UAC,去掉软件图标上的盾牌

热门文章

  1. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
  2. 线性最小二乘法的通俗理解
  3. CAN笔记(16) CANOpen简介
  4. 学习c语言的困难,刚刚学习C语言,遇到困难了......
  5. binwalk 提取bootimg_boot.img格式文件结构解析
  6. adb命令安装apk到手机_安装在手机上自动化测试apk-傻猴
  7. python 折线图 尾部_Matplotlib 折线图plot()所有用法详解
  8. 计算机的系统组成说课教案,计算机系统组成说课稿.doc
  9. html 最小长度单位,html见长度单位尺寸单�?CSS布局HTML
  10. Luogu P1407 [国家集训队]稳定婚姻 (二分图写法)