【论文笔记】Switching Convolutional Neural Network for Crowd Counting

【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第1张图片
论文贡献:

  • 提出了一种新颖的通用CNN架构Switch-CNN,用于预测人群场景的人群密度。
  • Switch-CNN将人群patches从人群场景映射到独立的CNN回归器,以最大程度地减少计数误差并利用场景内的密度变化来提高密度定位。
  • 在主要人群计数数据集上,包括ShanghaiTech数据集,UCF CC 50数据集和WorldExpo’10数据集上,我们的方法都表现良好。

Approach

在本文中,我们考虑switching CNN架构(switch -CNN),该架构将人群场景中的网格补丁传递给基于switch分类器的独立CNN回归器。与在多列CNN网络中一样,选择具有不同接收场和视场的独立CNN回归器,以增强对大型变化建模的能力。如果一个特定的CNN回归器在一个人群场景patch上的表现最好,那么这个回归器就会在这个patch上训练一个特定的CNN回归器。switch分类器与多个CNN回归器交替训练,正确地将一个patch传递给一个特定的回归器。该模型用于人群分析的显著特点是:(1)对大c尺度变化进行建模的能力(2)在人群场景中利用局部密度变化的能力。利用局部密度变化的能力很重要,因为在多列网络中用于融合特征的加权平均技术是全局的。

1. Switch-CNN

我们提出的Switch-CNN结构包含三个结构不同的CNN回归器和一个为输入人群场景patch选择最优回归器的switch分类器,如图2所示。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第2张图片
输入图片被分为9个不重叠的patches,对于这样的图像划分,可以假设人群场景的一个给定patch中的密度、外观等人群特征是一致的。将patch作为输入输入到网络中,可以帮助CNN回归器独立地回归图像的不同区域,该回归器最适合于patch中的人群的密度、背景、尺度和视角变化等属性。我们使用[19]中的回归器R1到R3在switc -CNN中预测人群的密度。这些CNN回归有不同的接受域,可以捕捉不同规模的人。R1-R3的结构是类似的,四个卷积层和两个池化层。R1有一个大的9×9的初始过滤器大小,它可以在场景中捕获高层特征,如人脸、城市立面等。在R2和R3中,初始滤波器大小分别为7×7和5×5,以较低的尺度捕获人群,检测斑点状特征。

patch使用一个switch被传入一个回归器里。这个switch包括一个switch分类器和一个switch层。switch分类器推断patch要传递到的回归器的label。switch layer获取从switch分类器推断出的label,并将其传递给正确的回归器。例如,在图2中,switch分类器将用红色突出显示的patch传递到R3中,这个patch有比较高的人群密度。Switch将其传递给接受域较小的R3回归器:非常适合检测具有高人群密度斑块特征。我们使用VGG16[11]网络作为switch分类器进行3路分类。除去VGG16最后的全连接层,我们对Conv5特征使用全局平均池(GAP)来去除空间信息和聚集判别特征。GAP之后是一个较小的全连通层和3类softmax分类器,对应于Switch-CNN中的三个回归网络。

Ground Truth我们使用几何自适应高斯核来生成ground truth密度图。密度图减轻了CNN回归的难度,因为预测头部标注的准确位置的任务简化为预测一个粗略的位置。在上面的密度图中,高斯分布是固定的。然而,当人群密度变化较大时,由固定扩散高斯分布产生的密度图是不合适的。我们使用几何自适应核[19]来改变高斯分布的参数依赖于当地的人群密度。它根据距离k最近的邻近头部标注的平均距离来设置高斯分布。这使得在人群场景中,稠密人群的高斯模糊度较低,稀疏密度区域的高斯模糊度较高。在我们的实验中,我们同时使用这两种方法来生成ground truth密度图。采用几何自适应核的方法,对人群密集、场景间计数变化大的数据集生成地面真实密度图。利用固定扩散高斯方法生成的密度图对具有稀疏人群的数据集进行训练。Switch-CNN的训练分为三个阶段,即sec2 - 5中描述的pretraining, differential training and coupled training(预训练、差分训练和耦合训练)。

2. Pretraining

分别对三个CNN回归器R1-R3进行预处理,得到回归密度图。预训练有助于学习良好的初始特征,从而改进以后的细化阶段。每个CNN回归器都用欧式距离作为损失进行训练,使用SGD优化器。
在这里插入图片描述

3. Differential Training

在differential training阶段,每一张训练patch都经过三个回归器得到三个计数结果,然后选取和真实count误差最小的一个回归器再训练一次,反向传播更新对应回归器的参数。这一个过程使得所有的训练patch根据再每个回归器上的预测效果被分为三组,每组由一个网络进行拟合,使得测试图片在分类正确的情况下可以由更符合图片特征的回归器计算出更精确的密度图像。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第3张图片

4. Switch Training

接下来的步骤是训练switch分类器,switch是一个基于VGG16的三分类分类器,依据differential training阶段得到的分类结果进行训练,使得switch分类器能够将更多的图片patch分给正确的回归器。在这个过程中可能会导致某个分组的patch数量较少,所以需要对数量较少的分组进行随机取样扩充训练样本。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第4张图片

5. Coupled Training

为了提升训练效果,differential training和训练分类器的过程交替进行,也就是coupled traing。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第5张图片
下面是整体的训练过程。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第6张图片

Experiments

【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第7张图片

Analysis

最后是作者的一些分析,首先作者做了一个消融实验来证明了选择R1-R3三个回归器的效果是最好的。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第8张图片
下图是三个回归器选择出的图片patch,发现从R1到R3选择出的patch的人群密度是由小到大的。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第9张图片
最后作者用手工聚类的方法和differential training方法进行了对比。这个表里面,第一行是作者根据patch的人数手工聚类为三组数据之后分别进行训练的结果,第二行是根据人头之间的距离手工聚类之后的结果,最后证明了还是switch CNN的方式效果最好。
【论文笔记】Switching Convolutional Neural Network for Crowd Counting_第10张图片

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