MCNN论文阅读笔记

文章介绍了一种基于多列卷积神经网络(MCNN)的人群计数方法,能处理任意视角和密集度的静止图像。MCNN通过学习不同尺度的特征适应人头大小变化,并利用几何自适应核生成连续的密度图。文章还提及了Perspectivemap的概念和在数据集ShanghaiTech的创建,以评估模型在多场景下的性能。
摘要由CSDN通过智能技术生成

abstract

旨在提出一种可以从句有任意密度人群和角度的单张图像准确估计人群数量的方法。提出了一种简单的多列卷积神经网络(MCNN),将图像映射到了它的人群密度图。MCNN允许输入图像是任意大小和分辨率。

通过利用不同大小的滤波器有不同大小感受野的特点,每一列的CNN学习到的特征都能在不同的视野上适应对人头大小的变化。

真实密度图的准确计算依赖于几何自适应核(geometry-adaptive kernels),它不需要知道输入图像的透视图(perspective map)

perspective map 是一种感知人头尺寸变化的方法。

perspective map的定义是实际中1m在图像中多少像素,是像素距离/实际距离。

针对如何产生perspective map的ground truth

  1. 可见行人身体的

    img

    如图所示,


    y_h=\frac{f(C-H)}{z_1},y_f=\frac{fC}{z_1} \\h=y_f-y_h=\frac{fH}{z_1}\\ h=\frac{H}{C-H}y_h\\p=\frac{h}{H}=\frac{1}{C-H}y_h
     

     

    假设实际人的平均高度为1.75m, 我们可以在图中采样几个可以看到的人的像素身高h,然后Yh也是像素距离,可以从图中读出,这样就可以反推C,然后有了C,有了H=1.75,就可以计算不同Yh处的persepctive值pg了

  2. 对于看不到行人身体的,

    像ShanghaiTechA这样的密集的dataset,图片上很难采样到body,去像上面一样推算C,来获得整个perspective map,但是我们可以根据KNN的最近邻采样方法,获得平均的一个人头尺寸,然后采样不同Yh处的人头尺寸之后,本文是采用如下的插值函数去拟合产生其他位置的perspective值的:

    img

    a,b,c是要拟合的参数,但是对于人头尺寸实际值H取多少,并没有说

related work

早期的方法是,在拥有两张连续帧的图片,或者视频序列这样数据的基础之上,通过提升行人的羊毛核运动特征,建立检测式的框架来估计。局限性:对于那些很密集的密封的集群下,检测器的效果往往会大打折扣,因而影响最终准确率。

在视频人群计数中,人们提出了追踪特征的集群轨迹。例如,[24]已经使用了高度平行版本的KLT追踪器和集群聚类方法来估算人群。[3]提出通过追踪单张图像的特征,进而从概率的方法上,通过集群分组的方法展现运动中的独立个体。然而,追踪型的方法在静止的图片上的密集人群检测依然没有奏效。

conrtibution

目的:在相机拍摄下的,任意视角和人群密集数的静止图片中预测人群数量,并达到一定的准确度。

方法:找到一个能够自动学习有效特征的方法,卷积神经网络。

多列卷积神经网络:每一列卷积网络都能够学习不同尺度的特征。给MCNN输入一张图片,它将输出一个人群密度图,该图的积分就是预测的人群数量。

贡献如下:

  1. 采用多列卷积网络:散列卷积网络分别对应三个不同感受野的特征(大,中,小),即使因图片分辨率或者拍摄视角而导致的不同大小的人或人头,每一列卷积网络依然能够适应

  2. 用1x1卷积替换了全连接层,这样输入的图片可以是任意尺寸的而不需要resize导致失真。我们可以通过输出的密度图得到预测结果。

  3. 使用了一个新的数据集用于评估,由于视角差异(UCSD,WorldExpo'10),拥挤程度(UCSD),数据集的尺度(UCSD,UCF_CC_50)等差异,现有的数据集并不能够完全检验模型在多场景模型下的能力。因此我们推出了一个新的大型数据集—ShangHaiTech,一个拥有1200张图像,330000准确标注的人头的。据我们所知,就人头数量而言,ShangHaiTech是目前最大的数据集。在这个数据集中,你不可能找到两张相同视角下的图片。数据集分为两部分Part_A和Part_B,Part_A是从网上随机爬取的图片集,其中大部分都有很密集的人头数。Part_B是从上海的大城市地区的街道获取,并且每张图片都已经被标注,我们会把此数据集对外开放。

MCNN model

由于密度图可以表示更加多样的信息,并且密度图通过积分就可以获取人头数,所以决定输入一张图片,输出密度图。

几何自适应高斯核生成密度图

用训练数据生成密度图H(x)=\sum^n_{i=0}{\delta(x-x_i)}为了使得H(x)​能够连续,我们对其进行一个高斯核卷积

F(x)=H(x)*G_\sigma(x)

如果直接拿标注的图片去训练,每个像素值不是0就是 1 ,就好比蛋糕全部是你一个人吃而周围的人根本吃不到,未免也太极端了吧?而且这样模型学习也会更加困难。 所以,我们使用一种方法(其实这个方法就是高斯卷积核函数),它能够把像素值为 1 的地方稍微“分点”给其他所有的像素值,每个像素点都有,只是大家多多少少的问题。 注意!是会把这个“1”分给所有的像素,如果你的图片大小为[1024,1024]大小的分辨率,那么“1”就会被分给1024x1024个像素!

然而这样分的话人头大小也会对结果产生影响,距离镜头近的分的多,所以恶魔应该一句图片中每个人头大小的不同,来选择拓展参数\sigma,我们发现人头大小往往核周边相邻的两个人头有关,我们提出和了数据自适应的方式,,也就是通过某个人头核他周边的人头平均距离来决定拓展参数。

对于图片中每个给定的人x_i,我们 假定 他的k近邻距离为[d_{i1},d_{i12},d_{i3}...,d_{im}],那么,x_i的平均距离就是\overline{d}^i=\frac{1}{m}\sum^m_{i=1}d_i。因此与x_i相关联的像素会对应一片区域,大致是一个以\overline{d}^i为半径的园,高斯卷积核的变量参数\sigma就用\overline{d}^i代替,

F(x)=\sum^N_1\sigma(x-x_i)*G_{\sigma i}(x),with \,\sigma i=\beta\overline{d}^i

上述方法生成密度图,称为几何自适应高斯核

\beta取0.3效果最好,\beta就是用来表征不同距离高斯分布所分数据的差异性

用于训练密度图生成的多列卷积神经网络

使用不同感受野的卷积核从密度图中学习各自的局部特征。

MCNN的每一列都配置了不同大小的核来适应不同尺度下的特征。

img

激活函数方面采用2x2的最大池化和ReLU激活函数的效果会比较好

为了减少参数量,更大的卷积核提取的特征图的数量更少。然后我们把3列提取的特征图在某一维度上拼凑起来,最后通过1x1卷积把这些特征图融合,并映射为预测密度图。

通过欧氏距离来评估预测密度图和真实密度图的差异。损失函数
L(\Theta)=\frac{1}{2N}\sum^N_{i=1}||F(X_i;\Theta)-F_i||^2_2

\\其中\Theta是可学习的参数,N是图片数量,X_i是输入的图片,F(X_i;\Theta)是预测密度图,F_i是图片真实密度图

MCNN Optimization

随机梯度下降法和反向传播

先把三列特征提取网络分开单独训练生成密度图,之后再让他们三列一起生成特征,融合后再次预测密度图,这样就能只需要同步微调参数就可以达到不错的效果。

泛化性

MCNN的优势在于他能够感受到不同尺寸的人头来生成密度图。因此,如果它能够先在一个本身人头的尺寸差异就很大的数据集上训练,那么之后它肯定也能很轻松自如地去适应别的人头大小差异并不是那么大的数据集。

如果某新的个领域下的训练样本很少,我们就可以固定MCNN每列前面的几个卷积层,只要微调最后的卷积层即可。

参考文献:

[1] 人群计数论文翻译(1)MCNN - 知乎 (zhihu.com)

[2] 原文链接[PDF] Single-Image Crowd Counting via Multi-Column Convolutional Neural Network | Semantic Scholar

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值