【转】用深度学习做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)基于特征的回归: 建立图像特征和图像人数的回归模型, 通过测量图像特征从而估计场景中的人数。由于拥挤情况下采用直接法容易受到遮挡等难点问题的影响,而间接法从人群的整体特征出发,具有大规模人群计数的能力。
Related work
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的更多相关文章
- 泡泡一分钟:Geometric and Physical Constraints for Drone-Based Head Plane Crowd Density Estimation
张宁 Geometric and Physical Constraints for Drone-Based Head Plane Crowd Density Estimation 基于无人机的向下平面 ...
- 手把手教你用深度学习做物体检测(五):YOLOv1介绍
"之前写物体检测系列文章的时候说过,关于YOLO算法,会在后续的文章中介绍,然而,由于YOLO历经3个版本,其论文也有3篇,想全面的讲述清楚还是太难了,本周终于能够抽出时间写一些YOLO算法 ...
- 手把手教你用深度学习做物体检测(六):YOLOv2介绍
本文接着上一篇<手把手教你用深度学习做物体检测(五):YOLOv1介绍>文章,介绍YOLOv2在v1上的改进.有些性能度量指标术语看不懂没关系,后续会有通俗易懂的关于性能度量指标的介绍文章 ...
- 用深度学习做命名实体识别(二):文本标注工具brat
本篇文章,将带你一步步的安装文本标注工具brat. brat是一个文本标注工具,可以标注实体,事件.关系.属性等,只支持在linux下安装,其使用需要webserver,官方给出的教程使用的是Apac ...
- 用深度学习做命名实体识别(六)-BERT介绍
什么是BERT? BERT,全称是Bidirectional Encoder Representations from Transformers.可以理解为一种以Transformers为主要框架的双 ...
- 用深度学习做命名实体识别(七)-CRF介绍
还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文 ...
- 手把手教你用深度学习做物体检测(七):YOLOv3介绍
YOLOv3 论文:< YOLOv3: An Incremental Improvement > 地址: https://arxiv.org/pdf/1804.02767.pdfyolov ...
- face recognition[翻译][深度学习理解人脸]
本文译自<Deep learning for understanding faces: Machines may be just as good, or better, than humans& ...
- 【AI in 美团】深度学习在文本领域的应用
背景 近几年以深度学习技术为核心的人工智能得到广泛的关注,无论是学术界还是工业界,它们都把深度学习作为研究应用的焦点.而深度学习技术突飞猛进的发展离不开海量数据的积累.计算能力的提升和算法模型的改进. ...
随机推荐
- PHP里面增加写日志功能
配置项中:
- java ----> 类转换异常
com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy 两个原因: 1.懒加载 在we ...
- English trip V1 - B 4.How Do You Make a Salad? 请给我一间房? Teacher:Julia Key:imperatives 祈使句
In this lesson you will learn to give instructions. 这节课你将将学会给出指示. 课上内容(Lesson) 词汇(Key Word ) bell pe ...
- 微信小程序选择图片,查看图片信息,浏览图片,图片上传
依次点击链接请查看以下步骤 选择图片: https://mp.weixin.qq.com/debug/wxadoc/dev/api/media-picture.html#wxchooseimageob ...
- js滚动条如何缓慢的回到顶部?
function top() { let currentPosition, timer timer = setInterval(function () { currentPosition = docu ...
- 小程序用户openid设置放缓存
wx.setStorageSync('openid', res.data.data.openid),设置 var openid = wx.getStorageSync('openid')获取
- Oracl 12c (课本)
一.安装和部署:https://www.cnblogs.com/-xuan/p/10211387.html 二. (1)体系结构 Oracle体系结构 实例:实例是后台进程和内存的集合 数据库:数据库 ...
- tcpcopy真实流量压测工具
https://quentinxxz.iteye.com/blog/2249799 http://blog.chinaunix.net/uid-25057421-id-5576741.html htt ...
- hdu-4819-线段树套线段树
http://acm.hdu.edu.cn/showproblem.php?pid=4819 给出一个N*N的矩阵,每次询问一个m*m的子矩阵里的floor((maxv+minv)/2)并把中间的元素 ...
- ASP.NET 后台页面无法识别服务器控件ID
在学习asp.net 的时候 发现有个页面服务器控件无法识别,提示未知元素 解决方法 将不能识别服务器控件ID 的后台文件 类名改写,重新生成一次. 然后再改回来就可以了.