论文笔记:Switching Convolutional Neural Network for Crowd Counting

Switching Convolutional Neural Network for Crowd Counting

概要

文章提出了一种人群计数模型,实现了从密集人群图像到其密度分布的映射。密集人群计数问题的难点包括人头互相遮盖、人群与背景相似度高以及图像拍摄视角各不相同等,此前效果较好的人群计数网络使用了多尺寸CNN、循环网络或多列CNN特征融合的方法来处理这些问题。作者提出了选择卷积神经网络switching convolutional neural network(Switch-CNN)来提升人群计数的精确度,首先由几个卷积核大小不同的CNN作为密度图预测的回归器,然后再由一个经训练的选择分类器来对于每一张输入图像选取最优的CNN回归器,将其结果作为最终结果。

网络结构

Switch-CNN包含三个结构互不相同的CNN回归器和一个选择最优回归器的分类器。对于每一张输入图片,首先将其裁剪为互不重叠的9份,每份为原图的1/3长宽。其目的是为了使输入的小图片可以视为拥有单一的密度、规模和视角信息,作为一个选择回归器的最小单位。

CNN回归器选择了CVPR2016《Single-Image Crowd Counting via Multi-Column Convolutional Neural Network》中的网络结构,每一列都包括4个卷积层和2个池化层,三列的卷积核大小各不相同。

分类器则使用了基于VGG-16的结构,移除了最后的全连接层,代之以一个全局平均池化层global average pool(GAP)、两层较小的全连接层和一个softmax分类层。softmax层的结果即需要选择的回归器。

真实密度图

数据集中标注的图像均以一个个点的形式表示,因此需要一种方法来将标注点转化为密度图像。作者使用了上文提到的CVPR2016论文中提出的几何适应核的方法,将高斯变换的参数设定为与标注点到周围k个近邻的平均距离相关。这种方法可以较好的模拟视角信息。对于密度较高的人群,作者使用了几何适应的高斯核,而对于较稀疏人群则使用固定的高斯变换。

训练

Switch-CNN的训练分为三个步骤:预训练(pretraining)、差异训练(differencial training)和集成训练(coupled training)。在预训练阶段,三个CNN回归器首先单独进行训练,损失函数为真实密度图像和预测图像的欧几里得距离:

随后是差异训练阶段,对每一张训练图片经过训练的三个回归器得到的结果进行评估,选取总人数误差最小的回归器单独再对该图片进行一次训练。这一过程的效果是使得所有训练图片被分为了三组,每组均由一个网络进行拟合,使得测试图片在分类正确的情况下可以由更符合图片特征的回归器计算出更精确的密度图像。

接下来的步骤是训练分类器。分类器是一个基于VGG16的三类分类器,依据差异训练阶段得到的分类结果进行训练,以使得分类器能将更多的图片分给正确的回归器。为确保各类之间样本的平衡,需要对数量较少的类进行随机取样扩充训练样本。

为提升训练效果,差异训练和训练分类器的过程会交替进行,这一步骤作者称为集成训练。整个训练过程如下:

测试

评估标准是总人数的绝对平均误差和平方平均误差:

作者分别对ShanghaiTech数据集、UCF_CC_50数据集、UCSD数据集和WorldExpo’10数据集进行了测试,其结果分别为:

为研究不同的回归器数量对测试效果的影响,作者尝试了单独使用三个回归器以及使用两个回归器,并将其在ShanghaiTech Part A上的结果作了对比:

实验中三个不同的分类器分别对应的图像类型:

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