CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

Introduction

人群计数所面临的挑战之一是由视角畸变导致的外观和尺度变化。许多方法都将尺度信息合并到学习过程中。早期的方法是通过多源或者手工设计提取特征,但是这些方法在高密度人群中是无效的,而且结果不是最优的。目前基于CNN的方法开始应用在人群计数上。考虑到尺度问题是影响准确率的一个因素,有些基于CNN的方法通过多列网络或多分辨率网络解决这个问题。虽然这些方法对于尺度变化有一定的鲁棒性,但是不能作为一个通用的学习模型。

本论文的目的是将一个高级先验与网络合并,学习出一个满足数据集中各种密度等级的模型。高级先验先根据图中人的数量分为不同的带标签的组。利用标签,这个高级先验能大致估计整个图片中的人数,而不受尺度变化的影响,从而使网络能学到更多的判别全局特征。利用高级先验和CNN网络共同进行密度图的估计


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

这两个任务(人群密度估计和高级先验)共享一个卷积层,然后分为两个网络。将高阶先验学习到的全局特征与第二组卷积层获得的特征图连接起来,再由一组分阶条纹卷积层进一步处理,得到高分辨率密度图。

Related work

传统的人群计数依赖于手工提取低级特征,在这些特征和密度或数量间建立映射,通过不同的回归方法得出结果。Loy将这些方法分为三类:基于探测的方法、基于回归的方法和基于密度估计的方法。
基于探测的方法主要使用基于滑动窗口的探测算法计算图片中物体实例的数量,不适用于高密度人群和杂乱背景下。为了克服这些问题,研究人员试图通过回归来计算,在回归中他们学习了从局部图像中提取的特征与数量之间的映射关系。Idree利用相似的方法,融合了多个来源计数,同时还提出了含有50张图片,64000个人的数据集UCF_CC_50。
检测和回归方法在对全局计数进行回归时,忽略了图像中存在的关键空间的信息。为了加入空间信息,Lempitsky在局部特征和密度图之间建立了线性映射,Pham通过随机森林框架建立了非线性映射。Wang和Zou在两个不同的特征空间中计算了局部图像及其密度图之间的关系。最近,Xu和Qiu提出利用更加丰富和广泛的特征集进行人群密度估计。
最近,由于CNN在计算机视觉任务上的成功应用,CNN也开始应用在计数上。Walach将CNN和分层训练结合。与现有的局部的估计方法相比,Shang等人提出了一种使用CNNs的端到端估计方法,对整体尺寸的输入图像同时学习局部和全局计数。Zhang等人发现目前的方法只适用单尺度问题,于是提出了多列结构提取不同尺度的特征,另外,他们也提出了大尺度带注释的数据集(ShanghaiTech dataset)。OnoroRubio和Lopez-Sastre提出了HydraCNN解决尺度问题。Boominathan等人利用深层和浅层网络结合,并且通过对多尺度图像局部采样进行数据扩充的方法解决尺度问题。
Zhang和Onoro证明,与其他基于CNN的方法相比,设计对尺度变化具有鲁棒性的网络对于获得更好的性能至关重要。但是这些方法是通过选择好的尺度建立的架构,因此不通用。另外,这些最近的方法只能得出密度图或者数量的一项。在估计密度图时,由于池化层的存在,减少了输出密度图的分辨率,这将导致重要细节的丢失,尤其是在包含大尺度变化的图像中。考虑到这些缺点,我们建立了一个灵活的端对端的CNN,共同学习高级先验和密度估计。高级先验能使网络学习全局相关判别特征,这对大尺度和外观变化图像密度估计有利。

Proposed method

受到相关多任务卷积网络成功的启发,我们提出了学习两个相关的子任务:高级先验和密度图估计。网络如下所示:


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

这个网络输入任务尺寸的图像,输出人群密度图。网络包含两个部分,第一部分学习高级先验,第二部分估计密度图。第一部分包含一组卷积层,金字塔形的池化层和全连接层。第二部分由一组卷积层组成,然后是小步长卷积层,用于对前一层的输出进行向上采样,以弥补早期池化层造成的细节损失。

共享卷积层部分

初始的共享卷积层包括两个卷积层,**函数使PReLU。第一个卷积层是9×9,16通道,第二个卷积层是7×7,32通道。

高级先验部分

将人群分为几组比起直接对整个图像进行分类或回归简单,因为不需要太多的训练数据。因此,我们将人群计数量化为10组,并学习了一个人群计数组分类器,该分类器还执行将高层先验合并到网络中的任务。先验部分接受之前得到的特征图作为输入。这个部分包含4个卷积层,每个卷积层之后都用PReLU作为**函数。开始两个卷积层后有步长为2的最大池化层。最后包含3个全连接层,**函数仍然是PReLU,神经元数量分别为512、256、10。为了能够使用任意大小的图像进行训练,使用空间金字塔池(SPP),因为它消除了包含完全连接层的深度网络的固定大小约束。SPP层将卷积层的特征集合起来,产生固定大小的输出,并可以将其提供给完全连接的层。交叉熵误差作为这一阶段的损失层。

密度估计

这部分网络仍然包含4个卷积层,每层之后都有PReLU函数作为**函数,开始两层后有步长为2的最大池化层。第一个卷积层为7×7,20个通道,第二个卷积层为5×5,40个通道,第三个为5×5,20个通道,第四层为5×5,10个通道。这个网络的输出与高级先验的输出通过2个卷积层和2个小步长卷积层结合起来。头两个卷积层是3×3,24通道和32通道,小步长卷积层是16通道和18通道。这些小步长卷积层除了能整合先验外,还可以将特征图提升到原始输入尺寸,从而恢复之前最大池化层丢失的细节。这些图层的使用使CNN输出的上采样率提高了4倍,从而使我们能够在全分辨率密度图上回归。标准欧几里得损耗作为损失层。

Objective function

高级先验部分的交叉熵损失函数为:


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

N表示训练例子数量,theta是一组网络参数,Xi是第i个训练例子,FC(Xi,Theta)表示输出的分类,yi是真值分类。M是类别的数量。
密度估计损失函数为:


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

Fd是估计的密度图,Di是真实的密度图,Ci是高级先验阶段最后一个卷积层得出的特征图。则总的损失函数为:


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

这种损失函数不同于传统的多任务学习,因为最后一阶段的损失项取决于前一阶段的输出。

Training and implementation details

为了创建数据集,先在原始图像上随机找100个位置,每个位置裁剪出1/4尺寸的局部图像。然后用水平翻转和加入噪声的方法创建另外200个局部图像。需要说明的是,裁剪只是为了数据扩充,数据输入可以是任意尺寸。真值密度图的计算用了一个简单的方法:


CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting

Di对应第i个训练patch,通过对每个人位置xg为中心进行2维高斯核求和得到。sigma表示2维高斯核的尺度参数(标准差),S表示所有人所在位置点的集合。