DecideNet可以根据图像的实际密度,为图像的不同位置自适应地决定适当的计数模式(基于检测的或者基于回归的)。
图1(a)给出了在特定图像上来自经过微调的Faster RCNN头部检测器的检测结果:随着到摄像机的距离的增加,人群密度和错过检测的次数增加。图1(c)显示了10,000个大小为256×128的图像块的中值检测分数与ground truth之间的关系。显然,分数随着ground truth的增加而迅速下降。我们可以发现在人群稀少的场景中,估计是可靠的,并且检测分数也高于拥挤场景的检测分数。另一方面,在拥挤的场景中,相应的物体尺寸往往很小。图1(b)提供了(a)中相同图像上的人群密度图可视化效果,该图像是由基于五层CNN的回归网络输出的,具有与[28]中使用的相似结构。我们发现远处拥挤地区的估算是相当合理的。但是,在摄像机视点附近的背景区域中,人行道上存在虚假警报热点。图1(d)绘出了ground truth与预测之间的关系。注意,具有较低ground truth的patch的预测点大多在虚线上方。因此,不知道每个人的位置,直接将基于回归的方法应用于低密度场景可能会导致高估结果。
如图2所示,DecideNet是一个网络框架,可以自适应地选择使用detection还是基于回归的方法。据我们所知,DecideNet是第一个框架,它能够感知场景中每个像素的人群密度,并自适应地确定相对权重以进行基于检测和回归的估计。
详细地说,对于给定的场景,DecideNet首先通过检测个体并分别回归像素密度来估计两种人群密度图。为了捕获人群密度的细微变化,提出了一个关注模块QualityNet来评估两种类型密度图的可靠性,并附加监督检测分数。在QualityNet的指导下获得最终计数,为两个密度图分配自适应注意力权重。通过最小化联合损失函数,我们提出的DecideNet中的参数是端到端可学习的。
如图2所示,DecideNet同时使用密度图估计模型核检测模型,使用一个attention block决定某个具体的像素使用何种估计结果。我们的框架包括三个CNN模块:RegNet、DetNet 和QualityNet。参数分别表示为 Ω = ( Ω d e t , Ω r e g , Ω q u a ) Ω = (Ω_{det}, Ω_{reg}, Ω_{qua}) Ω=(Ωdet,Ωreg,Ωqua)。
RegNet模块在不确定图片上每个人的位置的情况下进行计数。不知道输入图像patch中每个人头的具体位置,直接用全卷积网络估计所有像素 I i I_i Ii的人群密度:
如图3所示,RegNet模块包含5个卷积层。由于这个模块设计用来捕获一般的密度信息,更大的接受域能够获得更多的上下文细节信息,更有利于构建密度图。因此在RegNet模块中,conv1的filter大小为7×7×20,conv2的filter大小为5×5×40。为了捕获scale和方向不变的密度特征,“conv1”和“conv2”层之后是两个2×2的最大池化层。conv3和conv4的filter都是5×5,个数分别为20和10.由于最终的估计结果是通道数为1的CNN特征图,因此添加了conv5,大小为1 × 1,通道数为1.最后得到的密度图为 D i r e g D^{reg}_i Direg,最后再使用一个ReLU单元,确保密度图里的数值均为正值。
为了处理不同视角、人群密度和外观等信息,现有的人群密度估计方法常包含如RegNet一样的CNN结构。然而,在先前不知道图片patch中每个人的具体位置信息的条件下,网络纯粹是依靠原始图像像素来预测人群密度。这种回归方法在人群密度较大的图像patch中可能是准确的,但在稀疏甚至“无人”(背景)场景中往往会过高估人群数量。我们提出的DecideNet结构通过生成“location aware”(位置感知)检测的密度图 D i d e t D^{det}_i Didet来解决这个问题。我们的动机很直观也很简单:稀疏或者无人的图片patch期望用基于CNN的目标检测模型来计数。
图4所示为DetNet模块。它可以被看作是基于ResNet-101体系结构的Faster-RCNN网络的头部检测扩展。具体来说,我们设计了一个高斯卷积层,并将其插入到原始的Faster-RCNN网络的bounding box输出之后。高斯卷积层采用固定的高斯函数 N d e t ( p ∣ µ = P , σ 2 ) N^{det}(p | µ = P,σ^2) Ndet(p∣µ=P,σ2)在原始图像块上的检测到的边界框 P d e t P^{det} Pdet的中心上卷积。该层获得一个基于检测的密度图 D i d e t D^{det}_i Didet。
由于 D i d e t D^{det}_i Didet的像素值是通过考虑检测的输出 P i d e t P^{det}_i Pidet中各点的影响而得到的,因此 D i d e t D^{det}_i Didet是一个“位置感知”密度图。相比于RegNet的输出 D i r e g D^{reg}_i Direg,相应的 D i d e t D^{det}_i Didet更加关注于具体的头部位置。从图3和图4能很容易看出他们的区别。
在此,我们描述了如何获取给定图像 I i I_i Ii的两种密度图 D i r e g D^{reg}_i Direg和 D i d e t D^{det}_i Didet,基于检测的 D i d e t D^{det}_i Didet将目标检测的结果用于密度图估计。因此,它可以通过定位人的头部位置,在稀疏密度场景中精确地计算人的数量。然而由于拥挤场景中的人头大小较小、人群拥挤,所以基于检测的方法在这种情况下计数并不精确。相反,基于回归的图 D i r e g D^{reg}_i Direg不关心每个人的位置,更适用于拥挤场景,因为全卷积网络能够捕捉丰富的人群密度上下文信息。直觉上,人们可能认为通过使用平均池化层或者最大池化层融合 D i r e g D^{reg}_i Direg和 D i d e t D^{det}_i Didet可能在不同的密度场景中取得不错的效果。然而,即使在同一场景中,在不同区域或时间间隔的人群密度也可能存在显著差异。因此对于图片 I i I_i Ii中的每个像素,它的 D i r e g D^{reg}_i Direg和 D i d e t D^{det}_i Didet值的重要性也会有所不同。在DecideNet模块中,我们提出了一种注意力模块QualityNet,如图5所示,用于模拟最佳计数估计的选择过程。它通过动态评估每个像素的质量来捕获两个密度图的不同重要性权重。
对于 I i I_i Ii,QualityNet模块首先将 D i r e g D^{reg}_i Direg和 D i d e t D^{det}_i Didet上采样为和 I i I_i Ii相同的大小。然后 D i r e g D^{reg}_i Direg、 D i d e t D^{det}_i Didet和 I i I_i Ii堆叠到一起作为QualityNet的5个通道的输入,跟着是4个全卷积层和一个像素级的sigmoid层,输出一个概率注意力图 K i ( p ∣ Ω q u a , I i ) K_i(p|Ω_{qua}, I_i) Ki(p∣Ωqua,Ii)。我们定义 K i ( p ∣ Ω q u a , I i ) K_i(p|Ω_{qua}, I_i) Ki(p∣Ωqua,Ii)中像素 p p p点的值反映了 D i d e t D^{det}_i Didet相比于 D i r e g D^{reg}_i Direg的重要性。结果,QualityNet可以决定 D i r e g D^{reg}_i Direg、 D i d e t D^{det}_i Didet之间的相对可靠性(如质量)。 K i ( p ∣ Ω q u a , I i ) K_i(p|Ω_{qua}, I_i) Ki(p∣Ωqua,Ii)中像素点 p p p处的值更高,表示在 p p p处我们更倾向于检测的方法而不是回归的方法。因此我们可以定义最后估计的密度图 D i f i n a l ( p ∣ I i ) D^{final}_i(p|I_i) Difinal(p∣Ii)为 D i r e g D^{reg}_i Direg和 D i d e t D^{det}_i Didet的权重图。
⊙是两个矩阵的Hadamard乘积, J J J是与 K i K_i Ki具有相同size的全一矩阵。
DecideNet有三组学习参数,因此整个训练过程可以看作是一个多任务学习的过程。损失函数如下:
L r e g L_{reg} Lreg、 L d e t L_{det} Ldet和 L q u a L_{qua} Lqua分别是RegNet、DetNet和QualityNet的损失函数。 L d e c i d e L_{decide} Ldecide可以通过SGD进行优化。在每次迭代中,交替计算 L r e g L_{reg} Lreg、 L d e t L_{det} Ldet和 L q u a L_{qua} Lqua的梯度,并用梯度来更新相应的参数。 L r e g L_{reg} Lreg使用像素级的均方误差作为损失函数。
N是训练图片的总数。
DetNet模块和回归模型不同, D i d e t D^{det}_i Didet关注于检测到的人头中心点。由于背景或者无人的像素点值可能为负,所以不能直接最小化 D i d e t D^{det}_i Didet和 D i g t D^{gt}_i Digt的距离。因此不是使用像素级的欧式距离作为损失,而是使用边界框作为监督信息,通过这种方式,优化 Ω d e t Ω_{det} Ωdet相当于Faster R-CNN中的最小化分类和定位误差:
由于只提供了个体头部的中心作为人群密度估计数据集的标注,我们在部分训练数据上手工标注了边界框,然后用它们的平均宽度和高度进行等式7中的边界框监督。
注意模块QualityNet的损失函数 L q u a L_{qua} Lqua应该测量两种误差。一种是 D i f i n a l D^{final}_i Difinal和 D i g t D^{gt}_i Digt之间的误差,这个损失和 L r e g L_{reg} Lreg的计算一样。第二个用于计算QualityNet的输出概率图 K i K_i Ki的损失,即 K i ( p ∣ Ω q u a , I i ) K_i(p|Ω_{qua}, I_i) Ki(p∣Ωqua,Ii)和目标检测分数 S d e t ( p ∣ I i S^{det}(p|I_i Sdet(p∣Ii之间的欧式距离。从另一个角度来看,这个错误可以被视为通过合并检测成绩作为先验信息正则化QualityNet参数 Ω q u a Ω_{qua} Ωqua 。
这里的 λ λ λ是衡量公式的两项重要性的一个超参数。
训练步数:40k;初始学习率为0.005,每10k个epoch将学习率降为一半,然后选择出在验证集里面表现最好的模型;不输入原始图片,而是将图片裁剪为原始输入的4 × 3 个patch;然后用概率为0.5的随机垂直和水平翻转对每个patch进行扩展;我们还在patch中的每个像素上增加了范围为[−5,5]的均匀噪声,增加数据的概率为0.5。优化RegNet和QualityNet参数的过程中,真实密度地图是通过应用高斯内核 N g t ( p ∣ µ , σ 2 ) σ = 4.0 N^{gt} (p |µ,σ^2)σ= 4.0 Ngt(p∣µ,σ2)σ=4.0和15的窗口大小。每一次迭代,是通过在DetNet评估 I i I_i Ii来获取对象检测分数图 S d e t ( p ∣ I i ) S^{det}(p|I_i) Sdet(p∣Ii)的。对于检测到的边界框中的每个像素p, S d e t ( p ∣ I i ) S^{det}(p|I_i) Sdet(p∣Ii)的值填入相应的检测分值。对于其他不包含任何检测框的像素,默认填充0.1,这个得分图下采样到和 K i K_i Ki相同的大小,然后去计算"quality-aware" loss。