目录
1.介绍
1.1 概念问题
- 目标检测
用一个bounding box对物体和其位置进行分类。
输出空间大小:N*(4+C)
C为类别标签数目。 - 语义分割
像素级别上的分类,即语义分割。
输出空间大小:H* W* C
H、W为图片像素大小,C为类别标签数目。 - 实例分割
不但要区分图片中不同的物体,还要给出不同个体像素的精确位置。
输出空间大小:没有明确的定义。
1.2 实例分割不好公式化
- 兼具物体实例级别的预测和像素级别的预测
- 物体可能存在图片中的各个位置
- 物体与物体之间存在着不可避免的遮挡
- 物体的姿态和大小存在着形变的过程
- 需要一个非常精细的边缘
– 与背景区分开
– 与物体区分开
1.3 实例分割应用场景
-
自动驾驶领域
-
智能机器人环境感知
-
PS、美图等一键抠图软件
-
电影打斗绿幕和直播背景切换
2.主要思想
实例分割有两种主流的方法,但是都不够直接,分别是以下两种方法:
- 自上而下(top-down)即先检测后分割(detect-then-segment):先预测bboxes,再实例掩码分割。这种方法太依赖于目标检测的准确率。
- 自下而上(bottom-up)即先嵌入学习后分组处理(Label-then-Cluster):通过推开属于不同实例的像素,拉近同一实例中的像素。这种方法依赖于每个像素的嵌入学习和分组处理。
问题出发点: 一张图片中,不同实例最基本的不同是什么?
答: 中心和大小
问: 能否用这两个关键信息区分实例?要怎样实现呢?
实现方式: 将实例中心位置 和 实例大小量化,根据实例中心位置和实例大小进行分类。
- 实例中心位置
将一张图片划分为S*S个网格,所以定义S2 个中心点位置类别。将这些类别加在通道上,对应的通道负责对应网格的实例掩码。 - 实例大小
用FPN来预测多种尺度大小的实例,将尺寸不同的实例放在不同级别的特征图中。(关于FPN,后面会详细叙述)
3.相关工作
3.1 Top-down Instance Segmentation
基于检测的方法
- FCIS:将RPN生成的ROIs和位置敏感分数图结合在一起预测实例掩模。
- MASK R-CNN:给Faster R-CNN添加一个包含bboxes的分支。
- PANet:在MASK R-CNN的基础上增强了特征表示来提高精度。
- Mask Scoring R-CNN:添加了mask——IoU分支去估计mask的质量并且通过打分提高精度。
- TensorMask:在给定的滑动窗口里分割。
缺点:太依赖于anchor
3.2 Bottom_up Instance Segmentation
基于语义分割的方法
- SGN:将实例分割问题分解为一系列子分组问题。
- SSAP:学习像素对的亲和力金字塔,即两个像素属于同一实例的概率,并通过级联图分区顺序生成实例。
缺点:精度不是很高,Two stagae的方法。
3.3 ‘Semi-direct’ Instance Segmentation
- AdaptIs:首先预测点提议,然后依次为位于被检测点提议处的对象。
- PolarMask:提出使用极性表示对掩码进行编码,并将逐像素掩码预测转换为距离回归。
缺点:虽然不需要bboxes,但是要么循序渐进,要么建立在折中的基础上。
4.SOLO总体网络结构
原文作者团队的方法将一张输入图片划分为了两个子任务分支,分别是Category Branch和Mask Branch,在这里先看总体结构,先不说FPN,下面再提及。
SOLO的头部架构,在每个FPN特征层上,加入两个子网络,一个用于实例类别预测,一个用于实例掩码分割。在Mask分支加入了x,y坐标和原始特征来编码空间信息。图中数字表示空间分辨率和通道数,图中以256个通道为例。“Align”表示双线性插值(文章最后面再解释双线性插值作用)。
4.1 Category Branch
- 输出空间: S×S×C
- 每个单元格必须属于一个单独的实例,因此只属于一个语义类别。
- 当网格(i,j)和center region有大于阈值的重叠的则认为是正例。center region定义为( cx, cy, ϵw, ϵh) 的区域,这里得的中心不是bounding boxes的中心,而是质心,其中 ϵ=0.2。每个实例都有一个二值mask,也就是在上分支中标记出正例所在的grid后,找到其下分支S2的通道对应的一个通道进行标注。
4.2 Instance Mask
- 实例掩码 和 语义类别同时进行(并行),每个网格生成对应的实例掩码
- 掩码总数: S2
- 在三维输出张量的第三通道上,实例掩码的输出将会有H×W×S2 维度(W和H为输入图片的长和高,S×S个类,所有像素级别的输出会有H×W×S2 维度)
- 预测实例掩码用的全卷积神经网络FCNs
1)具有空间不变性
2)具有鲁棒性
但是这里需要空间变体的模型(位置敏感),但是怎么解决该问题呢?
**解决办法:**引入CoordConv,说白了,就是加一个(x,y)像素坐标。
为什么不用其他方法? ----因为CoordConv简单、易实现。256通道变成258(D+2)
4.3 Forming Instance Segmentation
k = i×S + j,类别预测和相应的掩码会与参考网格单元联系在一起。最后形成每个网格的实例分割结果。最后通过非最抑制(non-maximum-suppression,NMS)获得最终的实例分割结果。(NMS放文章末尾)
4.4 网络架构
SOLO加入了卷积主干,采用FPN产生一个大小不同、固定信道数的特征图金字塔。这些图被用作预测头的输入:语义类别 和 实例掩码。
用多个体系结构实例化SOLO:
(1)用于特征提取的主干架构(backbone)
(2)用于计算实例分割结果的网络头(Network head)
(3)用于优化模型的训练损失函数(loss function)