最近在看人群密度估计方面的东西,把博客看到的一些方法简单总结一下,后续继续添加。
1.论文《CrowdNet: A Deep Convolutional Network for DenseCrowd Counting》2015CVPR
论文采用了两个网络(3x3和5x5)的融合,可以理解为不同的网络提取的特征不同,上面 Max Pool 对边缘特征(细节)提取较好,下面的 Shallow Net 采用 Avrg Pool 对于整体特征描述较好,两个网络通过一个 concat 进行连接,然后1*1的conv进行降维。
实验结果表明多个网络进行融合的方法要比单一的网络融合效果要好。
网络架构为:
论文地址:
github地址:
2.论文《Single-Image CrowdCounting via Multi-Column Convolutional Neural Network》2016CVPR
论文也采用的是多个网络架构融合的思想,分成(5x5,7x7,9x9)三种网络结构,最后再融合三个网络的特征图,论文在各个数据集上都取得了state-of-the-art的效果。
多列架构的原因是:三列对应于不同大小的感受野(大,中,小),使每个列卷积神经网络的功能对由于透视或不同的图像分辨率造成的人/头大小变化是自适应的(因此,整体网络是强大的)。
网络架构为:
论文地址:
github地址(非官方):
简单梳理一下论文中2. Multi-column CNN for Crowd Counting关于生成密度图时采用脉冲函数卷积高斯核的方式来定义密度图。假设标注点的位置为xi,那么具有N个头的标签可以被表示为:
这里把它与高斯函数做卷积变成一个连续的函数。但是这种密度函数假设每个xi在图像空间中是独立的。然而事实上,每个xi是在3D场景中一个人群密度的样本,并且由于透视失真,不同样本xi相关的像素与场景中区域的不同尺度一致。于是为了精确估计群体密度,需要考虑透视变换。如果假设在一个人头区域的周围,人群的密度是均匀的,它的最近邻给出了一个对于几何形变的合理的估计。 为了使得密度图能够更好地与不同视角(不同人头大小)且人群很密的图像对应起来,作者对传统的基于高斯核的密度图做了改进,提出了基于几何适应高斯核的密度图,由下式表示:
(通俗理解就是:密度图是由delta脉冲函数与一个高斯函数卷积得来,这里先卷积再求和。)
注:其实delta函数是一个简单的脉冲函数,在范围内积分求和值为1,N个人头再求和即得N个人头的标签;
对于每一个人头的xi点,给出了k个近邻距离的的平均值di,于是,与xi相关的像素对应于场景中地面上的一个区域,这个区域的半径与di成正比。于是,为了估计像素xi周围的人群密度,为我们需要把H(x)卷积一个自适应的高斯核的,这个高斯核的的方差σi是可变的并且和di成比例。
总结就是把标签H和一个自适应核的高斯核函数进行卷积,这个高斯核函数的方差为β与xi的K个最近邻平均距离的乘积。在程序中的体现就是从ground truth中提取xi点,做高斯卷积,高斯卷积的sigma是K=2时近邻的平均距离。
(原文内容:Interesting we found that usually the head size is related to the distance between the centers of two neighboring persons in crowded scenes.所以实验中K=2.)
3.论文《Switching Convolutional Neural Network for Crowd Counting》2017CVPR
针对人群密度估计问题提出了一个 Switch-CNN网络,大的思路就是根据图像块的内容信息来选择合适的CNN网络进行人群密度估计。 首先将图像分成3*3=9 个图像块,然后使用一个 CNN网络对每个图像块进行分类,看它适合使用哪个CNN网络来进行密度估计,这里提供了3个CNN网络来进行密度估计。
对于图像中的人群密度,有的区域密度大,有的区域密度小,这里我们对图像进行分块处理。
Switch-CNN网络架构:
这里的三个CNN网络设计R1,R2,R3 和 第二篇CVPR2016年论文中的 MCNN 是一样的。 对于 switch classifier 我们以 VGG16网络为基础
论文地址:
github地址:
看到一篇非常nice的博客: