[ECCV2018]点监督实现物体定位计数

2018年11月4日2030

arxiv.org/pdf/1807.0985

Where are the Blobs: Counting by Localization with Point Supervision

物体计数是一个计算机视觉的任务,可以应用于监控,车辆计数,日常物体计数上。现在这一类数数的数据集还挺多的,包括数人,数车,数企鹅(据说可以应用于动物保护)。

计数问题有两个难点,一个是物体的相互遮挡问题,另一个是在图片中物体特别密集特别小的时候,每个物体只有非常少的像素。

目前的基于回归的计数算法要优于直接物体检测后计数的方法,因为物体检测需要适应物体不同的大小、形状。检测算法的误差会导致计数更大的误差。

起初人们用一些聚类算法来解决这个问题。深度学习时代,用了一些比较暴力的做法,如“glance(浏览)”、“subitizing(感知)”,前者直接输入图,输出计数结果,后者输出一个物体分割图,需要像素级别的标注数据。这些方法目前还好于各种基于检测的方法。

基于密度图的做法,通常假设一个物体的大小(通过定义一个高斯核)来生成密度图,让网络拟合一个密度图。

本文设计了一个损失函数,让模型给出每个物体所在的区域块,最后对区域数进行计数,而且需要的监督信号是每个物体一个位置点,而非边界框。

损失函数叫做 localization-based counting loss (基于定位的计数损失函数),简称 LC。LC 有四项,前两项要求模型给出图的每个像素的语义标签,后两项要求模型学会分离有多个物体的区域,并且移除没有物体的区域。

其中 S 表示 ground truth (GT)给出的图,其中标注出的位置点为 c ( c 是该物体的类别),其它地方置为 0 。而 T 是网络的输出,每一个像素上是一个 softmax 向量,表示这个像素属于每一类物体的概率。

最后在输出的每个像素上取 argmax 来划分区域。

其中 C_e 是这张图的 GT 给出的,图中存在的物体类别集合, C_\neg e 表示不存在的物体类别集合。S_{t_c} c 是对 S 每个像素的 c 类别的概率取最大值。

也就是说,如果 GT 中有类别 c,就鼓励模型预测出 c,反之惩罚预测出 c。

这一项只对有标注的位置点进行计算。

第三项是根据标注计算一个物体的边界,要求模型把这些边界分为背景类,边界的确定是用分水岭算法,或者每个标注点找最近的点,在它们之间画一条线段。

第四项对所有不包含标注点的区域计算损失。

从效果图上可以看出各个 loss 的重要性。

目前这个方法的局限性就是仍然无法应付高密度相互遮挡的物体计数。

说点什么

提醒
avatar