Switching convolutional neural network for crowd counting

  • 说明
  • 概括
  • 一、Switch-CNN简介
  • 二、CrowdNet[2]和MCNN[3]
  • 三、方法
  • 四、Switch-CNN
  • 五、训练
  • 参考文献

说明

本文是对以下这篇文章的总结及部分翻译。
Sam D B, Surya S, Babu R V. Switching convolutional neural network for crowd counting[C]//CVPR. IEEE, 2017: 4031-4039.

概括

Sam等人提出切换卷积神经网络(switching convolutional neural network),利用图像中人群密度的变化来提高预测人群数量的准确性和定位。

基于训练期间建立的 CNN 的人群计数预测质量,来自人群场景中网格的补丁被传送到独立的 CNN 回归器。独立的 CNN 回归器具有不同感受野,并且训练开关分类器以将人群场景补丁传送到最佳 CNN 回归器。

一、Switch-CNN简介

Switch-CNN利用图像中人群密度的变化来提高预测人群数量的质量和定位。独立的CNN人群密度回归器是在给定的人群场景中从网格中采样的补丁上训练的。选择独立的 CNN 回归量,使它们具有不同的感受野和视野。这确保了每个 CNN 回归器学习的特征适应特定的规模。这使得 Switch-CNN 对在典型人群场景中观察到的人的大规模和视角变化具有鲁棒性。如果回归器在补丁上的性能最好,则特定的 CNN 回归器将在人群场景补丁上进行训练。 **一个切换分类器与多个CNN回归器交替训练,以正确地将一个patch传送到一个特定的回归器。**Switch和回归器的联合训练有助于提高Switch对差异训练阶段学习的人群场景复杂多切面空间的学习能力。

二、CrowdNet[2]和MCNN[3]

[2, 3]使用的multi-column CNN对不同CNN columns的特征进行后期融合,对人群场景的密度图进行回归。在[3]中,使用不同接受域的shallow CNN columns来捕捉人群场景中规模和视角的大变化情况。[2]使用VGG网络进行迁移学习,VGG网络采用dilated layers,并辅之以具有不同接受域和视场的浅层网络。*这两种模型通过1 1卷积层加权平均融合CNN columns的特征图来预测人群的密度图。然而,加权平均技术在本质上是全局的,没有考虑场景内密度的变化。
本文以multi-column CNN的性能为基础,并在我们提出的Switch-架构中加入一个基于patch的交换架构,switch-CNN探索在一个场景内的局部人群密度变化。然而switching architectures还没有被用于计数,[4] 已经使用expert classifiers使用基于描述风格的deep switching mechanism来改进跨描述风格的单个对象图像分类。然而,与[4]不同的是,我们没有标签(例如:“艺术”、“照片”等描述风格)训练switch classifier。为了克服这一挑战,我们提出了一种利用CNN回归器的结构差异的训练机制。

三、方法

本文考虑switching CNN 架构 (Switch-CNN),该架构将patches从人群场景中的网格传送到基于switch classifier的独立 CNN 回归器。独立的 CNN 回归器被选择为具有不同的感受野和视野,就像在multi-column CNN网络中一样,以增强对大尺度变化进行建模的能力。如果回归器在这个patch上的性能最好,则一个特定的 CNN 回归器将在人群场景patch上进行训练。 switch classifier与多个 CNN 回归器的训练交替训练,以正确地将patch传送到特定的回归器。使该模型非常适合人群分析的显着特性是:(1)建模大尺度变化的能力;(2)该设施在人群场景中利用了密度的局部变化。利用密度的局部变化的能力是重要的,因为在多列网络中使用加权平均技术来融合特征在本质上是全局的。

四、Switch-CNN

switch -CNN由三个不同结构的CNN回归器和一个分类器(switch)组成,分类器用于为输入的人群场景patch选择最优回归器。Figure 2显示了Switch-CNN的整体架构。将输入图像分成9个不重叠的patch,每个patch为图像的三分之一(?,九分之一吧)。对于这样的图像分割,可以假设在人群场景的给定patch中,人群特征(如密度、外观等)是一致的。将patch作为网络输入有助于通过最适合patch属性(如补丁中人群的密度、背景、比例和视角变化)的 CNN 回归器独立地回归图像的不同区域。

模型三个CNN回归器来预测人群密度。这三个CNN回归器有不同的接受域,可以捕捉不同尺度的人。R1初始过滤器大小为99,可以捕捉场景中的高级抽象特征,如人脸,urban facade等。R2和R3的初始滤波器大小分别为77和5*5,它们在较低尺度捕获人群,检测像抽象这样的斑点。(为什么?)

Patches通过switch传送到回归器。该switch由switch classifier和switch layer组成。switch classifier推断patches要传送到的回归器的标签。switch layer获取从switch classifier推断出来的标签,并将其转发给正确的回归器。我们使用VGG16网络的适配作为switch classifier进行3-way分类。VGG16全连接层被删掉。我们在Conv5特征上使用全局平均池(GAP)去除了空间信息,聚集了判别特征。GAP之后是一个较小的全连接层和3-class softmax分类器,对应于Switch-CNN中的三个回归网络。


密度图Ground Truth生成方式:

通过模糊每个头部标注的高斯核归一化(Gaussian kernel normalized)生成一个密度图来生成Ground Truth。将合成的密度地图相加就得到了人群数量。**密度图降低了CNN回归的难度,因为预测头部标注的准确点的任务简化为预测一个粗糙的位置。**上述密度图中的高斯分布是固定的。然而,如果人群密度变化很大,由固定扩散高斯分布生成的密度图是不合适的。我们使用几何自适应核(geometry-adaptive kernels)[3]来根据局部人群密度改变高斯分布参数。它将 Gaussian 的传播与 k-最近相邻头部注释的平均距离成比例。**头间距离是透视图的一个很好的替代品,透视图难于生成,而且对每个数据集都不可用。**这就导致了在人群场景中,对于密集的人群,高斯模糊程度较低,而对于稀疏密度区域,高斯模糊程度较高。

五、训练

预训练:

三个CNN回归器R1到R3分别被预训练以回归密度图。预训练有助于学习良好的初始特征,从而改善后期的微调阶段。单独的CNN回归器被训练来最小化估计的密度图和ground truth之间的欧氏距离。密度图L2损失函数如下:

Differential Training:

CNN回归器R1到R3是用整个训练数据预先训练的。计数预测性能的不同是由于R1到R3网络结构的固有差异,如接受场和有效视野。虽然我们优化了估计的和ground truth密度图之间的l2-loss来训练CNN回归器,但是在训练过程中考虑count error会导致更好的人群计数性能(也就说使用具体人数估计值和ground truth作为损失函数误差)。**(有些文献[3]用两种损失函数做了对比实验,有不同的观点,可能是这里适用于这种损失函数,需要做对比实验验证)**因此,我们使用count error来测量CNN的性能。

设第k个回归器对第i个图像估计的计数为

从ground truth推断的参考计数为

第i个样本用Rk求值的计数误差为

具有特定人群属性的patches,由于回归器具有互补的网络结构,其count error更低。例如,一个具有大接受域的CNN回归器可以捕捉高水平的抽象概念,比如背景元素和面孔。为了放大网络差异,提出了differential training(shown in blue in Algorithm 1)。differential training的关键思想是对给定的训练人群场景patch以最小count error反向传播回归器Rk。



第i个样本的count error为

该训练机制鼓励回归器Rk选择具有特定patch属性的训练数据patches的特定集,从而使损失最小化。虽然独立回归器Rk的反向传播仍然是在l2-loss下进行的,但反向传播CNN回归器的选择是基于count error的。differential training间接地减少了训练图像上的平均绝对计数误差(MAE)(?)。

对于N张图像,这种情况下的MAE为

这可以认为是每一个样本被正确地传送到正确的CNN所能达到的最小count error。然而,在测试过程中,由于switch classifier不理想,可能无法实现这种完全的准确性。综上所述,differential training产生三组不相交的训练patches,每个网络在自己的组上进行微调。对回归变量Rk进行differential training,直到验证准确性达到稳定状态。

Switch Training:

一旦通过differential training推断出patches空间的多切分(multichotomy),就训练一个patch classifier (switch)将一个patch传送到正确的回归器Rk。分离人群场景patches空间的流形是复杂的,因此需要一个深度分类器来推断多切面(multichotomy)中的patches组。我们使用VGG16网络作为交换分类器进行3-way分类。分类器在differential training生成的多切口(multichotomy)标记上进行训练。每组训练patches的数量可能是高度倾斜的(skewed),根据人群场景的属性,大部分patches被传递到一个单一的回归器。为了缓解switch classifier训练时的分类不平衡,对differential training中收集到的标签进行均衡处理,使每组样本数量相同。这是通过从较小的分组中随机抽样来实现的,以平衡开关分类器的训练集。

Coupled Training:

differential training,从CNN回归器R1到R3生成一个多切口(multichotomy),通过为给定的人群场景patch选择最好的回归器来最小化预测计数。然而,训练出来的switch并不理想,而且分割patches空间的流形学习起来比较复杂。为了减轻开关不准确和任务固有复杂性的影响,我们通过交替训练开关和回归器,共同适应了patch分类器和CNN回归器。我们将这一阶段的训练称为耦合训练(shown in green in Algorithm 1)。

switch classifier首先使用differential training中推断出的多切面标记进行训练one epoch (shown in red in Algorithm 1)。在下一个阶段,三个CNN回归器与switch classifier共同适应(shown in blue in Algorithm 1)。我们将这个switch和回归器 R1-3 协同适应的训练阶段称为Switched differential training。

在switched differential training中,使用switch传递的人群场景补丁训练单个CNN回归器one epoch。对于给定的训练人群场景patch Xi,switch在Xi上正向传播,以推断回归因子Rk的选择。然后,switch layer将Xi传递给特定的回归器,并使用Equation 1定义的损失反向传播Rk,从而theat k被更新。这种训练制度是执行了an epoch。

在下一个epoch,使用Equation 3中的准则重新计算switch classifier训练的标签,并按照上述方法再次训练switch。每个epoch都重复CNN回归器的交替switch training和switched training过程,直到验证精度趋于平稳。

参考文献

[1]Sam D B, Surya S, Babu R V. Switching convolutional neural network for crowd counting[C]//CVPR. IEEE, 2017: 4031-4039.
[2]Boominathan L, Kruthiventi S S S, Babu R V. Crowdnet: A deep convolutional network for dense crowd counting[C]// ACM international conference on Multimedia. 2016: 640-644.
[3] Zhang Y, Zhou D, Chen S, et al. Single-image crowd counting via multi-column convolutional neural network[C]//CVPR. 2016: 589-597.
[4] Sarvadevabhatla R K, Surya S, Kruthiventi S S S. SwiDeN: convolutional neural networks for depiction invariant object recognition[C]//ACM international conference on Multimedia. 2016: 187-191.

2017_Switching convolutional neural network for crowd counting相关推荐

  1. 人群计数--Switching Convolutional Neural Network for Crowd Counting

    Switching Convolutional Neural Network for Crowd Counting CVPR2017 Code for SCNN is based on Lasagne ...

  2. 快速人群密度估计--Multi-scale Convolutional Neural Networks for Crowd Counting

    Multi-scale Convolutional Neural Networks for Crowd Counting https://arxiv.org/abs/1702.02359 对于人群密度 ...

  3. Switching Convolutional Neural Network for Crowd Counting-论文笔记

    Switching Convolutional Neural Network for Crowd Counting:用于人群计数的转换卷积神经网络 Switching Convolutional Ne ...

  4. 《Multi-scale Convolutional Neural Networks for Crowd Counting》论文笔记

    Multi-scale Convolutional Neural Networks for Crowd Counting 论文地址 论文翻译 ABSTRACT 1. INTRODUCTION 2. M ...

  5. 人群场景分析--Slicing Convolutional Neural Network for Crowd Video Understanding

    Slicing Convolutional Neural Network for Crowd Video Understanding CVPR2016 http://www.ee.cuhk.edu.h ...

  6. Multi-Scale Attention Network for Crowd Counting:用于人群计数的多尺度注意网络

    Multi-Scale Attention Network for Crowd Counting:用于人群计数的多尺度注意网络 Multi-Scale Attention Network for Cr ...

  7. 人群计数--Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

    Single-Image Crowd Counting via Multi-Column Convolutional Neural Network CVPR2016 https://github.co ...

  8. 《Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network》论文笔记

    <Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network>论文笔记 论文地址 ...

  9. 【转】ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Comput

    今年去参加了ASPLOS 2017大会,这个会议总体来说我感觉偏系统和偏软一点,涉及硬件的相对少一些,对我这个喜欢算法以及硬件架构的菜鸟来说并不算非常契合.中间记录了几篇相对比较有趣的paper,今天 ...

最新文章

  1. 机器人如何懂得人类感情
  2. 网络带宽与传输性能的基本计算方法
  3. Python 中的匿名函数,你滥用了吗?
  4. 开发人员安全行为规则_为开发人员改善生活的7条简单规则
  5. Circle and Points POJ - 1981(单位圆覆盖最多点)
  6. TableLayoutPanel闪烁问题解决
  7. Filter使用详解
  8. 在容器里设置GOMAXPROCS的正确姿势
  9. python单行注释的标记符_【转】Pyhton 单行、多行注释符号使用方法及规范
  10. jquery api的整体解读
  11. Android腾讯信鸽推送
  12. 德勤,普华永道,安永,毕马威这四大会计师事务所,有什么区别
  13. raid服务器怎么装win7系统安装,win7系统安装raid的方法(图文)
  14. 预测web服务的未来
  15. 新加坡全面开放边境,畅游畅游《摘金奇缘》新加坡地标性景点
  16. 前端学习之路, 记录前端小白成长历程, 学习总结, 工具汇总, 打造开箱即用的学习体验
  17. 表达式的LenB(123程序设计ABC)的值是27吗
  18. 服务器常用的操作系统
  19. 在Ubuntu上安装Azure DevOps self-hosted agent
  20. 真正的Netflix文化

热门文章

  1. thinkphp5 导入/导出 Csv文件
  2. 写给小白,从零开始拥有一个酷炫上线的网站!
  3. vue知识点总结 --- vuex热更替
  4. 新旧系统更替产生的数据迁移问题
  5. Docker背后的内核知识——Namespace资源隔离
  6. 一个比 Nginx 功能更强大的 Web 服务器
  7. 字节跳动月薪5万招产品经理,看到要求我傻眼了!
  8. 棋盘覆盖问题C语言实现
  9. Android中Bundle
  10. CF 1139A-Even Substrings(签到题)