概述
人群行为分析算法分为四个主要方向:
1、行人检测(Pedestrian Detection)
2、人群计数(Crowd Counting)
3、人群密度分析(Crowd Density Estimation)
4、人群状态分析(Crowd Behaviour Analysis)
人群计数与人群密度分析为其中重要的组成内容。人群计数与人群密度分析算法通常的方法大致可以分为三种:
1 、行人检测 :这种方法比较直接,在人群较稀疏的场景中,通过检测视频中的每一个行人,进而得到人群计数的结果,一般是用基于外观和运动特征的boosting,贝叶斯模型为基础的分割,或集成的自顶向下和自底向上的处理,这种方法在人群拥挤情况下不大奏效,需要运用到基于部件模型(如DPM)的检测器来克服人群拥挤遮挡的问题。
2、视觉特征轨迹聚类:对于视频监控,一般用KLT跟踪器和聚类的方法,通过轨迹聚类得到的数目来估计人数。
3、基于特征的回归:建立图像特征和图像人数的回归模型, 通过测量图像特征从而估计场景中的人数。由于拥挤情况下采用直接法容易受到遮挡等难点问题的影响,而间接法从人群的整体特征出发,具有大规模人群计数的能力。
人群密度分析算法技术分析
传统方法
1、前景分割:前景(行人或人群)分割的目的是将人群从图像中分割出来便于后面的特征提取,分割性能的好坏直接关系的最终的计数精度,因此这是限制传统算法性能的一个重要因素。常用的分割算法有:光流法、混合动态纹理、小波分析 、背景差分等。
2、特征提取:从分割得到的前景提取各种不同的底层特征,常用的特征有:人群面积和周长、边缘信息、纹理特征、闵可夫斯基维度等。
3、人数回归:将提取到的特征回归到图像中的人数。常用的回归方法有:线性回归、分段线性回归、脊回归、高斯过程回归等。
深度学习方法
Step1、给定一张图像,用CNNs来估计人数,一般有两种方案:
Step2、一是输入图像,输出区域内估计的人头数目;
Step3、二是输出人群密度图(每平方米多少人),然后再通过积分求总人数。
主流算法分析
1、Cross-scene Crowd Counting via Deep Convolutional Neural Network(CVPR2015)
目的:
解决算法在不同场景下通用性问题
难点:
1、寻找一种可以更好表达人群特征的方式(用深度学习替代手工特征)。
2、不同场景有不同的透视率,人群分布与光照条件。
3、传统方法使用的前景分割方法很难得到精确的分割结果。
4、数据集(现有数据集样本数目少,场景单一)。
贡献:
1、提出了一种同时进行两个任务的CNN模型,一个任务是估计人群密度图,一个任务是人数统计。
2、提出了一种新场景无需要人工标定自适应finetune的训练流程。
3、提出的框架不再依赖于前景分割。
4、提出了一个当时最大的人群密度分析测试集(WorldExpo’10 Crowd Counting Dataset)。
训练流程图
训练数据准备
1、图(a)为样本的透视图估计。越红代表透视图值越大。
2、图(b)展示了估计出来的密度图。分别展示出了密度图跟计算密度图的不同区域。可以看出,随着透视值的增加,框变大。
预测网络结构
测试结果
UCSD dataset
UCF CC 50 dataset
2、Single-Image Crowd Counting via Multi-Column Convolutional Neural Network(CVPR2016)
目的:
提出了一种根据任意单张样本精确估计任意人群密度与透视角度的人群数量估计算法。
难点:
1、不使用前景分割技术。
2、人群的分布与密度在数据集中变化多样,往往存在极大的遮挡。
3、样本中行人尺度变化很大。
贡献:
1、提出一张多分支网络结构解决目标多尺度问题,实现行人密度图输出。
2、使用全卷积结构代替全连接,支持任意尺存样本输入,降低失真。
3、建立一个约1200张样本的新数据集(Shanghaitech dataset)
MCNN结构图
训练数据准备
基于几何自适应核大小的密度图计算
通常情况头部的大小与两个相邻的人在拥挤的场景中的中心之间的距离有关, 在人群较密的情况下近似等于人头大小,实验验证β=0.3效果最好。这样生成的密度图在人头小/大的位置高斯核的方差小/大(较集中/分散),能够更好地表征人头大小的特征。
对比测试
不同尺度单列网络结构与多列网络结构结果对比
3、CrowdNet: A Deep Convolutional Network for Dense Crowd Counting (ACM 2016)
目的:
提出一种基于深度学习的解决高密度人群密度分析算法
难点:
1、传统的检测方法无法胜任高密度、高重叠的场景的人群计数工作。
2、样本的透视方式多种多样。
3、比其它CV任务复杂的多的数据标定工作。
贡献:
1、使用深浅结合的双分支网络结构解决目标多尺度变化问题。
2、从样本中多尺度取样做数据扩展,提升多尺度的兼容性。
CrowdNet结构图
训练数据准备
对比测试
4、Slicing Convolutional Neural Network for Crowd Video Understanding(CVPR 2016.7)
特点:
利用2D卷积实现人群密度时空分析。
目的:
传统的3D卷积或者跟踪方法将样本结构特征与动态特征混合在一起同时处理,作者认为这两种完全不同的特征可以通过设计一种先进的网络分别提取有价值的语义信息,用于人群密度视频分析。
贡献:
提出一种全新名为Slicing CNN(S-CNN)网络结构,主要包括三个网络分支。包括一个作用于视频序列帧上(x,y方向)的2D空间滤波分支,产生3D的特征集。以及两个使用第一个分支作为输入,分别作用于时间方向与x,y轴的2D滤波分支。
5、Spatiotemporal Modeling for Crowd Counting in Videos(ICCV 2017.7)
特点:
利用LSTM实现长序列人群密度时空分析。
目的:
主流的视频人群密度分析算法在处理视频时以帧为单位,没有考虑十分重要的视频时序特征。
贡献:
1、提出一种新的网络结构称为ConvLSTM用于视频行人计数。
2、扩展ConvLSTM为双向LSTM,获取时序方向上更多的双向特征。
3、进行了一系列迁移学习测试,证明本文提出的方法通过少数视频帧微调,在全新的数据集上取得很好的效果。
6、Other Papers
Deep People Counting in Extremely Dense Crowds(ACM2015)
贡献:
1、提出一种端到端的网络结构,预测ROI内的行人个数。
2、为了降低误检率提出了一种负样本拓展策略。
CNN-based Cascaded Muti-task Learning of High-level Prior and Density Estimation for Crowd Counting(AVSS 2017.8)(pytorch code)
贡献:
1、提出一种端到端的新型网络结构,并行进行人数统计任务与人群密度分析任务。
Crowd counting via scale-adaptive convolutional neural network(2017.11)(caffe code)
贡献:
1、提出一种自适应尺度的CNN结构(SaCNN)。
2、提出一种Relative Count Loss。
3、建立一个新的数据集(SmartCity)。
Fully Convolutional Crowd Counting On Highly Congested Scenes(VISAPP 2017.1)
贡献:
1、提出一种训练数据数据拓展的方法,降低训练数据的冗余性,提升模型的鲁棒性。
2、提出一种单列,全卷积网络结构进行人群密度热力图预测。
3、提出一种前向运算时多尺度样本输入的策略,增强不同透视率相机的识别能力。
ResNetCrowd: A Residual Deep Learning Architecture for Crowd Counting,Violent Behaviour Detection and Crowd Density Level Classification(AVSS 2017.5)
贡献:
1、提供了一个100张图片组成的完整标记了人群数目,暴力行为以及人群密度估计的数据集。
2、提出了一种基于深度残差网络的多任务网络结构,同时进行人群数目统计,暴力行为检测以及人群密度估计任务。
3、对提出的多任务系统进行定量分析与对比测试。
技术重点与难点
常用人群密度估计数据库