Press "Enter" to skip to content

简介 – Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth(实例语意分割)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

CVPR 2019 paper

 

Paper link: https://arxiv.org/abs/1906.11109

 

Github(2019. Jul. 27 还没释出,请关注此网址): https://github.com/davyneven/SpatialEmbeddings

 

简介

 

此论文针对实例语意分割(Instance Segmentation)的任务进行研究,

 

现存的 Instance Segmentation 若要有不错的準确度都是使用 Proposal-based(Object detection 的概念) 的方法,

 

就是透过 Region proposal 先框出物体,

 

而这方法往往速度慢以及能处理的图片解析度无法很高,

 

不适合运用在自动驾驶的情况下 – Real time,

 

此论文提出 Proposal-free 来改良上述问题,

 

虽然此框架準确度仍然无法达到 Proposal-based 方法的水平,

 

但提供了一个不错的思路来解决速度以及高解析度的问题,

 

其概念为同个物体所预测的中心点越靠近越好,

 

当预测出的中心点(Spatial embedding)的越準确,

 

我们就能很轻易的提取出各个物件。

 

 

此方法评估在 Cityscapes 的资料集,

 

不仅速度提升、準确度还略高于 Mask-RCNN。

 

 

概念

 

Instance segmentation 首先要找到物体的中心点 C,

 

然后要找出目前该 Pixel 是对应到哪个中心点,

 

而通常一个照片会有多个物体 S = {S_0…S_K},代表着会有 K 个中心点 – C。

 

最简单的做法是将该物体的所有座标平均当作中心点。

 

 

那我们模型要做的事情是学习目前这个点和中心点 C 的差距(Offset)为多少,

 

 

训练方式就是透过 Regression 的方式。

 

 

而我们可以把式子改一下,

 

目前的座标加上预测出的 Offset = e(Spatial embedding),

 

ei,j 预测自身物体的中心点座标。

 

 

因此我们整理一下上方的概念,

 

如果要处理好 Instance segmentation 的任务,

 

有两件事很关键

要得到好的中心点 C = {C_0, C_1, …, C_k}
每个 Pixel 预测出的 Offset 要靠近中心点。

针对第一个点,

 

之前的方式都是使用 Density-based clustering 的方式来提取出中心点 C = {C_0, C_1, …, C_k}。

 

而针对第二点以往的训练方式是採用 Regression-based,

 

让预测出来的 e(Spatial embedding) 越靠近中心点越好。

 

 

方法

 

 

主要架构为两部分

Seed branch (在 Inference 的时候找出中心点)
Instance branch (学习该 Pixel 的中心点在哪)

会先从 Instance branch 开始作介绍!!

 

在概念的部分有讲到要针对中心点的学习,

 

此论文放宽限制让他採用 Hinge loss 的方式,

 

如果他中心点已经学得够好的话,就不会给 Loss。

 

举例来说可能我们会觉得预测中心点的座标在 +- 2 之间都已经算学得很好了,

 

这时候我们的 Margin – δ 就会设定在 2。

 

 

那在 Inference 的时候,

 

我们预期提取出的中心点 C 是準的,

 

Clustering 时就可以用比较简单的方式,

 

各个 Pixel 所预测出的 e(预测的中心点)相近的视为是同一个物体。

 

 

但这边有个缺点,这个 Margin 要怎幺设定??

 

如果给太小的话,我们虽然确保小物体之间可以被正确的分出,

 

但是他会损害大物体的準确率,

 

因为我们会认为大物体的 Margin 可以给大一点设定的较为宽鬆。

 

基于上面的想法,

 

作者认为我们模型应该去学习各个物体的要给什幺 Margin,

 

如果物体大 Margin 可以给大一点,

 

但是物体小的时候就要给小一点,

 

透过 Margin 的概念,

 

我们的预测的 e 可以不用準确的预测到中心的位置。

 

 

当输出的分数高的时候,

 

代表靠中心点越近也代表我们所学出来的 e 是可信的。

 

得到 Sigma 的方式则是模型预测的,

 

 

那 Margin 的概念可以使用 Guassion 的方式去定义,

 

定义 Margin 为:

 

 

Elliptical Margin

 

只是说使用一个值当作 Sigma,

 

它只会产生出圆形的 Margin,

 

不如分别预测出 x, y 的 Sigma,

 

让他可以产生出椭圆形的 Margin

 

 

Learnable Center of Attraction

 

比起使用中心点 C 去做训练,

 

使用预测出来的点 e 当作 C 去做训练反而效果更好,

 

摁。。。这部分想看程式码,但目前还没有。

 

 

来先看看 Ablation study 的成效

 

 

Seed map

 

在 Inference 的时候我们会希望知道每个物件的中心点,

 

而这边我们可以依赖 eq5 所预测出的分数,

 

当这个分数高的时候,我们会知道这个 Pixel 所预测出的 Embedding – 中心点是準的,

 

训练方式就是使用 Regression 的方式,

 

 

那基本上就是从这些分数高的随便挑一个的 Embedding 当作中心点。

 

Post-processing

 

透过上面 Seed map 的部分,

 

我们知道可以从分数高的 Embedding 当作中心点,

 

在 Inference 的时候,

 

要将各个 Pixel 归类到各个物体,

 

而判断的标準就是那个 Pixel 的机率 > 0.5 为同一个物体,反之为背景。

 

 

而为了确保每个 Pixel 的 Sigma 都差不多,

 

给出 Smooth loss function 来限制这个值。

 

 

整体训练细节

 

这部分好多,有兴趣的去看论文,我提几个就好。

 

话说我没看到整体的 Total loss,

 

ERFNet 当作 Base-network,

 

在模型的 Instance branch 中会预测出 Sigma(1 或 2 个值-(x, y)) + 座标(x, y) 代表依据设定不同会预测出 3 或 4个值。

 

Loss function 为 Lovasz-hinge loss 而非以往的 Cross-entropy loss,

 

好处是他是考量每个物件的 iou 去做训练。((这部分我没去认真看,有兴趣的自己去看那篇论文。

 

对于 Sigma 以及 Offset 并不是用 Supervised 的方式去做训练,而是藉由最大化 iou 来 Joint 的训练这两个参数。

 

成果

 

 

 

 

参考资料:

 

Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注