Cross-scene Crowd Counting via Deep Convolutional Neural Networks
CVPR2015
本文主要使用深度学习来完成跨场景人群计数 cross-scene crowd counting,简单的说就是在多个场景训练,在没有训练过的场景测试。
我们建立了一个新的人群计数方面的数据库
http://www.ee.cuhk.edu.hk/~xgwang/expo.html
3 Method
3.1. Normalized crowd density map for training
我们的人群CNN模型主要目标是学习一个映射 F: X-> D,其中 X 是一组从训练图像中提取的 low-level 特征, D 是图像对应的人群密度图。假定每个人的位置被标记,密度图的创建基于 人的空间位置、人体形状、图像的视角变形。从训练图像中随机的选择图像块作为训练样本,图像块对应的密度图作为 CNN模型的真值。 作为一个附带的目标,所选图像块中总的人数通过对密度图积分计算得到。注意这里得到的总人数是一个小数,不是整数。
大多数研究按照文献【12】定义密度图真值为 物体位置上的一组高斯核的和。 这种类型的密度图适用于圆形的物体如 cells and bacteria。但是将他用于人群则不是很合适,因为这种监控相机不是 bird-view,下图就是监控相机拍摄到的一张图像:
从上图我们可以看到三个特征:
1)因为视角原因,图像中的人是多尺度的。
2)人的形状更符合椭圆
3)因为严重的遮挡,人的头和肩膀是主要信息用于判断某个位置是否有人存在,人的躯干不是很稳定的信息
综上所述, the crowd density map is created by the combination of several distributions with perspective normalization
Perspective normalization 是怎么做的了? 受文献【4】启发,对每个场景,我们随机的选择几个成年人,从头到脚标记,假定成年人的平均身高为 175cm。 perspective map M 可以通过线性回归近似,如上图 a 所示,
perspective map M(p) 像素值表示 在位置 p 实际场景一米对应的图像有多少个像素个数
The pixel value in the perspective map M(p) denotes that the number of pixels in the image representing one meter at that location in the actual scene
有了 perspective map 和人头的位置信息,我们可以用下面的公式创建 人群密度图
crowd density distribution kernel 包含两个部分,一个对应头部 normalized 2D Gaussian kernel ,一个对应躯干 body part bivariate normal distribution
3.2. Crowd CNN model
网络的输入是从训练图像中随机裁的图像块,为了获得行人的相同尺度,根据图像块中心点对应的 perspective value 来 选出的 图像块位置。这里我们约束我们的每个图像块覆盖的实际尺寸为 3m*3m ,然后图像块被缩放到 72*72 像素大小 输入 CNN 模型。
我们的 CNN 网络结构如下
3个卷积层 3个全连接层。第一个卷积层有 32个 7×7×3 滤波器,第二个卷积层 32个 7×7×32 滤波器,第三个卷积层有64个 5 × 5 × 32 滤波器。第一第二卷积层后面各用一个 2 × 2 最大池化,卷积和全连接层都使用 Rectified linear unit (ReLU) **响应函数。
这里我们交替优化 密度图估计任务和人数估计任务,我们的损失函数定义如下:
switchable training procedure
4 Nonparametric fine-tuning for target scene
我们需要在目标场景上进行微调,因为每个场景都有其特有的属性 bridge the distribution gap between the training and test scenes
a data-driven method is proposed to select samples from the training data to fine-tune the pre-trained CNN model adapting to the unseen target scene
这里我们根据使用数据驱动的方法从训练数据中选择一些样本来微调用于目标场景检测的 CNN模型,挑出和 test scene 相似的 图像块来微调 CNN模型。主要通过下面两个步骤来完成: candidate scenes retrieval and local patch retrieval
4.1. Candidate scene retrieval
场景中的 视角和尺度是影响人群外观的主要因素。 perspective map 可以同时表征 view angle and the scale,为了克服不同场景对应不同的尺度,每个图像块被归一化到同一个尺度,根据 perspective map 图像块 覆盖实际场景中的 3m*3m 正方形区域。所以微调的第一步就是从 训练图像中选择与 target scene 类似的 perspective map 的图像块作为微调用的训练数据,这些选出来的scenes叫做 candidate fine-tuning scenes。我们设计了一个 perspective descriptor 来表征每个场景的视角。因为 perspective map 和 y 轴是线性关系的,我们使用 垂直梯度 做为 perspective descriptor。
基于这个 perspective descriptor,对于每个unseen的目标场景, 从整个训练数据库中挑出 perspective-map 最相似的前20个 scenes, 这些 scenes作为 candidate scenes 用于图像块提取。
4.2. Local patch retrieval
第二步是从 candidate scenes 挑选出 和 test scene 有类似的 人群密度分布的图像块,除了视角和尺度,人群密度分布同样影响人群的外观显示。高密度的人群对应更严重的遮挡,而稀疏密度的人群,可以看到行人的完整躯干。所以我们尝试去预测 目标场景的密度分布,从candidate scenes 提取有类似密度分布的图像。例如一个高密度人群的场景,有密集人群的图像块应该被用于微调CNN网络。
这里我们使用 预训练的CNN模型来对目标场景图像的每个图像块进行预测密度和人数估计。这里假定经过预训练模型,有相似密度的图像块的人数也是大致一样的。有了这个预测结果,我们可以计算 目标场景的密度分布直方图。有了目标场景密度分布直方图,我们可以从retrieved training scenes 选择图像块使其具有类似的密度分布直方图,那么用这些图像块微调CNN模型 就可以模拟使用目标场景的图像进行训练了。
patches are randomly selected from the retrieved training scenes and the number of patches with different densities are controlled to match the density distribution of the target scene
5 Experiment
Statistics of three datasets
Mean absolute errors of the WorldExpo’10 crowd counting dataset
UCSD dataset