使用STN的行人属性识别

        Improving Pedestrian Attribute Recognition With Weakly-Supervised Multi-Scale Attribute-Specific Localization

文章:https://arxiv.org/abs/1910.04562

代码:https://github.com/chufengt/iccv19_attribute

1、行人属性识别任务

        行人属性识别任务本质上是一个分类任务,输入一个人的图像,得到人的性别、年龄、穿衣等的属性。相比于传统的分类,属性的识别有的时候较为依赖于局部的特征,比方说一个人是否带墨镜就只和人脸的区域有关系,于是为了提高分类的效果,论文一般都会采用一些局部的方法,提高属性识别的正确率。

使用STN的行人属性识别_第1张图片

                              图1 a 原图 b 裁剪的局部区域 c 基于注意力机制的热力图 d 多个局部区域

2、本文思想

本文是针对单幅图像进行行人属性分析的论文,核心思想有两点:

        1)使用多尺度的特征进行行人属性的判别,低层次的特征用于局部属性的判别,如是否佩戴帽子;高层次的特征用于语义属性信息的判别,如性别

        2)对每一个属性都使用了一个属性定位模块(Attribute Localization Module,ALM),在输入图像上定位和当前属性相关联的图像区域,基于定位的区域进行属性的判别。ALM也属于一种视觉注意力机制,但是针对各个属性都去学习一个对应的ALM,并且作者使用了STN(Spatial Trabnsformer Net),用弱监督的方式进行了感兴趣区域的学习。ALM内部也结合了来自于SENet的channel混合的思想。

        STN网络(Spatial Transform Network),关于该网络可以参考下面的文章和pytorch官方教程:

1、【注意力机制】空间注意力机制之Spatial Transformer Network:

抱歉,该内容已被作者删除 - 知乎

2、SPATIAL TRANSFORMER NETWORKS TUTORIAL

Spatial Transformer Networks Tutorial — PyTorch Tutorials 1.12.1+cu102 documentation

3、网络结构

使用STN的行人属性识别_第2张图片

从图中可以看到网络的大致流程:

        1)首先图像进入一个Backbone的网络,不同层的特征还进行了融合。

        2)融合后的特征进入黄色的Attribute Localization Module,最后输出使用softmax进行分类。

        3)可以看到上图中有多个绿色部分(预测结果),对多个结果进行融合,得到最终的结果。

        上面的Attribute Localization Module就是上文提到的STN改进得到的,结构如下:

使用STN的行人属性识别_第3张图片

        这个模块相当于STN添加了一个Channel wise的attention。网络可以通过交叉熵进行End-To-End训练。

4、网络结构描述

4.1、主干网络

        作者使用的骨干网络是BN-Inception,将inception_3b,inception_4b,inception_5b三个尺度的输出取出构建多尺度的特征,这三个尺度的特征的空间尺寸相对于输入图像的stride分别是8,16,32。具体的实现是,对三个尺度的输出特征,分别使用1 * 1的卷积,将其channel数变为256,而后两个尺度的特征进行上采样操作,空间尺度扩大2倍。因此,对于第一、第二个尺度的输出,进行的操作为:f 表示1 * 1的卷积操作,g 表示的是对相邻的下一个尺度的输出进行的空间上采样的操作。这两个输出进行concatenate的操作,作为当前尺度的最终输出feature map。对于第三个尺度的输出,因为其为最后一个尺度,因此,没有可供上采样的下一尺度的特征,唯一的操作是对其应用1 * 1的卷积,即:

4.2、ALM

        ALM进行和属性相关的图像区域定位,作者认为一个注意力网络同时进行多个属性定位时,定位出来的不同属性间的感兴趣区域之间是存在混叠的,因此作者针对每一个属性都单独训练了一个ALM。ALM的具体结构如下图所示:

使用STN的行人属性识别_第4张图片

        STN:在训练ALM的过程中,因为现有的数据集都没有标注各行人属性对应的bounding box的位置,因此作者采用了弱监督的方式进行ALM的训练。具体来说就是使用STN。STN是一个可微的模型,可以对feature map进行空间变换(裁剪、平移、缩放等)。本文中,作者使用了简化版本的STN,因为和某个属性相关的感兴趣区域可以当成一个bounding box进行处理。具体来说,是执行了下面的变换公式:

使用STN的行人属性识别_第5张图片

        sx,sy​是缩放参数,tx,ty是平移参数, (xi^s,yi^s)和(xi^t,yi^t)是第i 个像素的原始坐标和变换后的坐标。上面这个简化后的变换可以当成是一个可微的ROI池化,可以在未标注区域的情况下进行端到端的训练。为了加速收敛,作者限制sx​,sy​∈(0,1),tx​,ty​∈(−1,1),因此可以使用sigmoid和tanh函数得到对应的值。

        channel attention:作者借鉴了SENet中的channel attention的思想,应用1 * 1的卷积操作先进行channel数量缩减,然后再使用1*1卷积进行channel数量的扩充。这是因为,每个ALM的输入都是来自于多个尺度的融合后的特征,如果这些不同尺度的特征对要某个属性的区域定位具有相同的影响力的话,可能不利于属性的定位。比如,针对细粒度的属性,就应该让低层的特征的影响力更大,对于全局的属性,就应该让高层的属性的影响力更大。因此作者使用channel attention的思想,就是想针对每一个尺度的每一个属性,让模型自己去选择最合适的尺度的属性,也就是去选择最合适的channel。

4.3、deep Supervision

        和常规的深度学习机制相比,深度监督学习不仅在网络的最后输出结果out,同时在网络的中间特征图,经过反卷积和上采样操作,得到和out尺寸一致的输出out_m,然后结合out-m和out,共同训练网络。在GoogleNet中用到了这种学习机制。

使用STN的行人属性识别_第6张图片

深度卷积的好处:

        1)可加速神经网络收敛,更小化损失

        2)可获得更平滑的卷积核,更明显的模式

        如完整模型结构所示,对四个尺度的输出feature map,作者应用了deep supervison机制进行训练。所谓的deep supervison就是指在训练时,四个尺度的输出都和ground-truth计算损失。这是因为每一个ALM都应该直接根据损失值判定属性区域定位是否准确,如果对四个尺度的输出进行取平均或者取最大值的操作,最终的损失无法衡量每一个尺度对属性区域定位的准确性,可能造成某些尺度的ALM训练不充分。

        在测试决断,四个尺度的输出进行投票,从四个尺度中选择针对某一属性的最精确的区域。

5、损失函数

        训练过程中,把所有的属性都变成了二分类属性。因此,损失函数使用的加权的sigmoid交叉熵损失。四个尺度的损失之和作为最终的损失。

使用STN的行人属性识别_第7张图片

6、实验效果

6.1、数据集和评价指标

该方法在三个公开的行人属性数据集上进行了评价:

         PETA数据集由19000个图像组成,其中61个为二值属性,4个为多值属性。根据前面的工作[1,25],整个数据集被随机分成三个子集:9500用于训练,1900用于验证,7600用于测试。选择正例比例大于5%的35个属性进行评价。

         RAP数据集包含从26个室内监视摄像机收集的41585个图像,其中每个图像用72个细粒度属性进行注释。根据官方协议,我们将整个数据集分成33268个训练图像和8317个测试图像。选择正例比例大于1%的51个属性进行评价。

         PA-100K数据集是迄今为止用于行人属性识别的最大数据集,其中包含从室外监控摄像头收集的总共100000张行人图像,每张图像都有26个常用属性。根据官方设置[20],整个数据集随机分为80000个训练图像、10000个验证图像和10000个测试图像。

我们采用两种类型的指标进行评价:

        基于标签:计算平均准确度(mA)作为每个属性的正准确度和负准确度的平均值。

        基于实例:我们采用了四个众所周知的标准,accuracy、precision、召回率和F1分数。mA标准可以表述为:

使用STN的行人属性识别_第8张图片

6.2、消融实验

Baseline是指BN-Inception;

使用STN的行人属性识别_第9张图片

        1)前两行可以看出,加上ALM之后有很大提升,并且三个尺度都使用ALM比只对单个尺度使用ALM的提升更大。

        2)对四个尺度的输出feature map像FPN那样进行逐元素的相加操作的效果不如concatenate好。在使用concatenate的基础上加上channel attention之后会有进一步的提升。

        3)deep supervison中取最大值操作的效果要比取均值效果好。

6.3、可视化ALM学得的和属性相关的区域

使用STN的行人属性识别_第10张图片

        我们显示了六个不同属性的示例,包括抽象属性和具体属性。正如我们所看到的,所提出的ALMs能够成功地将这些具体属性,例如背包、塑料袋和帽子,定位到相应的信息区域,尽管存在极端的遮挡(a,c)或姿势变化(e)。在识别更抽象的属性Clerk和BodyFat时,ALMs倾向于探索更大的区域,因为它们通常需要从整个图像中获取高级语义。

使用STN的行人属性识别_第11张图片

6.4、对比其他算法

        在三个数据集上都取得了更高的mA和F1值。

使用STN的行人属性识别_第12张图片

6.5、不同的Attribute-Specific方法

        这项工作最重要的贡献是为每个属性定位一个单独的信息区域,我们称之为Attribute-Specific的,在以前的工作中没有得到很好的研究。在本小节中,我们将通过与其他特定属性的定位方法(如视觉注意力机制和预定义parts)进行比较,以实验来证明我们提出方法的优势。

        与图1中所示的属性不可知的注意力机制和身体parts不同,我们将它们扩展到属性特定的版本进行比较。对于注意力机制,我们用一个空间注意模块来代替所提出的ALM,同时保持其他模块不变,以便进行公平的比较。具体来说,我们像HA-CNN[17]一样,通过一个全局cross-channel averaging layer和一个3×3卷积层,为每个属性生成单独的注意masks。

        对于预定义parts,我们将整个图像分成三个固定部分(头部、上半身和下半身),并使用RoI pooling层提取基于part的特征,然后手动定义attribute-part的关系,例如仅从头部部分识别帽子。关于比较方法的更多细节见附录B。实验结果见表2,如预期的那样,所提出的方法在很大程度上优于其他两种方法(在mA中分别提高了5.3%和3.5%)。为了更好地理解这些差异,我们在图6中可视化了这些定位结果。我们可以看到,由ALMs生成的属性区域是最精确和最有区别的。虽 然注意力机制模型取得了不错的效果,但是生成的注意masks可能会注意到不相关或偏离的区域。预定义parts获得的识别框不能覆盖全部的预期区域,而且还将几乎相同的区域定位在不同的输入图像上。相比之下,本文方法能够成功地处理位置不确定性和姿态变化。我们在图S4中提供了更多的可视化结果。

使用STN的行人属性识别_第13张图片

使用STN的行人属性识别_第14张图片

相关资源:

模型参数可视化:https://github.com/utkuozbulak/pytorch-cnn-visualizations

使用STN的行人属性识别_第15张图片

你可能感兴趣的:(深度学习,python,人工智能,机器学习,计算机视觉)