Deep Watershed Transform for Instance Segmentation
cvpr17的一篇文章, 作者:Min Bai; Raquel Urtasun
https://arxiv.org/pdf/1611.08303.pdf
之前效果较好的 Instance segmentation主要是使用proposal的方式,比如FCIS或者Mask rcnn,本文提出了骨骼清奇的深度分水岭的方法。
1. Watershed Transform
首先来说一下传统的分水岭算法:
我们按照图片的灰度值的梯度可以绘制一个“地形图”, 然后将在各个局部极小值的地方开始灌水,为防止不同区域内的水相通,变建立“大坝”将其分各开,也就将图分割为独立的几个区域。如下图:
传统利用分水岭的方法容易由于噪声的原因产生过度分割的现象, 本文结合深度卷积网络,学习一个特征代替传统分水岭算法中的图形灰度图的梯度值。
也就是由下图中的a变为了b,其学习的目的就是每个instance 一个 basin的区域。
2. Deep Watershed Tranform
为了学习到上面所说的energy landscape, 文章将网络分为了两部分,首先学习‘ the directionof descent of the watershed energy’所用的网络称为 Direction Net,在此基础上学习最终的Energy。 训练时首先对两部分分别预训练然后进行end2end的finetune。网络结构如下:
第一个阶段学习的结果如下图第二列所示,最终的阶段如图中第三列所示:
2.1 Direction Network
具体的第一阶段output,为一个两通道的map,表示一个单位向量,表达式为:
其中Dgt p是某个像素的distance transform,即某点到其最近instance 边界的距离,如下图,即使相近的两个点(蓝,红)如果分属于不同的instance,其得到的 结果也有较大的差距,这使得网络可以把握住instance的边缘特征。
预训练的loss如下:
采用了cos的倒数,也就是主要看他们的角度
2.2 watershed transform network
这部分的ground truth是一个K=16的one-hot vector , loss采用交叉熵的形式,也就是转化为了一个分类的形式,第0类是背景或者可以记为背景的像素。
loss中将接近于边缘的类别权重增大,即
2.3 inference
看文章是将大的object选用level=2来分割,小的object采用level=1。
3. Experiments
没有在Pascal或者coco上做,试验做的也不是特别多,cvper 的要求像是变了的感觉。