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

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

概要

文章提出了一种根据单张静态图像精确估算人群密度分布和数量的方法。其主要方法是多列卷积神经网络Multi-column Convolutional Neural Network (MCNN),实现从图片到其密度图像的映射。MCNN允许任意大小的输入图像,并通过使用大小各不相同的卷积核,使每一列CNN适应不同的人头大小,以此来实现对任意视角和任意分辨率图像的精确密度估计。另外,作者还收集并标注了一个包含1198张图像和330000个标注点的数据集供训练和测试。

挑战

目前的人群计数算法面临如下问题:

  • 许多现有方法需要使用前景分割,但该技术尚不成熟,导致以此为基础的人群计数方法准确度较低。对于没有视角信息的图像来说,几乎不可能完成精确的前景分割,因此需要尽量避免这一步骤。
  • 在特定场景下人群的密度和分布都差别极大,因此传统的基于检测的方法效果不佳。
  • 由于每张图像中人的大小各不相同,因此需要利用不同尺寸的特征并进行整合,但使用传统方法获取不同尺寸的特征过于困难,所以需要一种能自动提取有效特征的方法。

主要贡献

  • 使用三列卷积核尺寸不同的卷积神经网络,使得习得的模型能适应因拍摄角度和分辨率而产生的不同人头大小。
  • 使用卷积核为1x1的卷积层代替全连接层,这样模型的输入图像就可以是任意大小,避免了变形,并且可以直接得到最终的密度图像。
  • 收集整理了一个新的大规模人群计数数据集Shanghaitech,包含1198张图像和330000个标注点,是目前最大的人群计数数据集。其中的图像一部分取自网络,一部分来自实景拍摄。

基于密度图像的人群计数

使用卷积神经网络做人群计数主要有两种:
- 输入图片,直接输出估算的人数。
- 输入图片,输出人群密度图像,再将密度图累加得到人数。

本文的方法采用第二种方式,因为密度图像包含信息更多,如人群的空间分布信息等,同时也更适合视角各不相同的任意输入图像。

生成密度图

若有一个人头位于像素xi,用狄拉克函数表示,则标记有N个人头的整张图像可表示为:

通过高斯核函数将其转换成连续的密度函数:

此方法假设xi是图像平面的独立样本,但实际由于视角的不同,xi可能代表了场景中完全不同的大小范围。

若假设在每个人头点周围人群是均匀分布的,则该人头点与他的k个近邻的平均距离可以合理的估算由于视角引起的几何偏差。因此需引入基于人头大小的分布参数σ。作者发现在密集人群中人头大小通常和最近两个人间的距离有关,因此提出基于与邻居的平均距离决定高斯分布的参数,即几何适应的核。

由此密度函数可表示为:

其中β为常数,作者实验发现,β等于0.3时结果最佳。

多列卷积神经网络MCNN

由于视角的差异,图像中的人头大小各不相同,因此固定大小的卷积核并不适用。作者受多列深度神经网络MDNN的启发提出了多列卷积神经网络MCNN,用不同大小的卷积核来对应不同大小的人头。

网络包含三列卷积神经网络,其卷积核大小和数量各不相同,但网络结构基本一致。池化层为2x2的最大池化,激活函数为ReLU。另外为减少计算量,大卷积核对应的列对应的卷积核数量较少。最后各列输出的结果合并到一起,并使用1x1的卷积核转换成最终的密度图像。

损失函数使用了生成的密度图和真实密度图之间的欧氏距离:

训练

实现的注意点:

  • 网络中使用了两次池化,因此输出图像为原图的1/4尺寸,因此需要将训练图像缩小到1/4后再生成用于训练的密度图。
  • 由于网络为全卷积结构,网络的输入图像不需要固定尺寸,因此不需要对图像做resize,避免变形。
  • 由于实际训练中可能存在训练样本不足、梯度消失等问题,直接训练整个网络并不容易,因此可以先对每一列单独进行预训练,最后在合并在一起进行调整。
  • 若要把一个在大训练集上训练好的MCNN应用到新的较小的数据集,可以将前几层卷积层的参数固定,只训练后几层,这样可以节省计算量同时保留原网络学习到的特征提取能力。

测试

对人群计数问题的评估标准为绝对平均误差和平方平均误差:

对于ShanghaiTech数据集,作者先进行了数据增强,对每一张训练图片取了9张图像,大小均为原图的1/4,用于训练。其中人数较多的Part A使用了几何适应的核来生成密度图,而人群较稀疏的Part B则使用固定的高斯核。训练时首先预训练每一列,再对整个网络进行训练。

每一列单独训练的效果以及整个网路直接训练和进行预训练后的效果对比如下:

最终在ShanghaiTech数据集下的结果以及与之前方法的比较如下:

另外在UCF_CC_50数据集、UCSD数据集和WorldExpo’10数据集下的结果分别为:

迁移能力

为测试模型的泛化能力,作者尝试将在ShanghaiTech Part A数据集训练的模型迁移到UCF_CC_50数据集上,分别做了4种测试:直接在UCF_CC_50上训练、直接使用Part A训练的模型、对Part A训练模型整体调整训练以及只对最后两层进行调整训练。其结果如下:

实验结果表明只对最后两层做调整训练效果最好,作者认为其原因是UCF_CC_50数据集训练样本过少,只训练最后几层可以使模型再保留原有特征提取能力的同时适应新的数据集,而将整个网络一起调整则会导致网络整体偏向新数据集,由于其训练样本不足而导致精度不高。

你可能感兴趣的:(论文笔记)