人群密度估计向:Towards perspective-free object counting with deep learning

Abstract

主要目的,解决图片中目标实例计数问题。主要有两个贡献,第一,提出了一种全新的CNN,叫做Counting CNN(CCNN)。CCNN是利用回归进行建模,网络通过学习将image patches映射为相应的密度图;第二,提出了一个scale-ware的counting model,叫Hydra CNN,可以在不提供任何图片的几何信息的情况下,估计出不同拥挤情景下的密度图。Hydra CNN学习一系列不同scale的非线性回归模型,这些模型通过使用从不同的scale上提取的pyramid of image patches进行最终密度图的估计。

 

1. Introduction

 

2. Related Work

计数算法主要可以分为三类,定位计数,聚类计数,回归计数。

作者将主要关注点放在了回归计数上,因为他们的方法属于这一类。前人的工作中最值得注意的是,Lempitsky et al.使用的一种通过学习一种线性映射,将图片的局部特征映射到密度图的方法。而作者提到自己的方法不同于其他方法之处主要是应用了深度学习。

除了作者的方法之外,还有另外两种方法是基于深度学习的。第一个是multi-column CNN(MCNN),它的思想主要是通过将不同大小的滤波器生成的特征图进行叠加,将它们结合在一起生成最后的对计数结果的预测。另外一个是Switching CNN,这个网络需要通过交替训练进行,并且其中使用了两种不同的损失函数,除此之外,这种方法最后生成的并非是密度估计,它是先通过生成特征,进行岭回归之后才生成密度估计的。

在这两种方法的衬托下,作者提出自己的方法优势在于。网络结构之间没有conincide;不需要使用两种损失函数以及额外的回归。

 

3. Deep learning to count objects

3.1 Counting objects model

 

I代表某张图片,(图片中的所有目标都用点进行了标记)等式左边D_I为真实的密度图,A_I为图片I中标记出的二维点,N代表二元标准高斯函数,其中均值为\mu,协方差矩阵为\sigma。这一等式表示密度定义为中心位于每一标记点上的高斯函数的总和。

图片中所有object的数量N_I就可以表示为,整张图片上对D_I求积分。

基于这一计数模型的定义,我们的目标就是设计出一个深度学习框架来学习一个非线性回归函数R,R将P(image patch)映射为密度图估计D_pred^(P)。\omega代表CNN中的所有参数。

对于任意P属于R(h,w,c),其中h,w,c分别代表patch的宽度、高度以及通道数。而对于密度估计D_pred^(P),它则属于R(h',w'),其中h',w'分别代表估计图的宽和高。

因此给定一张unseen图片,模型先从中密集地提取出image patches来,对他们生成相应的密度图,最后将它们汇总成原图对应的密度图。

3.2 The counting CNN

 

人群密度估计向:Towards perspective-free object counting with deep learning_第1张图片

网络结构如上图所示,其中,conv2以及conv3后面分别跟了两个kernel_size为2 x 2的max_pooling层。正如在Eq(3)中所显示的,我们要处理的是一个image patch映射到density map的一个回归问题。因此作者将conv6这一层连接到了一个欧氏距离回归损失。

人群密度估计向:Towards perspective-free object counting with deep learning_第2张图片

选择的框架为Caffe,优化方法选择的是SGD。

那么在预测阶段又发生了什么呢?

给定一张测试图片,我们先从图片中密集地提取出image patches来。我们将这些image patches scale到固定的尺寸,即72 x 72,然后输入到CCNN中去,CCNN会为每一个image patch生成对应的密度图。注意到由于存在连个max_pooling层,输出的密度图将会是原始的image patch的四分之一大小,即18 x 18。因此为了后续输出整张测试图片的密度图,需要将预测得到的密度图进行rescale。需要注意的是,进行rescale得到的密度图的计数并不一定会等于进行rescale前的密度图的计数。因此我们需要对其进行标准化,

人群密度估计向:Towards perspective-free object counting with deep learning_第3张图片

预测的最后一步就是将所有预测得到的密度图进行结合。作者采取的方法是将得到的密度图简单地汇总称为测试图的唯一的密度估计。注意到之前对image patch进行抽取的方法是密集地进行的,所以汇总时可能出现重叠的情况,所以每一个最终的密度估计的位置都需要用它对应的patch的数量进行标准化。

作者将自己的方法同Crowd CNN进行对比。Crowd CNN中用了fc layer,而CCNN中用的是1x1的conv layers,比如conv4, conv5, conv6,这就相应地加快了前向传播的速度。Crowd CNN中使用了两种损失函数,学习策略更为复杂。在优化阶段,需要交替地对两种损失进行优化。第三,Crowd CNN最终是通过使用岭回归得到了密度图的估计,相比较起来,CCNN模型结构更为紧凑。

3.3 The Hydra CNN

在计数回归模型的一个typical pipeline中,输入特征的某种几何校正,本应同样可以返回正确的结果。但实际上,一张图片视觉上的扭曲,回导致从同一目标上提取的特征在在不同深度上的值大相径庭。因此这时,如果只使用单一回归方程,模型肯定会出错。

Hydra CNN是一个不使用任何先前几何校正信息的,但又具有scale-aware特性的结构。它是一个非线性的回归映射,可以同时将不同scale的信息结合,进行密度估计。这样看来Hydra CNN的泛化性能应该很好。

人群密度估计向:Towards perspective-free object counting with deep learning_第4张图片

Hydra CNN有好几个head,一个body。每一个head负责学习某一特定scale s_i大小的image patch的representation。随后将头部的输出值,即,一系列特征进行汇总输入到body中去,body指的是那些fc layer。head的结构并不一定要完全相同。作者在Hydra CNN中用的head为,除去conv6的CCNN。随后的body中先是两个fc layer,紧跟其后的是ReLU和dropout layer。最后是一个FC8,它的输出就是最终的密度图。

你可能感兴趣的:(算法,NN)