文章Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
介绍:
本文旨在开发一种方法,具有任意人群密度和仁义视角的单个图像精度估计人群数量。提出了一种MCNN的方法,输入的图像任意大小和任意分辨率,通过不同尺寸的感受野的滤波器,由每列cnn学习的特征适应于由于透视效果和图像分辨率引起的人/头部尺寸的变化,
本文解决的问题:
前景分割很难,人群遮挡严重,图像人的多少不太固定。
前景分割是当前大多数工作中不可缺少的部分。 然而,前景分割本身就是一项具有挑战性的任务,不准确的分割将对最终的计数产生不可逆转的不利影响。 在我们的任务中,图像的视点可以是任意的。 如果没有关于场景几何或运动的信息,就几乎不可能从背景中准确地分割出人群。 因此,我们必须估计人群的数量,而不是首先分割前景
在我们的任务(或数据集)中,人群的密度和分布发生了显著的变化,并且通常在每幅图像中对大多数人都有巨大的遮挡。 因此,传统的基于检测的方法不能很好地处理这些图像和场景
由于图像中人的尺度可能有很大的变化,我们需要一起使用不同尺度上的特征,以便准确地估计不同图像的人群数量。 由于我们没有被跟踪的特征,并且很难为所有不同的尺度手工制作特征,所以我们不得不求助
本文的主要贡献:
- 我们在此采用多列架构的原因是相当自然的:三列对应于具有不同大小(大、中、小)的接收场的滤波器,使得每个列CNN学习的特征能够适应(因此整个网络对)由于透视效果或跨不同图像分辨率而引起的人/头大小的大变化(因此是鲁棒的)
- 在MCNN中,我们用滤波器尺寸为1×1的卷积层代替完全连接层。 因此,我们的模型的输入图像可以是任意大小的,以避免失真。 网络的直接输出是对人群密度的估计,我们从人群密度中得出总人数
- 我们收集了一个新的人群评价数据(上海科技大学那个数据集)
基于密度图的人群计:
存在两种方法: 一个是网络,其输入是图像,输出是估计的人数。 另一种方法是输出人群密度图(比如每平方米有多少人),然后通过积分得到人口数。 在本文中,我们支持第二种选择,原因如下
- 密度图保留了更多的信息。 相对于人群总数,密度图给出了人群在给定图像中的空间分布,这种分布信息在许多应用中是有用的。 例如,如果一个小区域的密度比其他区域的密度高得多,就可能指示那里发生了异常
- 在通过CNN学习密度图时,所学习的滤波器更适合于不同尺寸的人头,因此更适合于透视效果显著变化的任意输入。 因此,这些过滤器更具有语义意义,从而提高了人群计数的准确性
基于几何自适应核的密度映:
由于需要对CNN进行训练来估计输入图像中的人群密度图,训练数据中给出的密度质量在很大程度上决定了该方法的性能。 我们首先描述如何将带有标签的人的头部的图像转换为人群密度的地图
如果像素xi处有一个头,我们将其表示为δ函数Δ(x−xi)。 因此,标有N个头的图像可以表示为函数为:
为了将其转换成连续的密度函数,我们可以用高斯核σ卷积该函数,使得密度为f(x)=h(x)σ(x)。因此,我们应该根据图像中每个人的头部大小来确定扩展参数σ。在实际应用中。几乎不可能准确地得到头部的大小。我们发现在拥挤的场景中,头部的大小通常与两个相邻的人的中心之间的距离有关。对于那些拥挤场景的密度图,我们建议根据每个人到它的平均距离自适应地确定每个人的扩展参数。
密度图估计的多列CNN
由于透视失真,图像通常包含不同大小的头部,因此具有相同大小的滤波器不太可能捕获不同尺度下的人群密度特征。 因此,使用具有不同大小的滤波器来学习从原始像素到密度图的映射是更自然的。 在多列深度神经网络(multi-column deep neural networks,mdnns)的基础上,本文提出了一种多列cnn(multi-column cnn,mcnn)学习算法目标密度图。 在我们的MCNN中,对于每一列,我们使用不同大小的过滤器来建模对应于不同尺度的头部的密度图。
作者采用优化欧式损失的方式让网络输出的密度图回归到标准的密度图,损失函数如下式: