CVer很荣幸可以转载纯真学者出神入化公众号的这篇文章,本文作者是来自复旦大学计算机的在读博士老田和电闪雷鸣。本期他们将为我们介绍人群计数的相关技术和进展,欢迎感兴趣的朋友阅读。
前言
国内外的大型活动中频发踩踏事件,已经造成了不小的伤亡,如2015年上海外滩踩踏事件,已达到了我国规定的重大伤亡事故级别。因此,人群计数问题的研究也越来越火热,若能通过准确估计当前场景的人群密度,并安排相应的安保措施,则可以有效减少或避免此类事件的发生。
1.传统人群计数方法
传统的人群计数算法主要分类两大类:
1)基于检测的方法。早期的人群研究主要聚焦于基于检测的方法。[1] 使用一个滑动窗口检测器来检测场景中人群,并统计相应的人数。基于检测的方法主要分为两大类,一种是基于整体的检测,另一种是基于部分身体的检测。基于整体的检测方法,例如 [2,3,4,5],典型的传统方法,主要训练一个分类器,利用从行人全身提取的小波,HOG,边缘等特征去检测行人。学习算法主要有SVM, boosting 和 随机森林等方法。基于整体检测的方法主要适用于稀疏的人群计数,随着人群密度的提升,人与人之间的遮挡变得越来越严重。所以基于部分身体检测的方法,被用来处理人群计数问题。[6, 7]主要通过检测身体的部分结构,例如头,肩膀等去统计人群的数量。这种方法比之基于整体的检测,在效果上有略微的提升。
2)基于回归的方法。无论何种基于检测的方法,都很难处理人群之间严重的遮挡问题。所以,基于回归的方法逐渐被用来解决人群计数的问题。基于回归的方法,主要思想是通过学习一种特征到人群数量的映射[8, 9, 10]。这类方法步骤主要分为两步,第一步提取低级的特征,例如前景特征,边缘特征,纹理和梯度特征;第二步是学习一个回归模型,例如线性回归,分段线性回归,岭回归和高斯过程回归等方法学习一个低级特征到人群数的映射关系。
2. 深度学习驱动的人群计数
深度学习(Deep Learning,DL)技术始于2006年Hinton等人在Science发表的文章”Reducing the Dimensionality of Data with Neural Networks”,正式在学界井喷是在2012年”Alexnet”提出后。近些年来,DL被广泛应用于各个研究领域(计算机视觉,自然语言处理等)。DL凭借其出色的特征学习能力,同样被研究人员用于人群计数的研究中,相应的数据集也接踵而至,如ShanghaiTect A/B,UCSD,Expo2010,Mall,UCF-CC-50和UCF-QNRF。
不同于传统的基于检测和回归的方法,对于图像中密集人群区域,利用预测密度图(Density Map)的方法得到了更好的预测结果。由于图像中人群密度分布极不均匀,研究人员利用多阵列(Multi-Column)的卷积神经网络(Convolutional Neural Network,CNN)来实现提取不同尺度的人头特征。
MCNN(CVPR 2016)如图2所示,利用3个具有不同卷积核大小的网络来分别提取人群图像的特征,最后将3个尺度的特征通过1×1卷积来融合。这类利用多个网络的模型具有较多的参数,计算量大,无法进行实时的人群计数预测。而且多阵列的网络并不能如所描述的一般,提取不同的人头特征。有很多低效的分支结构。
CP-CNN(CVPR 2017)如图3所示,通过提取图像的全局和局部语义信息来加强对密度图对约束。图3中绿色子网络表示对整张输入图像做特征提取并分类(类别为作者分好的密度等级,即当前输入图像属于哪个密度等级),并将分类结果张成一个与密度特征具有相同高和宽的图像(全局上下文);蓝色子网络对原图中割出的patch做同样的操作,得到局部上下文。最终将全局和局部上下文特征与原图产生的密度图(黄色部分)在通道维度拼接(concate)。该方法的初衷是为了考虑一幅图像中人群的全局密度和局部密度信息,最后对整个特征做约束,使得网络对任何一张图像都自适应的学到相应密度等级的特征。
Switch-CNN(CVPR 2017)同样使用了三个子网络和分类的思想,让不同密度等级的patch通过相应的子网络,则所有patch被更准确地预测,最终,所有patch的准确预测构成了原图准确的人群估计。作者在训练过程中用到了预训练的技术,首先使用所有训练数据对所有网络做了预训练,然后将每个patch通过分类网络决定进一步输入到哪个子网络。该模型存在与MCNN同样的问题,即“到底应该选择几个子网络?”。但该方法通过网络学习来确定patch输入的路径,给patch做分类还是比较新颖的idea。
CSRNet(CVPR2018)如图5所示,摒弃了Multi-Column框架,并在其论文中说明了Multi-Column相对于Single-Column的优势并不大。CSRNet利用预训练的VGG16网络,后接空洞卷积(Dilated Convolution)得到了state-of-the-art的结果。文章中对比了空洞卷积和非空洞卷积的区别(图4 右),空洞卷积更容易得到人头的边缘信息,这也是该模型能得到较高精度的重要原因。
ic-CNN(ECC V2018)如图6所示,这个模型采取的思路是将得到的密度图由低分辨率(Low Resolution, LR)密度图逐步细化到高分辨率(High Resolution, HR)密度图,网络结构比较清晰,这是个可扩展到模型,即根据需要,网络可以随分辨率到提高而扩展。笔者认为,本方法的灵感来自于图像生成领域,这种由低分辨率到高分辨率的逐步生成,在图像生成领域相当常见。
SANet(ECCV 2018)如图7所示,该方法同样考虑要提取每个图像的多个尺度的人头信息,但并不采取类似MCNN的多阵列网络结构,其使用了类似于Inception架构的模块,在每个卷积层都同时使用不同大小的卷积核,最后通过反卷积得到最终的密度图。
基于深度学习的人群计数方法还有研究者加入了景深信息(在聚焦完成后,焦点前后的范围内所呈现的清晰图像,这一前一后的距离范围,便叫做景深)、人体结构信息,提供了很多新颖的思路。笔者认为,无论是提取多尺度特征还是逐步细化密度图,目前最困难的问题仍然是1)在人群密集的区域,如何让模型更精细的区分出人的特征(如人头重叠);2)如何教会模型“聚焦”,即在一幅人群密度分布广泛的图像中对较小尺度的局部特征能“看”得更清晰。
参考文献
[1] Pedestrian detection:An evaluation of the state of the art.
[2] Histograms of oriented gradients for humandetection,
[3] Pedestrian detection incrowded scenes
[4] Monocular pedestrian detection: Survey and experiments.
[5] Pedestrian detection via classification on riemannian manifolds.
[6] Object detection with discriminatively trained part-based models.
[7] Detection and tracking of multiple, partially occluded humans by bayesian combination of edgelet based part detectors.
[8] Bayesian poisson regression for crowd counting
[9] Crowd counting using multiple local features
[10] Feature mining for localized crowd counting.