在这篇文章中,switching CNN将某个人群场景中的一个grid里面的小块送到某个基于switch分类器的CNN回归器。因为多列CNN网络中是通过选择具有不同receptives和field-of-view的CNN回归器去提高对大尺度变量的建模能力。
这个模型对于人群分析的优点:
(1)对大尺度变量建模的能力;
(2)在一个人群场景中利用局部变量的能力。利用在密度图中的局部变量的能力之所以重要是因为在多列网络中用于去融合特征的的加权平均技术是全局的。
输入图片被分为9个不重叠的patch,那么每个patch的长宽是原图像的三分之一。
在Switch-CNN中,CNN回归器分别为R1、R2和R3,这些回归器有不同的感受野可以捕捉到图像中不同尺寸的人。每一个浅层CNN回归器都是相似的:四个卷积层和两个池化层。R1有99的卷积核能捕捉场景中高层次的抽象物体如脸和街景;R2和R3的卷积核尺寸分别为77和5*5,能捕捉低层次的尺度特征如斑点等。
网络运行时通过一个switch去选择一个合适的回归器。这个switch由一个switch分类器和一个switch层组成。switch分类器的主要功能是推断出patch应该被传送的到哪一个回归器中。而一个switch层的功能是接受分类器的结果并且将patch传送到它所合适的那个回归器中。
switch中的G-A-P层的作用是移除空间信息和汇集不同的特征。GAP后面跟着一个小的全连接层和3-class的softmax的分类器,这3类分别对着Switch-CNN中的三个回归器。
一、预训练。
预训练有助于学习好的初始特征,这些初始特征能改善之后的微调阶段。
每个CNN都是通过最小化估计的密度图和ground truth之间的欧式距离的过程来训练的。相应的回归函数通过SGD反向传播来优化CNN。这里的损失函数作为回归器估计的数量和真实数量之间的计数误差的替代,它间接最小化了计数误差。预训练回归器直到验证精度不再变化为止。
二、differential training
用计数误差评价CNN的性能。
重点是对于一个给定的训练人群场景patch反向传播具有最小计数误差的的回归器。
尽管单个回归器通过欧式距离来反向传播,但是CNN回归器的选择却是基于计数误差来反向传播的。differential training通过训练集间接最小化了完全平均计数误差。differential training回归器直到验证精度不再变化为止。
三、switch training
用VGG16作为switch分类器去实现三类分类任务。differential training生成的回归器的标签作为switch对应的输入以进行训练。因为人群场景的属性,大多数patch可能被传送给同一个回归器,这就导致在每组中训练patch的数量可能有很大的不同,为了缓解这个不平衡的问题,从differential training中得到的label采取均衡处理,这样每组中样例的数量就都是一样的了。这个操作是通过从较小的组中随机采样实现的。
四、coupled training
交替训练swich和classifier