自适应密度图adaptive density map generation for crowd counting 论文笔记

旧街凉风 提交于 2020-03-07 10:26:53

论文: http://visal.cs.cityu.edu.hk/static/pubs/conf/iccv19-dmapgen.pdf

代码:暂时没找到

ICCV

贡献:

这篇文章是深挖density map generation这一块的,以往density map一旦制作完,训练中是保持不变的,本文的切入点在于是否可以让density map中的generation的过程变得可以learning,从而随着模型地训练,去不断微调density map,使得产生更为合理的density map.

本文通过两种方式去动态调整density map,

(1)采用一个refine density map 的模块去在训练过程中微调density map

(2) 采用self-attention的model去从point annotation 自适应地产生density map

2.关于counting 任务地density map制作的小结

(1)geometry-adaptive

(2) fix-kernel

(3) geometry-adaptive 配合detection

以上三种方法制作density map本质上都是在每个人头点的位置加入一个2D的gaussian kernel,这是共同点,包括本文的自适应放那给发也是,不同的在于每个人头处采用的高斯核的尺寸不一样,现在大家比较共识的事大的人头需要采用size大的高斯核,小的人头采用size小的高斯核,但是标注只有1个点,我们无法确定每个人头的实际大小,所以用一些其他方式确定人头大小成了制作density map中的关键。以下图为例:红点为标注的位置

第(1)种是在MCNN中提出的,利用人头标注点之间的间距确定人头的大小尺寸,某个人头的尺寸用4个最近的人头点与该点的平均距离作为人头的尺寸,然后以此作为gassian kernel的尺寸,来制作density map,效果如下

可以看到远处的人头表示的比较合理,但是近处的大人头用人头点间距表示,就会用尺寸远大于人头的高斯核,在图中就因为值太小,而看不到

第(2)种方法则直接无视人头实际大小,统一用固定尺寸的高斯核,把counting变的更象是keypoint的回归问题,效果如下,可以每个人都用一样大小的高斯核表示了,这也是最近ICCV的一些SOTA的方法常用的,这样会让density map看着十分清晰。

第(3)种是对第一种的优化,远处的小人头仍旧用点与点之间的距离作为人头尺寸,但是近处的人头用detection的尺寸作为人头大小,如下所示

近处的人头比较容易detect 到,但是远处的人头太小,检测不到,所以远处只好用点与点之间的间距表示。

这种方法确定density map远处与(1)中的结果一致,但是近处的大人头也清晰可见,更为合理。

3、本文method

本文是觉得以上无论哪种方法,一开始制作好,就固定了,虽然(3)的解释看似合理,但是比较是手动确定的,势必不算是最优的结果,那么能不能让模型自己去决定怎样的density map最好呢?然后本文从微调已经生成的density map以及自适应地产生density map两条路径去探究这个问题。

(1)refine density map

这种方法是用一个refiner去对手动事先制作好的density map 去微调,renfiner本身如下所示,是一个全卷积的网络, 输入density map,输出refined的density map

然后counting 的模型counter预测的density map是去跟refined density计算counting 误差,而不是原始的density map,然后为了让refined density map不至于变得太离谱,本文加了一个约束,让refined density map和原始的density map不要差的太远,联合训练的loss如下

训练时预测的density map与refined density map计算上式中的counting loss部分,并回传优化counter,然后refined density map跟原始的density map计算一个L2的误差,加上counting loss作为refinement loss去优化refiner.

这里的counter 采用的是csrnet,mcnn等现成的模型。

(2)采用self-attention去自适应地产生density map

这里的做法是,根据点的标注图dot map,每个点用事先确定好的不同size 的高斯核去制作一组不同blur程度的density map,然后对于每张density map,用self attention module去预测一张对应的attention map,然后每张denstiy map乘上自己对应的attention map,最后用fusion moudle融合获得一张density map,其中self-attention和fusion两个模块都是可以learning的,counter预测的density map与最终产生的density map计算counting loss,然后计算最终的density map上的总人数与dot map上的总人数的误差作为约束density map generation 的loss,配合counting loss去优化attention 和fusion两个模块,这样的loss出发点也是为了产生更合理的denstiy map,却又不想变得太离谱。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!