人群计数cvpr2020注意力机制:Attention Scaling for Crowd Counting

需要了解的相关知识:
注意力机制阐述:注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制。人类视网膜不同的部位具有不同程度的信息处理能力,即敏锐度(Acuity),只有视网膜中央凹部位具有最强的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。
综上,注意力机制主要有两个方面:
①决定需要关注输入的哪部分;
②分配有限的信息处理资源给重要的部分;

在计算机视觉领域,注意力机制被引入来进行视觉信息处理。注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显著性检测、滑动窗口方法等都可以看作一种注意力机制。**在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。**本文的注意力机制主要指代神经网络中的注意力机制。近几年来,深度学习与视觉注意力机制结合的研究工作,大多数是集中于使用掩码(mask)来形成注意力机制。掩码的原理在于通过另一层新的权重,将图片数据中关键的特征标识出来,通过学习训练,让深度神经网络学到每一张新图片中需要关注的区域,也就形成了注意力。
从原理上来说,主要分为空间注意力模型,通道注意力模型,空间和通道混合注意力模型三种,这里不区分soft和hard attention。 对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。 SENet(Sequeeze and Excitation Net)是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。
人群计数cvpr2020注意力机制:Attention Scaling for Crowd Counting_第1张图片

在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。 然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。 得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。 将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet[4]等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。 通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。 考虑soft和hard
注意力机制可以分为四类:基于输入项的柔性注意力(Item-wise Soft Attention)、基于输入项的硬性注意力(Item-wise Hard Attention)、基于位置的柔性注意力(Location-wise Soft Attention)、基于位置的硬性注意力(Location-wise Hard Attention)。
对于基于输入项的注意力和基于位置的注意力,它们的输入形式是不同的。基于项的注意力的输入需要是包含明确的项的序列,或者需要额外的预处理步骤来生成包含明确的项的序列(这里的项可以是一个向量、矩阵,甚至一个特征图)。而基于位置的注意力则是针对输入为一个单独的特征图设计的,所有的目标可以通过位置指定。
如前面所说,基于项的注意力在项的层面操作。原始输入经过神经网络处理后,如RNN或CNN,形成了一个每一项具有一个单独编码的序列。基于项的柔性注意力为每一个编码,即每一项,计算一个权重,然后对所有项进行线性加权合并。合并后的编码就是注意力机制操作后的特征,用于做预测。而基于项的硬性注意力的不同在于它会做出硬性的选择,而不是线性加权。具体就是根据注意力的权重随机地选取若干(通常是一个)编码作为最终的特征。
基于位置的注意力直接在一个单独的特征图上进行操作。基于位置的硬性注意力从输入的特征图中随机地选取一个子区域,作为最终的特征。选取的位置是由注意力模块计算出来的。而基于位置的柔性注意力则对整个特征图做一个变换,使得感兴趣的部分能够突出出来。
关于模型优化,注意力机制通常由一个连接在原神经网络之后的额外的神经网络实现,整个模型仍然是端对端的,因此注意力模块能够和原模型一起同步训练。对于柔性注意力,注意力模块对其输入是可微的,所以整个模型仍可用梯度方法来优化。而硬性注意力机制要做出硬性的决定,离散地选择其输入的一部分,这样整个系统对于输入不再是可微的。所以强化学习中的一些技术被用来优化包含硬性注意力的模型。
总之,注意力机制能够帮助模型选择更好的中间特征。

正文:
之前的基于CNN的人群计数方法试图利用多尺度特征融合、多任务学习和注意机制来解决上述问题。
观察到,在高密度地区的预测可能高于ground truth(地面真值),而在低密度地区的预测可能低于。
为此,我们构造了一个注意力尺度卷积神经网络ASNet。**ASNet首先生成比例因子以调整相应的中间密度贴图。然后,ASNet输出多个基于注意力的密度图,每个图只聚焦于某一特定密度水平的区域。**最后,ASNet将这些基于注意力的密度图相加,得到最终的密度图。**为了给ASNet提供注意掩码,我们提出了一种密度注意网络DANET,它完成像素级的密度分割任务。**此外,我们还提出了一种新的损失函数:自适应金字塔损失(APLoss)。APLoss首先根据局部人口数自适应地将密度图划分为非均匀金字塔形子区域,然后计算每个局部归一化损失。最后,APLoss将所有局部损失累加,以给出最终估计损失。

人群计数cvpr2020注意力机制:Attention Scaling for Crowd Counting_第2张图片

网络结构图

密度注意网络(DANET)为注意力缩放网络(ASNet)提供了注意掩码。ASNet有两个分支机构。密度估计分支生成中间密度图,而注意力缩放分支生成缩放因子。ASNet将中间密度图和比例因子乘以注意力掩码,生成基于注意力的密度图,然后将其相加得到最终的密度图。
DANET的目标是产生代表不同密度水平的区域的注意掩码。它通过执行像素级密度分割任务来实现这一目标。也就是说,DANET将每个像素分类为一个特定的密度级别。相同密度级别的像素形成一个注意掩码的区域。
我们使用以一个像素为中心的局部计数来表示其密度水平,从而使像素的密度水平与局部区域的密度水平保持一致。
也就是说,DANET可以将人群图像分割成不同密度级别的区域,每个区域对应一个二进制注意掩码。

AS-BRANCH学习生成比例因子,该比例因子旨在结合DANET提供的注意掩码调整中间密度图。这些缩放因子有助于微调相应局部区域的总体人群计数。
人群计数cvpr2020注意力机制:Attention Scaling for Crowd Counting_第3张图片

**欧几里德距离作为损失函数忽略了不同水平的密度对网络训练过程的影响。**由于低密度和高密度分布通常是很不平衡的,相应的估计误差会使训练的计数网络产生偏差。这削弱了计数网络的泛化能力。此外,即使在密度水平相同的区域,其子区域也存在密度差异。
APLoss能够基于地面真值(ground truth)的局部人群计数自适应地将密度贴图划分为非均匀的金字塔子区域。然后,APLoss首先计算每个局部相对估计损失,然后将它们相加,得出最终损失。

人群计数cvpr2020注意力机制:Attention Scaling for Crowd Counting_第4张图片

训练:
1.先训练DANET网络。数据增强,我们通过在一幅图像中的随机位置裁剪九个图像块来增加训练数据。每个图像补丁的大小是原始图像的四分之一。采用交叉熵作为DANET的损失函数
2.后训练ASNet我们在一幅图像中的任意位置裁剪128×128像素的固定大小的图像块。此外,我们水平翻转每个图像块以使训练集加倍,并且在训练期间在每个epoch中使用随机颜色抖动。Batchsize=1
特别的,由于UCF-QNRF数据集的图像分辨率太大,我们将其较长边的大小调整为1024像素,并保持纵横比恒定。Batchsize=8
3.密度图生成采用归一化高斯核,固定扩散
4.对于DANET和ASNet,前13个卷积层从预先训练的VGG-16模型初始化,其余层由均值为0、标准差为0.01的高斯分布随机初始化。
5.Adam优化

**消融研究:**实验表明2 scale ,2-level APLoss时效果最好

注意力缩放机制不仅可以衰减不同密度水平区域的估计误差,而且对降低杂波背景下的估计误差也有重要作用。

作者并没有开源代码,所以自己在尝试复现

你可能感兴趣的:(papers论文阅读,cv,计算机视觉,深度学习)