首页 > 代码库 > 【转】用深度学习做crowd density estimation

【转】用深度学习做crowd density estimation

本博文主要是CVPR2016的《Single-Image Crowd Counting via Multi-Column Convolutional Neural Network》这篇文章的阅读笔记,以及对人群计数领域做一个简要介绍。

Abstract

这篇论文开发了一种可以从一个单幅的图像中准确地估计任意人群密度和任意角度的人群数目。文章提出了一种简单有效的的多列卷积神经网络结构(MCNN)将图像映射到其人群密度图上。该方法允许输入任意尺寸或分辨率的图像,每列CNN学习得到的特征可以自适应由于透视或图像分辨率引起的人/头大小的变化,并能在不需要输入图的透视先验情况下通过几何自适应的核来精确计算人群密度图。作者提到他们训练得到的MCNN模型要优于现有的其他方法。

Introduction

公共场合中通过摄像机实现人数计数具有重要的研究价值。比如: 候车大厅中人群计数的结果,可优化公共交通的调度; 某区域中人数的急剧变化既可能会导致意外事件的发生, 又可能是意外事件发生的结果。公共场合中采用摄像机实现人群计数在智能安防领域具有重要价值。因此, 人群计数(Crowd Counting)或者人群密度估计(Crowd Density Estimation)是计算机视觉和智能视频监控领域的重要研究内容。

人群计数的通常的方法大致可以分为三种: 
1 )行人检测 : 这种方法比较直接,在人群较稀疏的场景中,通过检测视频中的每一个行人,进而得到人群计数的结果,一般是用基于外观和运动特征的boosting,贝叶斯模型为基础的分割,或集成的自顶向下和自底向上的处理,这种方法在人群拥挤情况下不大奏效,需要运用到基于部件模型(如DPM)的检测器来克服人群拥挤遮挡的问题。 
2)视觉特征轨迹聚类:对于视频监控,一般用KLT跟踪器和聚类的方法,通过轨迹聚类得到的数目来估计人数。 
3)基于特征的回归: 建立图像特征和图像人数的回归模型, 通过测量图像特征从而估计场景中的人数。由于拥挤情况下采用直接法容易受到遮挡等难点问题的影响,而间接法从人群的整体特征出发,具有大规模人群计数的能力。

1、监控视频中人群计数算法 
这边就介绍下视觉特征轨迹聚类和基于特征的回归两种方法。 
视觉特征轨迹聚类一般是针对视频图像序列,用KLT跟踪器和聚类的方法,通过轨迹聚类得到的数目来估计人数。比如Clustering method for counting passengers getting in a bus with single camera[5]这篇文章是研究公交车车门视频的乘客计数,采用的就是视觉特征轨迹聚类方法。如下图所示为该文章的单目摄像头乘客计数系统流程图。

技术分享
图1.单目摄像头乘客计数系统流程图

基于特征的回归一般分为以下3个步骤: 
1)前景分割:前景(行人或人群)分割的目的是将人群从图像中分割出来便于后面的特征提取,分割性能的好坏直接关系的最终的计数精度,因此这是限制传统算法性能的一个重要因素。常用的分割算法有:光流法、混合动态纹理、小波分析 、背景差分等。 
2)特征提取:从分割得到的前景提取各种不同的底层特征,常用的特征有:人群面积和周长、边缘信息、纹理特征、闵可夫斯基维度等。 
3)人数回归:将提取到的特征回归到图像中的人数。常用的回归方法有:线性回归、分段线性回归、脊回归、高斯过程回归等[1]。 
可以通过发表于CVPR08的Privacy Preserving Crowd Monitoring: Counting People without People Models or Tracking[2]来了解以下整个算法流程。首先用动态纹理的方法分割出运动的人群,之后做视角归一化,在归一化后的人群块上提取特征,用高斯过程回归将提取的特征回归到图像中人群数量。系统框图如下:

技术分享
图2.人群计数系统流程图

2、单幅图像人群计数算法 
对于单幅图像而言没有运动信息,那么人群分割就显得非常困难,因此此类算法一般直接从整张图像或者将图像分块从其子区域提取特征,然后再计算图像中人群数量。图像分块可以理解为是一种离散化透视效果的方法。

技术分享
图3.图像分块

3、基于深度学习的人群计数算法 
在监控视频的人群计数算法中,前景分割是不可或缺的步骤,然而前景分割本事就是一个比较困难的任务,算法性能很大程度地受其影响。最近深度学习比较热门,在各种传统领域内取得了惊人的进展。卷积神经网络实现了端对端训练,无需进行前景分割以及人工设计和提取特征,经过多层卷积之后得到高层的语义特征。CVPR2015的Cross-scene Crowd Counting via Deep Convolutional Neural Networks[3]提出了一个适用人群计数的深度卷积神经网络模型如下图所示,相比于人工特征对人群有更好的表述能力,交替回归该图像块的人群密度和人群总数来实现人数估计。此外,提出了一种数据驱动的方法从训练数据中选择样本来微调的预训练好的CNN模型,以适应未知的应用场景。

技术分享
图4.人群计数网络结构

上图中,conv1是32 7*7*3filters,conv2是32 7*7*32filters,conv3是64 5*5*32filters。conv1和conv2之后都是一个2*2的最大值pooling。 
想了解更多人群计数的发展状况请具体参考[1]以及阅读相关代表性论文。下面的内容主要是CVPR2016的这篇人群计数论文的阅读笔记。

Multi-column CNN

1、Contributions of this paper

当前阶段人群计数的主要问题有以下几点: 
在大多数现有的工作中,前景分割是必不可少的,但前景分割是项艰巨任务;人群的密度和分布会有显著变化,因此传统的基于目标检测的模型很难work well;需要一种有效的特征来针对图像中的人群规模可能有显著变化得请客。 
基于以上问题,作者提出了一个基于CNN的新框架用于任意单幅图像上的人群计数。MCNN包含了三列具有不同滤波器大小的卷积神经网络。所做贡献如下: 
1)多列架构的原因是:三列对应于不同大小的感受野(大,中,小),使每个列卷积神经网络的功能对由于透视或不同的图像分辨率造成的人/头大小变化是自适应的(因此,整体网络是强大的)。 
2)用一个1*1滤波器的卷积层代替了完全连接的层,因此模型的输入图像可以是任意大小的,避免了失真。网络的直接输出是一个人群密度估计图,从中可以得到的整体计数。 
3)收集了一个新的数据集用于人群计数方法的评价。比现有的数据集包含更复杂的情况,能更好地测试方法性能,1198张图,330,165精确标定的人头。数据集分A和B两个部分,A是从互联网上随机找的图,B是上海的闹市截取图,如图5所示为A、B部分图。

技术分享
图5.Shanghaitech数据集

2、Density map based crowd counting

给定一张图像,用CNNs来估计人数,一般有两种方案:一是输入图像,输出估计的人头数目;二是输出的时人群密度图(每平方米多少人),然后再通过积分求总人数。作者支持第二种,有以下两点原因: 
1)密度图保留更多的信息。与人群的总数相比,密度图给出了在给定图像中人群的空间分布,这样的分布信息在许多应用中是有用的。例如,如果一个小区域的密度比其他区域的密度高得多,它可能表明一些异常发生在那里。 
2)在通过一个CNN模型学习密度图时,学习到的滤波器更适应于不同大小的头,因此更适合于有透视效果显着变化的任意输入。所以这些滤波器具有更多的语义,提高了人群计数的准确性。

3、Density map via geometry-adaptive kernels

训练数据中的人群密度的标定质量决定了CNN模型的性能。这里介绍下如何将带有标签的人头图像转换为人群密度图。 
一幅有N个头的图像label表示为: 
H(x)=∑i=1Nδ(x?xi) 
为了使得密度图能够更好地与不同视角(不同人头大小)且人群很密的图像对应起来,作者对传统的基于高斯核的密度图做了改进,提出了基于几何适应高斯核的密度图,由下式表示: 
F(x)=∑i=1Nδ(x?xi)?Gσi(x), with σi=βdiˉ 
xi表示人头在图像中的像素位置,δ(x?xi)表示图像中人头位置的冲击函数,N为图像中的人头总数,diˉ=1m∑mj=1dij为距离xi人头最近m个人头与该人头的平均距离(通常情况头部的大小与两个相邻的人在拥挤的场景中的中心之间的距离有关,diˉ在人群较密的情况下近似等于人头大小),实验验证β=0.3效果最好。这样生成的密度图在人头小/大的位置高斯核的方差小/大(较集中/分散),能够更好地表征人头大小的特征,转化结果如下图。

技术分享
图6.通过基于几何适应高斯核转换得到的密度图

4、Multi-column CNN for density map estimation

MCNN主要是受到MDNNs[6] 在图像分类上取得成功的启发而提出来的。MCNN网络的每一列并行的子网络深度相同,但是滤波器的大小不同(大,中,小),因此每一列子网络的感受野不同,能够抓住不同大小人头的特征,最后将三列子网络的特征图做线性加权(由1x1的卷积完成)得到该图像的人群密度图,类似模型融合的思想。采用了2*2的max-pooling和ReLU激活函数。(注意,因为这里用到了两次max-pooling,所以需要先对训练样本也缩小到1/4,再生成对应的密度图ground truth)

技术分享
图7.MCNN结构图

作者采用优化欧式损失的方式让网络输出的密度图回归到标准的密度图,损失函数如下式: 
L(θ)=12N∑i=1N||F(Xi;θ)?Fi||22 
这里的θ是待优化的网络参数,N是训练图片的数目,Xi表示输入图像,Fi表示Xi对应密度图的ground truth,F(Xi;θ)表示由MCNN生成的密度图。

5、Optimization of MCNN

由于训练样本有限以及深度神经网路存在梯度弥散问题,会对参数学习造成困扰。作者借鉴RBM预训练的思想,通过直接将第四层卷积层的输出映射成密度图,分别对每一列CNN进行预训练。然后使用这些预训练的参数对MCNN的网络参数进行初始化,同时对所有参数进行微调。

6、Transfer learning setting 
MCNN的一个优势在于能学习到不同大小人头对应的密度图。因此,如果该模型用一个包含各种大小人头的大数据集来训练,则该模型可以很容易地适应(或迁移)到另一个人头大小是一些特定的尺寸的数据集。如果目标域只包含少量的训练样本,可以简单地将MCNN的每一列前几层固定,只有微调最后的少量卷积层。这样固定前几层使在源域中学习的知识可以被保留,微调后几层很大程度上降低了模型适应目标域的计算复杂度。

Experiments

1、Evaluation metric

平均绝对误差(MAE)和均方误差(MSE)是常用的衡量算法性能的标准,前者表征算法估计的准确性,后者表征算法估计的稳定性,二者的定义如下式: 
MAE=1N∑1N|zi?zi^|, MSE=1N∑1N(zi?zi^)2?????????????? 
这里的N表示测试图像数目,zi是第张图片实际人数,zi^)2是算法估计的人数。

2、Shanghaitech dataset

技术分享
表1:Shanghaitech与其他三个现有数据集的比较 
3、Single column CNNs vs MCNN 
从下图可以看出,MCNN比Single column CNNs的MAE和MSE都要低,MCNN比没有预训练的MCNN性能有所提高。 
技术分享
图8.SinglecolumnCNNsvsMCNN

4、Comparing performances

技术分享
表2:Shanghaitech数据集的比较结果

技术分享
表3:UCF_CC_50数据集的比较结果

技术分享
表4:UCSD数据集的比较结果

技术分享
表5:WorldExpo′10数据集的比较结果

MCNN方法在除了UCF_CC_50(训练图片数量太少,难以满足深度学习的需求)以外的常用人群计数数据集上均取得最好的性能。

5、Evaluation on transfer learning

技术分享
表6:迁移学习结果

Conclusion

这篇论文提出了的MCNN模型,能对任意视角的单张图像进行人数估计,并在常用人群计数数据集上均取得最好的性能。同时该模型可以较为容易迁移到针对另一人群目标域进行应用。

博客链接:http://blog.csdn.net/u011285477/article/details/51954989

参考资料: 
[1]人群计数研究进展: 
http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650325105&idx=1&sn=939f46fd57a80f86b9eb050dd2cf1652&scene=23&srcid=0719aUJR2CUdt7cmOII0KKol#rd 
[2]Chan A B, Liang Z S J, Vasconcelos N. Privacy preserving crowd monitoring: Counting people without people models or tracking[C]//Computer Vision and Pattern Recognition, 2008. CVPR 2008. IEEE Conference on. IEEE, 2008: 1-7.引用次数:340 
[3]Zhang C, Li H, Wang X, et al. Cross-scene crowd counting via deep convolutional neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 833-841.引用次数:26 
[4]Zhang Y, Zhou D, Chen S, et al. Single-Image Crowd Counting via Multi-Column Convolutional Neural Network[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 589-597. 
[5]Yang T, Zhang Y, Shao D, et al. Clustering method for counting passengers getting in a bus with single camera[J]. Optical Engineering, 2010, 49(3): 037203-037203-10.引用次数:14 
[6]Ciregan D, Meier U, Schmidhuber J. Multi-column deep neural networks for image classification[C]//Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012: 3642-3649.引用次数:783 
[7]ShanghaiTech数据集百度云下载链接:http://pan.baidu.com/s/1gfyNBTh 密码:p1rv

【转】用深度学习做crowd density estimation