【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network是CVPR2016的一篇论文。

Abstract

本文旨在开发一种方法,该方法可以从具有任意人群密度和任意角度的单个图像准确估计人群数量。为此,我们提出了一种简单高效的多列卷积神经网(MCNN)架构,以预测人群密度图。MCNN允许输入图像具有任意大小或分辨率。通过利用具有不同大小的 filters,每列CNN学习到的特征都可适应由于透视效果或图像分辨率而导致的不同大小的人头。此外,密度图的ground truth 用几何自适应高斯核生成。由于现有的人群计数数据集不足以涵盖我们工作中考虑的所有具有挑战性的情况,因此我们收集并标记了一个新的大型数据集,其中包括1198幅图像,其中约有330,000个头被标注。在这个具有挑战性的新数据集以及所有现有数据集上,我们进行了广泛的实验,以验证所提出的模型和方法的有效性。特别是,通过提出的简单MCNN模型,我们的方法优于所有现有方法。 此外,实验表明,一旦在一个数据集上进行训练,我们的模型就可以轻松转移到新的数据集上。

1. Introduction

在本文中,我们旨在从任意静止图像,摄像机视角和人群密度进行准确的人群计数(一些典型示例,请参见图1)。
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
Crowd Counting 面临的挑战

  1. 前景分割。没有有关场景几何或运动的信息,几乎不可能从人群的背景中准确地分割出人群。 因此,我们必须在不先分割前景的情况下估计人群的数量。
  2. 在我们的任务(或数据集)中,人群的密度和分布差异很大,通常每个图像中的大多数人都有巨大的遮挡。 因此,传统的基于检测的方法不适用于此类图像和情况。
  3. 由于图像中人物的比例可能存在显着差异,因此我们需要一起使用不同比例的特征,以便准确估计不同图像的人群数量。由于我们没有跟踪的特征,并且很难为所有不同的比例手工绘制特征,因此我们不得不求助于可以自动学习有效特征的方法。

本文的贡献

  1. 采用多列架构的原因是:三列对应不同尺寸的 filter(大、中、小),因此每列学到的特征都可以适应由于透视效果或跨不同的图像分辨率而导致的人/头大小的较大差异。
  2. 在我们的MCNN中,我们将全连接层替换为1×1的卷积层。因此,模型的输入图像可以具有任意大小以避免扭曲。 网络的直接输出是对人群密度的估计,从中可以得出总体计数。
  3. 收集了新的数据集验证counting 方法,现有的人群计数数据集无法在本工作考虑的各种场景中全面测试算法的性能,因为它们在视点变化(UCSD,WorldExpo’10),人群计数(UCSD),数据集规模(UCSD,UCF)方面存在局限性 CC 50)或各种场景(UCF CC 50)。在这项工作中,我们介绍了一个名为Shanghaitech的新的大规模人群数据集,其中包含近1200张图像和约330,000个准确标记的头部。就人数注释的头而言,它是最大的人群计数数据集。 此数据集中没有从同一视点拍摄两个图像。数据集包括Part_A和Part_B两个部分,Part_A是从网络上随机爬取的,大多数人头很多,Part_B取自上海大都市的繁忙街道。 我们已经手动注释了图像的两个部分,并将根据请求共享此数据集。

2. Multi-column CNN for Crowd Counting

2.1. Density map based crowd counting

为了通过卷积神经网络(CNN)估计给定图像中的人数,有两种思路。一种是网络,它的输入是image,输出是预测的人数。另一种是输出人群的密度图(例如每平方米有多少人),然后通过积分获得人数。 本文出于以下原因而支持第二种选择:

  1. 密度图可保留更多信息。 与人群总数相比,密度图给出了给定图像中人群的空间分布,这种分布信息在许多应用中很有用。 例如,如果小区域的密度比其他区域的密度高得多,则可能表明那里发生了异常情况。
  2. 在通过CNN学习密度图时,学习到的 filter 更适合于不同大小的head,因此更适合于透视效果显着变化的任意输入。 因此,过滤器在语义上更具意义,因此提高了人群计数的准确性。

2.2. Density map via geometry-adaptive kernels

由于需要对CNN进行训练以从输入图像中估计人群密度图,因此训练数据中给出的密度质量在很大程度上决定了我们方法的性能。首先描述密度图的生成方法。
如果在像素xix_i处有头部,则将其表示为增量函数 δxxiδ( x - x_i )。 因此,带有N个头部标记的图像可以表示为一个函数
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
要将其转换为连续密度函数,我们可以将该函数与高斯核GσG_σ卷积,以使密度为 F(x)=H(x)Gσ(x)F(x)= H(x)* G_σ(x)。然而,这样的函数是假设xix_i是图片上独立样本的前提下,实际上,每个xix_i是3D场景中地面上人群密度的样本,并且由于远景失真,不同样本xix_i的像素对应于场景中不同大小的区域。

因此,为了准确估计人群密度F,我们需要考虑由地平面和像平面之间的单应性引起的失真。不幸的是,对于手头的任务(和数据集),我们通常不知道场景的几何形状。但是,如果我们假设每个头周围的人群分布都比较均匀,则头和它的最近k个邻居之间的平均距离(在图像中)可以合理估计几何失真(由透视效应引起)。

因此,我们应该根据图像中每个人的头部大小来确定散布参数σ。然而,在许多情况下,由于闭塞,几乎不可能准确地获得头部的大小,并且也很难找到头部大小与密度图之间的潜在关系。有趣的是,我们发现头的大小通常与拥挤场景中两个相邻人的中心之间的距离有关(请参见图2)。作为一种折衷,对于那些拥挤场景的密度图,我们根据每个人与邻居的平均距离来自适应地确定每个人的传播参数。

对于所给图片的xix_i,我们将其与最近K个的距离为{d1i,d2i,......,dmi}\{d^i_1,d^i_2,......,d^i_m \},平均距离为
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
因此,与xix_i的像素对应于场景中地面上的一个区域,其半径大约与di\overline{d^i}成正比。因此,为了预测像素xix_i周围的人群密度,我们需要将δ(xxi)δ(x-x_i)与方差δi\delta_idi\overline{d^i}比例做卷积。更准确地说,对于某些参数ββ,密度F应为
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
换句话说,我们将H与每个数据点周围的局部几何形状相适应的密度核(称为几何适应性核)进行卷积。通过实验,发现β=0.3β=0.3得到最好的效果。在图2中,我们在数据集中显示了两个示例图像的密度图。
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

2.3. Multi-column CNN for density map estimation

由于透视失真,图像通常包含大小各异的头部,因此具有相同大小的 filter 不太可能捕获不同比例的人群密度特征。因此,使用具有不同大小的局部 filter 来学习从原始像素到密度图的映射。受多列深度神经网络(MDNN)的启发,我们使用多列CNN(MCNN)来预测密度图。在我们的MCNN中,对于每一列,我们使用不同大小的 filter 来建模不同比例的头相对应的密度图。例如,对于较大的 filter 用于模拟较大头部对应的密度图更为有用。

MCNN的整体结构如图3所示,它包括三个平行的CNN,每个CNN具有不同尺寸的局部filter,为了简化,除了过滤器的大小和数量,我们对所有列使用相同的网络结构(即,conv-pooling-conv-pooling)。Max pooling均采用2×2,**函数使用ReLU。为了降低计算复杂度(要优化的参数数量),对于具有较大过滤器的CNN,我们使用较少的过滤器数量。我们堆叠所有CNN的输出特征图,并将它们映射到密度图。 为了将特征图映射到密度图,我们采用大小为1×1的卷卷积核。
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
然后,使用欧几里得距离来测量估计的密度图和地面实况之间的差异。 损失函数定义如下:
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
注意:

  1. 由于使用了两个Max Pooling,每一列的空间分辨率降低为原来的1/4,因此在训练阶段,在生成密度图之前,我们将每个样本降采样到原来的1/4.
  2. 常规的CNN通常将其输入图像规格化为相同大小。 在这里,我们更喜欢输入图像的原始大小,因为将图像调整为相同大小会在密度图中引入额外的失真,这很难估计。
  3. 除了我们的CNN中的过滤器大小不同这一事实外,我们的MCNN与常规MDNN之间的另一个区别是我们将所有CNN的输出与可学习的权重结合在一起(即1×1过滤器)。 相反,在[8]提出的MDNN中,仅对输出进行平均。

2.4. Optimization of MCNN

损失函数可以通过基于批次的随机梯度下降和反向传播进行优化,这对于训练神经网络是典型的。但是,实际上,由于训练样本的数量非常有限,并且梯度对于深度神经网络的影响消失了,因此同时学习所有参数并不容易。
作者借鉴RBM预训练的思想,通过直接将第四层卷积层的输出映射成密度图,分别对每一列CNN进行预训练。然后使用这些预训练的参数对MCNN的网络参数进行初始化,同时对所有参数进行微调。

2.5. Transfer learning setting

这种用于密度估计的MCNN模型的一个优点是,学习到的filter可以对不同大小的人头进行预测。因此,如果在包含不同大小的头部的大型数据集上训练模型,则可以轻松地将模型适配(或转移)到其他人群的头部具有某些特定大小的数据集。如果目标域仅包含一些训练样本,则可以简单地在MCNN中固定每列中的前几层,并仅微调后几层卷积层。在这种情况下,微调最后几层有两个优点。 首先,通过固定前几层,可以保留在源域中学习的知识,并且通过对后几层进行微调,可以使模型适应目标域。因此,源领域和目标领域的知识都可以集成在一起,并有助于提高准确性。 其次,与微调整个网络相比,微调最后几层大大降低了计算复杂度。

3. Experiments

我们在四个数据集上验证MCNN,三个已有的和一个作者自己的。

3.1. Evaluation metric

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

3.2. Shanghaitech dataset

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
为了增强用于训练MCNN的训练集,我们从每个图像的不同位置裁剪了9个色块,每个色块的大小是原始图像的1/4。对于A部分,由于人群密度通常很高,我们使用几何自适应内核生成密度图,并通过平均计算重叠区域的预测密度。 对于B部分,由于人群相对稀疏,我们在高斯核中使用相同的分布来生成(地面真实)密度图。在我们的实现中,我们首先独立地对MCNN的每一列进行预训练。 然后我们微调整个网络。 图5显示了A部分中的地面真实密度图和图像的估计密度图的示例。
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
本文方法和其他方法的对比如下:
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
The effect of pretraining in MCNN:
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
Comparison of different loss functions:
【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

3.3. The UCF CC 50 dataset

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

3.4. The UCSD dataset

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

3.5. The WorldExpo’10 dataset

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

3.6. Evaluation on transfer learning

【论文笔记】Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

4. Conclusion

这篇论文提出了的MCNN模型,能对任意视角的单张图像进行人数估计,并在常用人群计数数据集上均取得最好的性能。同时该模型可以较为容易迁移到针对另一人群目标域进行应用。