人群计数:Single-Image Crowd Counting via
Multi-Column Convolutional Neural Network
(CVPR2016)
2016 年 07 月 22 日 11:36:09
阅读数:20449
本博文主要是 CVPR2016 的《Single-Image Crowd Counting via Multi-Colu
mn Convolutional Neural Network》这篇文章的阅读笔记,以及对人群计数领
域做一个简要介绍。
Abstract
这篇论文开发了一种可以从一个单幅的图像中准确地估计任意人群密度和任意
角度的人群数目。文章提出了一种简单有效的的多列卷积神经网络结构(MCNN)
将图像映射到其人群密度图上。该方法允许输入任意尺寸或分辨率的图像,每列
CNN 学习得到的特征可以自适应由于透视或图像分辨率引起的人/头大小的变化,
并能在不需要输入图的透视先验情况下通过几何自适应的核来精确计算人群密
度图。作者提到他们训练得到的 MCNN 模型要优于现有的其他方法。
Introduction
公共场合中通过摄像机实现人数计数具有重要的研究价值。比如: 候车大厅中人
群计数的结果,可优化公共交通的调度; 某区域中人数的急剧变化既可能会导致
意外事件的发生, 又可能是意外事件发生的结果。公共场合中采用摄像机实现
人群计数在智能安防领域具有重要价值。因此, 人群计数(Crowd Counting)或
者人群密度估计(Crowd Density Estimation)是计算机视觉和智能视频监控领域
的重要研究内容。
人群计数的通常的方法大致可以分为三种:
1 )行人检测 : 这种方法比较直接,在人群较稀疏的场景中,通过检测视频中
的每一个行人,进而得到人群计数的结果,一般是用基于外观和运动特征的 bo
osting,贝叶斯模型为基础的分割,或集成的自顶向下和自底向上的处理,这种
方法在人群拥挤情况下不大奏效,需要运用到基于部件模型(如 DPM)的检测
器来克服人群拥挤遮挡的问题。
2)视觉特征轨迹聚类:对于视频监控,一般用 KLT 跟踪器和聚类的方法,通过
轨迹聚类得到的数目来估计人数。
3)基于特征的回归: 建立图像特征和图像人数的回归模型, 通过测量图像特征
从而估计场景中的人数。由于拥挤情况下采用直接法容易受到遮挡等难点问题的
影响,而间接法从人群的整体特征出发,具有大规模人群计数的能力。
Related work
1、监控视频中人群计数算法
这边就介绍下视觉特征轨迹聚类和基于特征的回归两种方法。
视觉特征轨迹聚类一般是针对视频图像序列,用 KLT 跟踪器和聚类的方法,通
过轨迹聚类得到的数目来估计人数。比如 Clustering method for counting pas
sengers getting in a bus with single camera[5]这篇文章是研究公交车车门
视频的乘客计数,采用的就是视觉特征轨迹聚类方法。如下图所示为该文章的单
目摄像头乘客计数系统流程图。
图 1.单目摄像头乘客计数系统流程图图 1.单目摄像头乘客计数系统流程图
基于特征的回归一般分为以下 3 个步骤:
1)前景分割:前景(行人或人群)分割的目的是将人群从图像中分割出来便于
后面的特征提取,分割性能的好坏直接关系的最终的计数精度,因此这是限制传
统算法性能的一个重要因素。常用的分割算法有:光流法、混合动态纹理、小波
分析 、背景差分等。
2)特征提取:从分割得到的前景提取各种不同的底层特征,常用的特征有:人
群面积和周长、边缘信息、纹理特征、闵可夫斯基维度等。
3)人数回归:将提取到的特征回归到图像中的人数。常用的回归方法有:线性
回归、分段线性回归、脊回归、高斯过程回归等[1]。
可以通过发表于 CVPR08 的 Privacy Preserving Crowd Monitoring: Counting
People without People Models or Tracking[2]来了解以下整个算法流程。首
先用动态纹理的方法分割出运动的人群,之后做视角归一化,在归一化后的人群
块上提取特征,用高斯过程回归将提取的特征回归到图像中人群数量。系统框图
如下:
图 2.人群计数系统流程图图 2.人群计数系统流程图
2、单幅图像人群计数算法
对于单幅图像而言没有运动信息,那么人群分割就显得非常困难,因此此类算法
一般直接从整张图像或者将图像分块从其子区域提取特征,然后再计算图像中人
群数量。图像分块可以理解为是一种离散化透视效果的方法。
图 3.图像分块图 3.图像分块
3、基于深度学习的人群计数算法
在监控视频的人群计数算法中,前景分割是不可或缺的步骤,然而前景分割本事
就是一个比较困难的任务,算法性能很大程度地受其影响。最近深度学习比较热
门,在各种传统领域内取得了惊人的进展。卷积神经网络实现了端对端训练,无
需进行前景分割以及人工设计和提取特征,经过多层卷积之后得到高层的语义特
征。CVPR2015 的 Cross-scene Crowd Counting via Deep Convolutional N
eural Networks[3]提出了一个适用人群计数的深度卷积神经网络模型如下图所
示,相比于人工特征对人群有更好的表述能力,交替回归该图像块的人群密度和
人群总数来实现人数估计。此外,提出了一种数据驱动的方法从训练数据中选择
样本来微调的预训练好的 CNN 模型,以适应未知的应用场景。
图 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 数据集
2、Density map based crowd counting
给定一张图像,用 CNNs 来估计人数,一般有两种方案:一是输入图像,输出
估计的人头数目;二是输出的时人群密度图(每平方米多少人),然后再通过积
分求总人数。作者支持第二种,有以下两点原因:
1)密度图保留更多的信息。与人群的总数相比,密度图给出了在给定图像中人
群的空间分布,这样的分布信息在许多应用中是有用的。例如,如果一个小区域
的密度比其他区域的密度高得多,它可能表明一些异常发生在那里。
2)在通过一个 CNN 模型学习密度图时,学习到的滤波器更适应于不同大小的
头,因此更适合于有透视效果显着变化的任意输入。所以这些滤波器具有更多的
语义,提高了人群计数的准确性。
3、Density map via geometry-adaptive kernels
训练数据中的人群密度的标定质量决定了 CNN 模型的性能。这里介绍下如何将
带有标签的人头图像转换为人群密度图。
一幅有 NN 个头的图像 label 表示为:
H(x)=∑i=1Nδ(x−xi)H(x)=∑i=1Nδ(x−xi)
为了使得密度图能够更好地与不同视角(不同人头大小)且人群很密的图像对应起来,作者
对传统的基于高斯核的密度图做了改进,提出了基于几何适应高斯核的密度图,由下式表
示:
F(x)=∑i=1Nδ(x−xi)∗Gσi(x), with σi=βdi¯F(x)=∑i=1Nδ(x−xi)∗Gσi(x), with σi=βdi¯
xixi 表示人头在图像中的像素位置,δ(x−xi)δ(x−xi)表示图像中人头位置的冲击函数,NN
为图像中的人头总数,di¯=1m∑mj=1dijdi¯=1m∑j=1mdji 为距离 xixi 人头最近 mm 个人头与
该人头的平均距离(通常情况头部的大小与两个相邻的人在拥挤的场景中的中心之间的距离
有关,di¯di¯在人群较密的情况下近似等于人头大小),实验验证β=0.3β=0.3 效果最好。这
样生成的密度图在人头小/大的位置高斯核的方差小/大(较集中/分散),能够更好地表征人
头大小的特征,转化结果如下图。
图 6.通过基于几何适应高斯核转换得到的密度图图 6.通过基于几何适应高斯核转换得到的
4、Multi-column CNN for density map estimation
密度图
MCNN 主要是受到 MDNNs[6] 在图像分类上取得成功的启发而提出来的。MCN
N 网络的每一列并行的子网络深度相同,但是滤波器的大小不同(大,中,小),
因此每一列子网络的感受野不同,能够抓住不同大小人头的特征,最后将三列子
网络的特征图做线性加权(由 1x1 的卷积完成)得到该图像的人群密度图,类
似模型融合的思想。采用了 2*2 的 max-pooling 和 ReLU 激活函数。(注意,因
为这里用到了两次 max-pooling,所以需要先对训练样本也缩小到 1/4,再生成
对应的密度图 ground truth)
图 7.MCNN 结构图图 7.MCNN 结构图
作者采用优化欧式损失的方式让网络输出的密度图回归到标准的密度图,损失函
数如下式:
L(θ)=12N∑i=1N||F(Xi;θ)−Fi||22L(θ)=12N∑i=1N||F(Xi;θ)−Fi||22
这里的θθ是待优化的网络参数,NN 是训练图片的数目,XiXi 表示输入图像,FiFi 表示 Xi
Xi 对应密度图的 ground truth,F(Xi;θ)F(Xi;θ)表示由 MCNN 生成的密度图。
5、Optimization of MCNN
由于训练样本有限以及深度神经网路存在梯度弥散问题,会对参数学习造成困扰。
作者借鉴 RBM 预训练的思想,通过直接将第四层卷积层的输出映射成密度图,
分别对每一列 CNN 进行预训练。然后使用这些预训练的参数对 MCNN 的网络
参数进行初始化,同时对所有参数进行微调。
6、Transfer learning setting
MCNN 的一个优势在于能学习到不同大小人头对应的密度图。因此,如果该模
型用一个包含各种大小人头的大数据集来训练,则该模型可以很容易地适应(或
迁移)到另一个人头大小是一些特定的尺寸的数据集。如果目标域只包含少量的
训练样本,可以简单地将 MCNN 的每一列前几层固定,只有微调最后的少量卷
积层。这样固定前几层使在源域中学习的知识可以被保留,微调后几层很大程度
上降低了模型适应目标域的计算复杂度。
Experiments