人群计数:Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
人群计数:Single-Image Crowd Counting via Multi-Column Convolutional Neural Network(CVPR2016)
本博文主要是CVPR2016的《Single-Image Crowd Counting via Multi-Column Convolutional Neural Network》这篇文章的阅读笔记,以及对人群计数领域做一个简要介绍。最后补充介绍一篇18年的针对算法落地的人群计数方案《A Deeply-Recursive Convolutional Network For Crowd Counting》
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.单目摄像头乘客计数系统流程图图1.单目摄像头乘客计数系统流程图图1.单目摄像头乘客计数系统流程图
基于特征的回归一般分为以下3个步骤:
1)前景分割:前景(行人或人群)分割的目的是将人群从图像中分割出来便于后面的特征提取,分割性能的好坏直接关系的最终的计数精度,因此这是限制传统算法性能的一个重要因素。常用的分割算法有:光流法、混合动态纹理、小波分析 、背景差分等。
2)特征提取:从分割得到的前景提取各种不同的底层特征,常用的特征有:人群面积和周长、边缘信息、纹理特征、闵可夫斯基维度等。
3)人数回归:将提取到的特征回归到图像中的人数。常用的回归方法有:线性回归、分段线性回归、脊回归、高斯过程回归等[1]。
可以通过发表于CVPR08的Privacy Preserving Crowd Monitoring: Counting People without People Models or Tracking[2]来了解以下整个算法流程。首先用动态纹理的方法分割出运动的人群,之后做视角归一化,在归一化后的人群块上提取特征,用高斯过程回归将提取的特征回归到图像中人群数量。系统框图如下:
图2.人群计数系统流程图图2.人群计数系统流程图图2.人群计数系统流程图
2、单幅图像人群计数算法
对于单幅图像而言没有运动信息,那么人群分割就显得非常困难,因此此类算法一般直接从整张图像或者将图像分块从其子区域提取特征,然后再计算图像中人群数量。图像分块可以理解为是一种离散化透视效果的方法。
图3.图像分块图3.图像分块图3.图像分块
3、基于深度学习的人群计数算法
在监控视频的人群计数算法中,前景分割是不可或缺的步骤,然而前景分割本事就是一个比较困难的任务,算法性能很大程度地受其影响。最近深度学习比较热门,在各种传统领域内取得了惊人的进展。卷积神经网络实现了端对端训练,无需进行前景分割以及人工设计和提取特征,经过多层卷积之后得到高层的语义特征。CVPR2015的Cross-scene Crowd Counting via Deep Convolutional Neural Networks[3]提出了一个适用人群计数的深度卷积神经网络模型如下图所示,相比于人工特征对人群有更好的表述能力,交替回归该图像块的人群密度和人群总数来实现人数估计。此外,提出了一种数据驱动的方法从训练数据中选择样本来微调的预训练好的CNN模型,以适应未知的应用场景。
图4.人群计数网络结构图4.人群计数网络结构图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数据集图5. Shanghaitech数据集图5.Shanghaitech数据集
2、Density map based crowd counting
给定一张图像,用CNNs来估计人数,一般有两种方案:一是输入图像,输出估计的人头数目;二是输出的时人群密度图(每平方米多少人),然后再通过积分求总人数。作者支持第二种,有以下两点原因:
1)密度图保留更多的信息。与人群的总数相比,密度图给出了在给定图像中人群的空间分布,这样的分布信息在许多应用中是有用的。例如,如果一个小区域的密度比其他区域的密度高得多,它可能表明一些异常发生在那里。
2)在通过一个CNN模型学习密度图时,学习到的滤波器更适应于不同大小的头,因此更适合于有透视效果显着变化的任意输入。所以这些滤波器具有更多的语义,提高了人群计数的准确性。
3、Density map via geometry-adaptive kernels
训练数据中的人群密度的标定质量决定了CNN模型的性能。这里介绍下如何将带有标签的人头图像转换为人群密度图。
一幅有NNN个头的图像label表示为:
H(x)=∑Ni=1δ(x−xi)H(x)=\sum_{i=1}^N\delta(x-x_i)H(x)=i=1∑Nδ(x−xi)
为了使得密度图能够更好地与不同视角(不同人头大小)且人群很密的图像对应起来,作者对传统的基于高斯核的密度图做了改进,提出了基于几何适应高斯核的密度图,由下式表示:
F(x)=∑Ni=1δ(x−xi)∗Gσi(x), with σi=βdi¯¯¯F(x)=\sum_{i=1}^N\delta(x-x_i)*G_{\sigma_i}(x),\space with\space\sigma_i=\beta \bar{d^i}F(x)=i=1∑Nδ(x−xi)∗Gσi(x), with σi=βdiˉ
xix_ixi