Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth【论文解读】

代码地址:SpatialEmbeddings
论文地址:Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth

摘要(Abstract)

本文实现了在高准确度下的实时实例分割
批判

  1. Proposal-based的方法具有高准确度但速度慢,在固定和低分辨率(Mask R-CNN的14×14)下生成mask。
  2. Proposal-free的方法速度快但精度低.

创新点

  1. 提出了一种新的聚类损失函数,用于无 proposal 实例分割。该损失函数拉进属于同一实例的空间嵌入像素。
  2. 共同学习实例特定的聚类带宽,最大化生成实例 mask 的 IoU。

逻辑链路

首先给大家介绍几张自己画的丑图:

x i x_i xi C k C_k Ck o ^ i \hat{o}_i o^i

x i x_i xi表示的是每个像素的对应坐标位置,那么要如何区分实例呢?其实很简单就是对应相同时里,获取同样的值,这个值很显然可以是实例中心坐标 C k C_k Ck,那么其实就是对于每个实例的像素点学习一个距离中心的偏移量,也就得到了 o ^ i \hat{o}_i o^i
先前的方法通过回归方法直接学习 o i o_i oi L r e g r = ∑ i n ∥ o i − o ^ i ∥ \mathcal{L}_{regr} = \sum_{i}^{n} \parallel o_i -\hat{o}_i\parallel Lregr=inoio^i。然而这在inference的时候会有两个问题。一个是必须先确定实例中心点,二是对于每个像素需要知道属于哪个实例。之前的方法一般是通过基于密度的聚类方法获得实例的中心点,然后按照距离中心最小原则来分配像素。由于此后处理步骤没有集成在损失函数中,因此无法对网络进行端到端的优化,从而导致效果不佳。
对于以上问题,其实 C k C_k Ck已经得到了解决方案,就是每个实例用相同的中心点位置信息来表示.那么预测的目标 o i o_i oi就通过嵌入位置信息 x i x_i xi得到了空间嵌入 e i = x i + o i e_i = x_i + o_i ei=xi+oi.作者采用铰链loss迫使同实例像素去贴近中心点的值的某个固定邻域 δ \delta δ内,为什么要这样设置呢?因为所有像素值只要贴近中心点都是可以被接受的,比如图二中的(3,5),选择周围的(3,6),(3,4),(2,5),(4,5)都是可以被接受的,不必要限制中心到像素级.因此,铰链损失(hinge loss)如下:
L h i n g e = ∑ k = 1 K ∑ e i ∈ S k max ⁡ ( ∥ e i − C k ∥ − δ , 0 ) \mathcal{L}_{hinge} = \sum_{k=1}^K\sum_{e_i\in S_k}\max(\Vert {e_i - C_k}\Vert -\delta, 0) Lhinge=k=1KeiSkmax(eiCkδ,0)
但是,由于 δ \delta δ使用同一的值,因此只能取决于最小的实例中心,这对大物体十分不太友好,因为大物体会产生大量偏离中心邻域的像素点,从而导致loss增大.最直观的想法就是对于每个实例产生一个特定的 δ \delta δ值.既然一是需要满足 δ \delta δ随着实例越大而越大,而是需要越偏离中心越loss越大. 那么很直观的想法就是生成一个以实例中心为原点的高斯概率图,概率值越高表示像素越靠近中心.
ϕ k = exp ⁡ ( − ∥ e i − C k ∥ 2 2 σ k 2 ) \phi_k=\exp\left(-\frac{\Vert e_i-C_k\Vert ^2}{2\sigma_k^2}\right) ϕk=exp(2σk2eiCk2)
假设认为概率 ϕ k ( e i ) > 0.5 \phi_k(e_i)>0.5 ϕk(ei)>0.5时, x i x_i xi位置的像素将会被分配给实例 k k k.那么就可以计算出每个实例的margin:
m a r g i n = − 2 σ k 2 ln ⁡ 0.5 margin=\sqrt{-2\sigma^2_k\ln 0.5} margin=2σk2ln0.5
此时sigma( σ \sigma σ)值越大,这个margin也就越大.这也要求网络对于每个实例学习一个适合的sigma值,很自然的,根据实例像素的数量可以大概推测sigma值的大小,因此,此处定义
σ k = 1 ∣ S k ∣ ∑ σ i ∈ S k σ i \sigma_k = \frac{1}{\vert S_k\vert}\sum_{\sigma_i\in S_k}\sigma_i σk=Sk1σiSkσi
作者选择使用Lovasz-hinge损失来优化实例图和GT。由于这个损失函数是Jaccard损失的(片状线性)凸代替,它直接优化了每个实例的IoU。因此不需要考虑前景和背景之间的类不平衡。
值得注意的是,作者并不直接监督偏移量 o i o_i oi σ \sigma σ,而通过Lovasz-hinge loss和高斯函数的梯度后向传播最大化实例的IoU来优化.
为了进一步优化网络,作者还提出了椭圆margin,就是对x,y方向维度预测不同的 σ \sigma σ值,使得高斯函数呈现椭圆状:
ϕ k ( e i ) = exp ⁡ ( − ∥ e i x − C k x ∥ 2 σ k x 2 − ∥ e i y − C k y ∥ 2 σ k y 2 ) \phi_k(e_i)=\exp\left(-\frac{\Vert e_{ix}-C_{kx}\Vert}{2\sigma_{kx}^2}-\frac{\Vert e_{iy}-C_{ky}\Vert}{2\sigma_{ky}^2}\right) ϕk(ei)=exp(2σkx2eixCkx2σky2eiyCky)
此外还有就是让网络自己学习实例的中心,而不是先验的像素坐标中心.
ϕ k = exp ⁡ ( − ∥ e i − 1 ∣ S k ∣ ∑ e i ∈ S k e i ∥ 2 σ k 2 ) \phi_k=\exp\left(-\frac{\Vert e_i-\frac{1}{\vert S_k\vert}\sum_{e_i\in S_k}e_i\Vert}{2\sigma_k^2}\right) ϕk=exp(2σk2eiSk1eiSkei)
最后一点,在inference时,需要围绕每个实例中心进行聚类。因此需要一个种子图来确定实例中心,那我们可以直接选择 ϕ k \phi_k ϕk的最高值作为实例的中心点.所以,用回归损失函数来训练种子图。背景像素回归到零,前景像素回归到高斯的输出。作者为每个语义类训练一个种子图:
L s e e d = 1 N ∑ i N 1 { s i ∈ S k } ∥ s i − ϕ k ( e i ) ∥ 2 + 1 { s i ∈ b g } ∥ s i − 0 ∥ 2 \mathcal{L}_{seed} = \frac{1}{N}\sum_i^N\mathbb{1}_{\{s_i\in S_k\}}\Vert s_i - \phi _k (e_i)\Vert ^2 + \mathbb{1}_{\{s_i\in bg\}}\Vert s_i - 0\Vert ^2 Lseed=N1iN1{siSk}siϕk(ei)2+1{sibg}si02
具体而言,在推理过程中,对种子值最高的嵌入物进行采样,并将该位置作为实例中心 C k ^ \hat{C_k} Ck^ 。在同一位置,还取了sigma值, σ ^ k \hat{\sigma}_k σ^k 。通过使用这个中心和伴随的sigma值,将像素嵌入聚类到实例中:
e i ∈ S k ⇔ exp ⁡ ( − ∥ e i − C k ∥ 2 2 σ ^ k 2 ) > 0.5 e_i \in S_k \Leftrightarrow \exp \left(-\frac{\Vert e_i-C_k\Vert ^2}{2\hat{\sigma}_k^2} \right) > 0.5 eiSkexp(2σ^k2eiCk2)>0.5
接下来,mask out 种子图中的所有聚类像素,并继续采样,直到所有的种子都被mask。最后对所有类重复这个过程。
为了确保在采样期间 σ ^ k ≈ σ k = 1 ∣ S k ∣ ∑ σ i ∈ S k σ i \hat{\sigma}_k\approx\sigma_k = \frac{1}{\vert S_k\vert}\sum_{\sigma_i\in S_k}\sigma_i σ^kσk=Sk1σiSkσi,作者添加了一个平滑项:
L s m o o t h = 1 ∣ S k ∣ ∑ σ i ∈ S k ∥ σ i − σ k ∥ 2 \mathcal{L}_{smooth} = \frac{1}{\vert S_k\vert}\sum_{\sigma_i\in S_k}\Vert\sigma_i-\sigma_k\Vert ^2 Lsmooth=Sk1σiSkσiσk2

网络

总结一下,整体的框架如上图所示,其实是一个很简单的语义分割 Encoder-Decoder 结构。输入为一张 3 × H × W 3\times H\times W 3×H×W图像,输出包含三个部分的, a )   σ a)\ \sigma a) σ图( 1 × H × W 1\times H\times W 1×H×W b ) b) b) 像素偏移向量( 2 × H × W 2\times H\times W 2×H×W c ) c) c) 类别特定的种子图 ( C × H × W C\times H\times W C×H×W
网络的核心是为了学习像素的偏移,即 o i o_i oi,这个偏移量是通过最大化IoU得Lovasz-hinge来优化的.但在inference过程中仍无法确定实例中心,因此网络通过每一类学习一个种子图,来确定中心点和 σ \sigma σ值, 为了平滑 σ \sigma σ值和实例大小的关系,网络预测 σ \sigma σ图.最后在inference的时候,结合种子图和sigma图的值得到高斯分布配合像素嵌入得到实例分割结果.

具体的细节可以参考原文,持续更新中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值