行人属性识别的一个调研 - 知乎
我感觉我掌握了财富密码,从知乎的后台数据来看,大家貌似更喜欢看综述多一点 。因此这次给大家整个”行人属性识别(PAR)“的综述,同样的,这次的综述比较老,是19年的,大家酌情看,适合入门用。
首先还是保命时刻,以下解读与见解均为我的个人理解,要是我有哪里曲解了,造成了不必要的麻烦,可以联系我删除文章,也可以在评论区留言,我进行修改。也欢迎大家在评论区进行交流,要是有什么有意思的paper也可以留言,我抽空看一下也可以写一些。正文内容中的“作者”二字,均是指paper的作者,我的个人观点会显式的“我”注明。而文中的图基本都是从paper上cv过来的,我也没本事重做这么多的图,况且作者的图弄得还挺好看的。
题目:Pedestrian Attribute Recognition: A Survey
作者:Xiao Wang, Shaofei Zheng, Rui Yang, Bin Luo, Jin Tang
文章链接:
https://arxiv.org/pdf/1901.07474.pdf
arxiv.org/pdf/1901.07474.pdf
主页链接:
https://sites.google.com/view/ahu-pedestrianattributes/
sites.google.com/view/ahu-pedestrianattributes/
总结:行人属性识别这个领域的一个Survey
行人属性识别的目的是在给定任务图像的情况下挖掘目标任务的属性,如下图所示:
他这个挖的不是HOG、LBP这些低级的深层特征,它挖掘的属性可以看成是高级语义信息。PAR可以集成进许多的CV任务里面去以实现更好的性能,例如ReID(其实我第一次看到PAR这个东西,我就觉得他是个ReID的衍生任务来的)。
PAR这个其实是老方向了,传统的做法是手动特征、分类器或者从属性角度开发的鲁棒的特征表示啥的,例如HOG、SIFT、SVM或CRF模型,但这些搞搞研究还行,实用根本不行,要应用还得看深度学习。因此这篇paper,作者们总结了包括传统方法和基于深度学习方法的行人属性识别的现有工作。主要解决了以下的几个问题:
为什么要做行人属性识别,这个其实很简单,就是你需要对人物图像从预定义的属性列表中预测一组属性来描述这个人的特征。
PAR可能的困难有:
数据集
下面补充一下每一个数据集上表中没有写到的独特的信息:
评价标准
评价标准有两种:基于label的评估和基于example的评估,前者将属性看作是彼此独立的,后者考虑了属性间的关系。
对于PAR队来说,独立学习每个属性是最直观的,但这种做法是会使得PAR产生冗余和低效。因此大家都喜欢在一个模型中估计所有的属性,而且将每个属性看成是一项任务,因此PAR也能看成是多任务学习。但同样的PAR很直观的也能理解成是一个多标签任务,因此下面从多任务和多标签两个方面介绍一下PAR的常规流程。
一般来说,基于深度学习的多任务学习有两种方法,即硬参数共享和软参数共享。硬参数共享通常是将浅层作为共享层来学习多个任务的共同特征表示,再将深层作为任务的特定层来学习更多的判别模式。这种是用的最多的,如下面左图所示:
对于软参数共享的多任务学习,是独立训练每个任务,但通过引入L2范数、跟踪范数等的正则化约束使不同任务之间的参数相似,如上面右图所示。
多标签分类算法一般有三种学习策略:
因此一般在模型构建的时候都会用以下两种方法:问题转换和算法自适应。下图是一些代表性的多标签学习算法的可视化图:
问题转化:
算法自适应:
下图是一个多标签PAR的常规流程:
现有的基于深度学习的PAR算法可以以end-to-end的方式联合学习特征表示和分类器以提高最终的性能。
这里从以下八个方面回顾一下基于深度学习的PAR算法:基于全局、基于局部部分、基于视觉注意力、基于序列预测、基于新损失函数、基于课程式学习、基于图模型和其他算法。
ACN:
提出了一个多分支分类层,用于学习每个属性的学习。采用预训练的AlexNet提取特征,使用KL-loss将最后一个全连接层替换为每个属性的一个loss,具体如下:
其中Q是网络的预测,P是二元属性的真实label。
DeepSAR和DeepMAR:
提出了如上图所示的DeepSAR和DeepMAR算法,以AlexNet为backbone,通过将最后一个dense的输出类别改成两个就可以得到DeepSAR了,再采用softmax loss来计算最终的分类损失。虽然DeepSAR可以用深度特征做二元分类的,但它还是没有对人类属性之间的相关性进行建模。因此他们提出了DeepMAR,同时获取人类图像极其属性标签向量,并通过sigmod交叉熵损失联合考虑所有的属性:
其中 是样本 的第 个属性的估计分数, 则是真实标签。而且,他们还考虑了实际监控场景中标签分布不平衡的问题,提出了改进的损失函数:
其中 是第 个属性的损失权重。 表示训练数据集中第 个属性的正比率。 是超参。
MTCNN:
提出了一种使用CNN进行属性估计的联合多任务学习算法。让CNN在不同的属性类别之间共享视觉知识,在CNN特征上采用多任务学习来估计相应的属性。由于知道任何关于特征统计信息的先验信息会对分类器有帮助,因此使用分解方法从总分类器权重矩阵W中获得可共享的潜在任务矩阵L和组合矩阵S,从而通过学习局部特征,即W=LS,灵活地全局共享和组间竞争。因此目标函数为:
其中 是训练数据, 是训练样本的第 个属性。 是总的潜在任务的维度空间。第 个属性类别的模型参数是 。
使用APG算法交替优化L和S,得到L和S后,就可以得到整体模型权重矩阵W。
总结:
上面的这些算法,对PAR做多任务学习都是以整个图像作为输入的,并尝试使用特征共享、端到端训练或者多任务平方最大铰链loss来学习更强大的特征表示。这些模型的优势是简单、直观、高效,但确点也很明显,就是缺乏对细粒度识别的考虑,模型的性能有限。
Poselets:
这篇文章的一个出发点是,如果能够从同一视点,分割出对应于同一身体部位的图像块,就可以更简单地训练属性分类器。但是对于当时2011年这个时间节点来说,那时候还不太能直接对身体部位进行定位。所以作者的设计是,将图像分解成一组部分,每个部分捕获对应于给定视点和局部姿势的显著模式。
上图是这个算法的流程,首先检测给定图像的poselet,然后通过拼接HOG、颜色直方图、皮肤蒙版特征来获得联合表示。然后再训练多个SVM分类器,分别用于poselet级、人物级、context级分类。poselet级的目标是确定在给定的视点下的人的给定部分是否存在属性、人物级的目标是组合所有身体部分的证据、context级的目标是将所有人物级分类器的输出作为输入并尝试利用属性之间的相关性。
这个工作比较早,那时候深度学习还不大行,这个后来出了一版深度学习版本的,叫deepposelet。
RAD:
这个从外观的方差入手,提出了一种局部学习的算法,以前的工作重点都是处理需要人工局部注释的几何变化的,比如说上面的poselet。如上图所示,这个设计首先将图像点阵划分为多个重叠的子区域(称为窗口)。定义了一个W×H大小的网格,网格上包含一个或多个网格单元的任何矩形都形成一个窗口。这种方法在局部窗口的形状、大小和位置方面都更加的灵活。以前的工作(例如空间金字塔匹配结构SPM)将区域递归的划分成四个象限,还要求所有子区域都是跟其他同级别区域不重叠的正方形。(PS:我感觉就是暴力堆上去的)
通过这些窗口,学习了一组与该个特定窗口在空间上相关联的局部检测器。对于每个窗口,所有相应的图像块都是从训练图像中裁剪出来的,并用HOG和颜色直方图特征描述来表示。然后用这些特征做K-means聚类,每个聚类就表示局部的特定外观类型。而且还用逻辑回归给每个聚类群训练了个局部检测器作为初始检测器,并通过再次将其应用到整个集合中来更新最佳位置和规模以迭代优化,处理聚类群嘈杂的问题。
后面的做法就跟poselet的一样了,将来自这些局部分类器的score跟权重聚合做最终的预测。
(PS:这个我感觉就是将poselet的局部框多画了一点,然后K-means将框聚一下类缩少一点,然后就套上去poselet的后处理框架就完了)
PANDA:
研究者们发现,有些属性的信息强弱是很微妙的,例如带没带眼睛,这个在整个人的尺度上来看,信息是很弱,而且还会随着头部姿势、遮挡等显著变化。因此他们提出联合全局图像和局部patch来进行属性识别,算法流程如上图所示。
先看a图,首先是检测poselet并提取人的部分(没想到居然又是poselet),然后用CNN提取局部patch和整个人图像的特征表示。没检测到的poselet就置零。所以这个模型,既利用CNN从数据中学习了判别数据的能力,又利用poselet通过将对象分解为规范的姿势来简化学习任务。最后将组合的局部和全局特征喂到线性分类器,其实就是个多属性估计的SVM。
再看b图的详细架构,以56×56×3的poselet的RGB patch作为输入,输出每个属性的相应分数和对应的全连接层。
因为这个工作用的是深层的特征,所以可以获得比以前的工作更强大的特征。而且他还从局部和全局角度处理,比只考虑全局图像的工作能挖掘处更多的信息。就这两点,效果就上去了。但是约束也多了:1. 局部定位,也就是poselet的准确性(我也很好奇,大家都基于poselet,这玩儿真的这么猛?);2. 没有端到端框架来学习特征;3. poselet有背景信息,会影响特征表示。
MLCNN:
这个提出了一种多标签的CNN,在一个框架中一起预测多个属性,网络流程如上图所示。将这个图分割成15个重叠的块,用CNN提取深层特征。再用对应的局部部分做特定属性的分类。
这个工作还尝试结合了ReID,将低级特征距离和基于属性的距离融合为最终距离来帮助ReID区分给定图像。
AAWP:
这个AAWP就是为了验证局部信息究竟对动作和属性识别有没有积极的作用。如上图(1)所示,CNN特征是在与要分类的实例相关联的一组边界框上计算的,也就是整个实例,提供的预测器或者人检测器和提供的类似poselet部分的检测器。这个的作者将人分成了三个部位,头部、躯干和腿部,并将每个部位的关键点聚集成几个不同的小波。因为作者用了深度特征金字塔而不是传统的poselet中的低级梯度方向特征,所以这个局部检测器又被叫做poselet的深度版本。作者还进一步研究了针对特定任务微调CNN,微调过的整体模型,可以跟PANDA这这些基于局部的系统有差不多的性能。这个系统可以分成两个模块,如(2)图所示的局部检测器模块和如(3)图所示的细粒度分类模块。
对于局部检测器模块,基于two-stage的RCNN来设计网络,即特征提取和局部分类。采用多尺度全卷积网络来提取图像特征。首先构建彩色图像金字塔并获得每个金字塔的pool5特征,然后用局部模型来获得对应的分数。因此这个问题就转化为了如果在给定的特征图金字塔中实现准确的局部定位了。为了解决这个定位问题,作者就是设计了三个身体区域并使用线性SVM训练局部检测器。对于细粒度分类,给定图像和检测到的部分,使用CNN获取fc7特征并连接成一个特征向量作为最终表示。再用预训练的线性SVM分类器来估计动作和属性。
这个工作主要是以更广泛的方式进一步拓展和验证局部的有效性和必要性。
ARAP:
这是端到端的框架,通过联合局部定位和多标签分类进行人体属性识别。如上图所示,框架包含多个子模块:初始卷积特征提取层、关键点定位网络、每个部分的自适应边界框生成器和每个部分的最终属性分类网络。这个网络包含三个损失函数:回归损失、纵横比损失、分类损失。
首先提取输入图像的特征途,然后进行关键点定位。对于给定的关键点,将人体分为三个主要的区域,并获得初始部分的边界框。另一方面就是将之前fc7层的特征作为输入并估计边界框调整参数。对于这些给定的边界框,采用双线性采样器提取对应的局部特征。最后再将特征输入到两个fc层做多标签分类就好了。
DeepCAMP:
这个设计是通过挖掘中等图像块来进行细粒度的人体属性识别。具体说就是训练了一个CNN来学习不同的patch块,叫做DeepPatch。而且还利用了上下文信息(如上图(2))让特征学习和patch聚类类迭代优化patch集(如上图(1))。
这个设计的亮点在于更好的嵌入可以帮助提高模型挖掘算法中聚类算法的质量。因此他们还提出了一种迭代算法,在每次迭代中,训练一个新的CNN来对前一次迭代中获得的集群标签进行分类来帮助改善嵌入。另一方面则是将来自局部patch和全局人体边界框的特征连接起来,改善中等信息的聚集。
PGDM:
PGDM应该是第一个尝试用行人姿势来做属性识别的工作。首先用预训练的姿势估计模型来估计给定人体图像的关键点,然后根据这些关键点提取局部区域,接着独立提取局部区域和全局图像的深层特征来做属性识别。最后将这两个分数融合到一起最终的识别。上图(a)是这个过程的可视化,图(b)是具体的流程。
如图(b)所示,这个算法有两个网络:主要网络和PGDM。其中PGDM的目标是探索可变性的身体结构知识以辅助行人属性识别。作者没有用标准训练数据的人体姿态信息,而是用的深度姿势估计模型。将现有的姿态估计算法嵌入到属性识别模型中,而不是拎出来做外部模型。然后直接训练了一个回归网络, 从现有姿势估计模型中获得的粗略真实姿势信息来预测行人姿势。只要获得了姿势信息,就可以用空间变换器网络(STN)将关键点转换为信息区域。最后用独立的网络从每个关键点相关区域进行特征学习。
DHC:
由于背景信息有时候也是很重要的,因此这个设计就使用了深层层次的上下文来辅助人体属性识别。具体实现就是,在网络中引入以人为中心的上下文和场景上下文。如上图所示,首先构建输入图像金字塔并将其全部通过CNN来获得多尺度特征途。在提取四组边界框区域的特征,即整个人、目标对象的检测部分、图像金字塔中的最近邻部分、全局图像场景。这四个的前两个分支是行人属性识别的常规做法,这个设计的特点在后两个。
因为用了上下文信息,这个网络要比常规的行人属性识别人物需要更多的训练数据。这个模型虽然能显著提高识别结果,但是这个算法看起来挺复杂的。
LGNet:
这个提出了一种定位指导网络,对不同属性对应的区域进行定位。如上图所示,这个框架还是遵循局部和全局框架的。采用Inception-v2作为backbone做特征提取。对于全局分支,用GAP获取全局特征,接着用全连接层输出属性预测。对于局部分支,使用1×1卷积为每个图像生成 c 类的激活图,其中 c 是所有数据集中的属性数。给定激活图后,可以通过裁剪相应激活图的高响应区域来为每个属性捕获一个激活框。同时还用了EdgeBoxes生成区域建议,以便从输入图像中获取局部特征。另外还考虑了提取的候选区域的不同贡献,不同的属性应该关注不同的局部特征。因此,作者们使用每个属性的类激活图作为指导来确定来确定局部特征对不同属性的重要性。具体说就是计算IOU,再线性归一化以加权局部特征向量做预测。最后融合一下全局特征和参与到局部特征的元素就可以做行人属性预测了。
总结:
上面的这些算法都是联合利用了全局和细粒度的局部特征的。通过外部的部位定位模块进行身体部位的定位。使用局部信息则显著提高了整体识别的性能。但同样的,他也有一些不足:
HydraPlus-Net:
HPNet引入了多向注意力(MDA)来对多个级别的多尺度特征进行编码辅助行人分析。如上图所示,主要包含两个模块:主要网络和注意力特征网络。主要网络是一个常规的CNN网络,注意力特征网络包括应用的多向注意力模块的多个分支到不同的语义特征级别。这两个网络共享相同的卷积架构,输出通过GAP和fc层连接和融合。输出层可以是用于属性识别的属性logits,也可以是用于ReID的特征向量。
对于注意力特征网络,给定特征图1、2、3。对特征图做1×1卷积运算,就可以得到注意力图 。这里有个不同点,这个注意力模块跟以往的基于注意力的模型不同,后者只是将注意力图塞回去同一个块,而这里不仅用这个注意力图处理特征图2,还用它来关注相邻的特征,例如特征图1和3。将一个单一的注意力图应用到多个块,让融合的特征在同一空间内编码多级信息分布。这个网络是按阶段训练的,输出层用于分别最小化人体属性识别和ReID的交叉熵loss和softmax loss。
VeSPA:
VeSPA考虑上了视图信息,因为作者发现,对于头发、背包、短裤这些属性,高度依赖于行人的获得视图。
如上图所示,图像喂入K层的Inceptions来获得特征表示。引入特定视图单元将特征图映射到粗略的属性预测上去。然后用视图预测器估计视图权重,注意力权重用于乘到特定视图的预测上以获得最终的多类属性预测。
视图分类器和属性预测器是用单独的loss训练的,而且整个网络是一个统一的框架,可以做端到端训练。
DIAA:
DIAA算是PAR的集成方法了。这个模型有多个模块:多尺度视觉注意力和用于深度不平衡分类的加权focal loss。对于多尺度视觉注意力,从上图可以看出,作者用了来自不同层的特征图。他们提出了加权focal loss来衡量预测属性向量和真实标签之间的差异:
其中 是用来控制基于当前预测的实例级别的加权参数,着重强调hard样本。 和 是第c个属性的先验类分布。
而且他们还建议用弱监督的方式来学习注意力图(只有属性标签,没有特定的边界框注释),通过引导网络将其资源集中到那些包含输入图像相关信息的空间部分来提高分类性能。如上图右侧部分所示,注意力子网络以特征图 为输入,并输出维度为 的注意力mask。然后将输出喂回去注意力分类器以估计人体属性。由于注意力模块训练的监督信息是有限的,作者们用了前人的一些工作来预测方差,跨时间具有高标准差的注意力mask预测会给更高的权重用以引导网络学习不确定的样本。收集第s个样本的预测历史H并计算小batch中每个样本的时间标准偏差,因此每个样本s的具有属性级监督的注意力图的损失可以通过以下方式获得:
其中 是二元交叉熵loss, 是标准差。
所以最后端到端训练这个网络的总loss是主网络和两个注意力模块的loss之和。
CAM:
这个设计提出使用和细化注意力图来提高人物属性识别的性能。如上图所示,模型包含两个模块:多标签分类子网络和注意力图细化模块。CAM网络中,不同的属性分类器对全连接层具有不同的参数。用FC层的参数作为权重,将最后一个卷积层中的特征图进行线性组合,以获得每个对象类别的注意力图。但是,由于低分辨率、过拟合等因素,这种注意力机制的简单实现是无法一直关注正确的区域的。
为了解决这个问题,作者们通过调整CAM网络来优化注意力图。根据注意力图的密度来衡量注意力图的适当性,并试图使注意力图突出显示较小但集中的区域。具体说就是引入了一个加权平均层来获得注意力图,然后用平均池化对分辨率做下采样来捕获所有潜在的相关区域的重要性。接着用softmax将注意力图转成概率图,最后就可以通过全局平均池化来获得最大概率了。而在这个最大概率的基础上,他们又提出了一个新的loss来衡量注意力热图的适当性:
其中 是图像 和属性 的最大概率。 和 则是超参, 是概率图的平均值。 是注意力图的大小。训练网络的时候,先通过最小化分类对CAM网络进行预训练,然后用联合loss对整个网络做微调就好了。
总结:
虽然现在已有工作在PAR里面引入注意力机制,但是还是有限的,怎么设计新的注意力模型还需要进一步的探索。
CNN-RNN:
常规的多标签图像分类框架给每个类别学习独立的分类器并对分类结果做ranking或者用阈值卡一下,这种做法没有明确的利用图像中的标签依赖性。这个工作就是最早采用RNN解决这个问题的,结合上CNN来学习联合图像标签嵌入来表征语义标签依赖性和图像标签相关性。如上图所示,红色和蓝色点分别表示标签和图像嵌入,求和一下图像和循环神经网络的输出嵌入再用黑色点来表示。这种机制可以通过顺序链接标签嵌入来对联合嵌入空间中的标签依赖性进行建模。
对于CNN-RNN的推理,先试图找到最大化先验概率的标签序列,再对排名靠前的预测路径用束搜索算法做为估计结果。训练的话可以通过交叉熵loss和时间BP来实现。
这个模型跟图像标题任务的模型很像,都是一个图像输入,在编解码框架中输出一系列的word。区别就在于caption模型是输出一个句子,CNN-RNN模型输出属性。所以这里有一个trick就是用图像字幕的技术来辅助提升PAR的性能。
JRL:
这个设计建议通过探索属性和视觉上下文之间的相互依赖和相关性来解决PAR中的诸如图像质量差、外观变化、注释数据稍等问题,作为辅助属性识别的额外信息源。所以JRL是被提出来联合循环学习属性上下文和相关性的,流程如上图所示。
为了更好地挖掘这些额外的信息以进行准确的人体属性识别,作者们用了序列到序列的模型来处理这个问题。将给定的任务图像 划分为 个水平条带区域,并按照从上到下的顺序形成一个区域序列 。得到的区域序列S可以看作是自然语言处理中的输入句子,用LSTM按顺序编码。最终的隐藏状态 可以被看作是整个人图像的汇总表示 。这个特征提取过程可以对每个人体图像 中的人内部的属性上下文进行建模。
为了挖掘更多的辅助信息来处理目标图像中外观模糊和图像质量差的问题,作者借助视觉上相似的训练图像,通过引入这些样本来对人体间相似性上下文约束进行建模。首先基于L2距离用CNN特征搜索与目标图像相似的top-k样本,并计算其自身的上下文向量 ,然后所有的上下文向量表示都被集成为具有最大池化操作的人体间上下文 。
在解码的时候,解码器LSTM将人体内属性上下文 和人体间相似性上下文 作为时间步长的输入和输出可变长度属性。这个设计的属性预测,也可以看成是一种生成方案。为了更好地针对特定属性关注人体图像的局部区域并获得更准确的表示,还引入了注意力机制来关注人体内属性上下文。而对于最终的属性估计顺序,则采用集成思想来合并不同顺序的互补优势,从而在上下文中捕获属性之间更多的高阶相关性。
GRL:
GRL是基于JRL做的,同样用RNN模型以顺序方式预测人体属性,跟JRL不同的是,GRL是按组逐步识别人体属性并同时关注组内和组间关系。如上图(1)所示,作者将整个属性列表分成了许多组,组内的属性是互斥的,而组件时有关系的。算法流程如上图(2)所示,这是一种端到端的单模型算法,不需要预处理,而且还利用了分组的人体属性之间更多的潜在的组内和组间依赖性。
如图所示,给定人体图像,首先检测关键点并使用身体区域生成模块定位头部、上半身、下半身区域。接着用Inception-v3提取整个图像的特征,再使用ROI获得局部特征。需要注意的是,同一组中的所有属性共享相同的全连接特征。考虑到全局和局部特征,他们还用LSTM对属性组中的空间和语义相关性进行了建模,然后将每个LSTM单元的输出反馈到全连接层,从而获得预测向量。
JCM:
前面提到的JRL、GRL这些基于序列预测的PAR算法,由于RNN对齐能力弱的问题,很容易受到不同的人工划分和属性顺序的影响。因此这里就提出了一种联合CTC-Attention模型进行PAR,可以一次预测任意长度的多个属性值,避免映射表中属性顺序的影响。
如上图所示,JCM是一个多任务网络,包含属性识别和ReID两个任务(PS:来了来了ReID他来了)。使用ResNet-50作为backbone给这两个人物提取特征。对于属性识别,用Transformer作为长属性序列对齐的注意力模型,而且还用上了CTC loss和交叉熵loss来训练网络。对于ReID任务,就直接用两个全连接层来获取特征向量并使用softmax loss来优化这个任务分支。
测试的时候,JCM可以同时预测人员的身份和他的一组属性,还可以用束搜索来解码属性序列。
RCRA:
这个提出了两个模型Recurrent Convolutional(RC)和Recurrent Attention(RA)来做PAR,如上图所示。RC模型用于探索不同属性组与Convolutional-LSTM模型之间的相关性,RA模型则是利用组内空间局部性和组间注意力相关性来提高性能。
具体说就是将所有的属性划分为多个属性组,类似与GRL的做法。对于每个行人图像,用CNN提取特征图后逐组喂到ConvLSTM层,然后在ConvLSTM后加卷积,就可以得到每个时间步长的新的特征图了,最后只要将特征用到当前属性组的属性分类就好了。
基于这个RC模型,再引入视觉注意力模块来突出特征图上的ROI。给定每个时间步长 的图像特征图 和注意力热图 ,就可以通过下面的方法获得当前属性组的注意力特征图 :
训练的loss是基于WPAL网络提出的加权交叉熵损失。
总结:
前面的算法都用了顺序估计过程。因为属性是相互关联的,所以他们都有不同的难度,因此用RNN来对属性做估计是一个很有意思的想法。这些算法中,他们将不同的神经网络、属性组、多任务学习继承到一起。跟基于CNN的方法比起来,这些算法更加优雅和高效。但还是有缺点的,由于连续属性估计的缘故,这些算法的时间效率还是有待改进。未来的工作中,还需要更有效的序列属性估计算法才行。
WPAL-network:
WPAL的提出是想要以弱见度的方式来同时识别和定位人体属性。如上图所示,用GoogLeNet做backbone,融合来自不同层的特征并输入到灵活的空间金字塔池层(FSPP)中。这种跟常规的全局最大池化相比,FSPP的优势有两点:
每个FSPP的输出被喂到全连接层,输出一个跟行人属性数量相同的向量。
网络训练的时候,可以同时拟合两个目标:学习属性与随机初始化的中级检测器之间的相关女性;使检测器的目标中级特征适应于相关属性。这样做的话,学习到的特征和中级特征的检测结果就可以在后面的定位人体属性的时候用了。
这类就是说一下他的loss了,前面有个工作用的就是这里提出的加权交叉熵loss来处理大多数属性类别的正负样本不平衡分布:
这里的 是属性数量, 是真实的属性向量, 是估计的属性向量, 是权重向量,表示正标签在训练数据集中所有属性类别的比例。
AWMT:
众所周知,各种属性它的学习难度是不一样的,而现在大多数的算法都忽略了这个,在多任务学习框架里面直接共享相关信息,导致出现负迁移。AWMT则建议研究一种好用的共享机制,可以动态和自适应地协调学习不同人体属性任务的关系。具体说就是提出了一个自适应加权的多任务深度框架来联合学习多个人体属性,以及一个验证loss趋势的算法来自动更新加权loss层的权重,网络如上图所示。
网络用ResNet-50做backbone,这个有点特别,是用训练和验证数据图像作为输入的,同时获得训练loss和验证loss。验证loss用来更新权重向量 ,然后用于对不同的属性学习进行加权。自适应加权loss函数如下:
其中 表示神经网络的参数, 是衡量学习第 个属性的任务的重要性尺度。 表示mini-batch中的第 个图像, 是图像 的属性 的真实标签。 是输入图像 在神经网络层参数 下的预测属性。<>是内积运算。
这里有个关键的问题是,怎么自适应地调整权重向量 。作者们提出了验证loss趋势算法这个东西,这也是为什么要这么奇怪的把验证loss也喂进去。这个算法直觉是:在同时学习多个任务时,重要的任务应该被赋予高权重以增加相应任务的loss规模。但问题是我们怎么知道哪个任务更重要,或者说是我们怎么衡量一项任务的重要性?
这里作者们就提出将泛化能力作为客观衡量的标准。具体说就是他们认为泛化能力较低的应该要设置更高的权重。权重向量 每 次迭代更新一次,用于计算训练数据的loss并在BP的时候更新 。
总结:
WPAL是为数不多为PAR任务设计loss的工作,而且这个loss以及广泛应用于很多PAR算法中了。AWMT则关注于hard任务。这些工作充分证明了设计新颖的loss函数以更好地训练PAR网络的必要性。
MTCT:
这个提出了一个多任务的课程式迁移网络来解决缺乏手动标记训练数据的问题。如上图所示,这个算法主要包括多任务网络和课程式迁移网络。
对于多任务网络,他们用五个堆叠的NIN卷积单元和N个并行分支,每个分支代表三层全连接子网络,分别用于对N个属性之一进行建模。模型训练用的是softmax loss。
作者们用课程式迁移学习策略进行服装属性进行建模。具体说就是两个stage,第一个stage用干净的源图像和属性标签来训练模型,在二个stage,则嵌入跨域图像对信息,同时将更难的目标图像附加到模型训练过程中来,以捕获更难得跨域知识。训练网络用的loss是tSTE。
CILICIA:
如上图所示,跟MTCT类似,CILICIA也是引入课程式学习,从易到难学习属性。CILICIA探索不同属性学习任务之间的相关性,并分为强相关和弱相关任务。具体说就是在多任务框架下,用各自的皮尔逊相关系数来衡量强相关的任务。
对不同的属性学习任务进行加权,最直观的就是学习另一个分支网络进行权重学习。然而,作者发现这玩儿其实没啥用。因此他们选择用监督迁移学习技术来帮助弱相关组中的属性学习。
他们后面还提出了CILICIA-v2,提出了一种使用层次聚类获得任务组的有效方法。可以做任意数量组,不再局限于强弱相关。具体说就是用计算出的皮尔逊相关系数矩阵来用ward方差最小化算法做分层的凝聚聚类。Wards方法偏向于生成相同大小的集群,并分析所有可能的链接集群对来确定哪个联合产生最小的集群平方和(WCSS)误差。所以可以通过WCSS阈值操作来获得属性组。对于每一个组,只通过集群内各自的皮尔逊相关系数进行排序来计算集群的学习序列。只要所有集群的总依赖关系形成后,课程式学习过程就可以按照降序开始了。
总结:
受到认知科学进展的启发,开始给PAR上课程式学习这种由易到难的学习机制。当然诸如自步学习这些算法,可以用进来做多标签学习。
DCSA:
这里作者用条件随机场(CRF)对人体属性之间的相关性进行建模。如上图所示,先用现成的算法估计姿势信息,并仅定位上半身的局部部位(下半身因为被挡住了就忽略了)。然后从这些区域中提取四种类型的基本特征,包括SIFT、纹理描述符、LAB空间中的颜色、皮肤概率。融合这些特征再通过SVM训练多个属性分类器。这个工作的核心思想就是用全连接CRF来探索属性之间的相互依赖关系。将每个属性函数看作CRF的一个节点,连接每两个属性节点的边反映了这两个属性的联合概率。
A-AOG:
A-AOG被提出以明确表示身体部位的分解和连接,并解释姿势和属性之间的相关性。这个算法是基于AndOr图开发的,and节点表示分解或依赖;Or节点表示分解或部件类性的替代选择。具体说他包含了三类语法:短语结构语法、依存语法和属性语法。
A-AOG被定义为一个五元组: ,其中
根据上面的定义,解析图可以表示成:
(PS:讲道理,就冲他这个解析图,我就觉得他是最靠谱最好用的算法了)
VSGR:
这个工作,通过视觉语义图推理来估计行人属性。作者们认为,人体属性识别的准确性受到以下的一些因素的影响:
因此他们建议使用基于图的推理框架对区域-区域、属性-属性、区域-属性的空间和语义关系进行联合建模。算法流程如上图所示。
算法包含两个子网络:视觉到语义子网络和语义到视觉子网络。对于第一个网络,首先将人体图像划分为固定数量的局部部分,构造一个图,节点是局部部分,边是不同部分的相似性。跟常规的建模不同,这里用局部部分之间的相似关系和拓扑结构将一个部分与其相邻区域连接起来。
第二个网络也是类似的处理,两个子网络的输出融合为最终预测,而且这个网络可以以端到端的方式来训练。
总结:
图模型是最早的引入PAR来挖掘多个属性中关系的模型。虽然这些基于图的算法有很多优点,但这些算法看起来比其他算法更复杂,实际场景中也需要考虑一下效率的问题。
(PS:感觉跟现在的DL发展很像,CNN都变传统方法了,到处都在做图图图,但图落地的确实不太多)
Patchlt:
常规的卷积网络都是在辅助任务上用预训练模型做权重初始化的,但这种做法会将网络限制成跟现有的架构类似。因此Patchlt提出了一种自监督的预训练方法来做PAR的权重初始化。它的关键亮点在于利用来自与目标任务相同领域的数据进行预训练,而且它还只依赖与自动生成而不是人工标注的标签。所以可以很方便的为这个任务找到大量的未标记的数据。
他这个其实也不复杂,就是将这个问题定义成K类的分类问题,如上图所示。首先将图像划分为多个不重叠的局部patch,然后让网络预测给定patch的来源。作者们这里是用这个算法获得VGG16卷积层的初始化然后应用到PAR的。
FaFS:
多任务学习的目标是在这些任务之间共享相关信息来帮助提高最终的泛化性能。大多数手工设计的深度神经网络同时进行共享和特定于任务的特征学习。跟现有的工作不同,FaFS提出来自动设计紧凑的多任务深度学习架构。这个算法从一个比较薄的多层网络开始,并在训练的过程中以贪婪的方式动态加宽。通过重复这个扩展的过程来构建树状的深层架构,类似的任务会驻留在同一个分支中,直到到达顶层,上图展示了这个过程。
GAM:
这个工作则是建议用深度生成模型来处理行人属性的遮挡和低分辨率问题的。具体说就是三个子网络:属性分类网络、重建网络、超分辨率网络。
对于属性分类网络,也是用了联合全局和局部部分做最终的属性估计,如上图所示。为了处理遮挡和低分辨率问题,引入了深度生成对抗网络来生成重建和超分辨率图像,并将预处理后的图像作为多标签分类网络的输入进行属性识别。
其实到这,这篇paper基本就完了,后面都是一些应用和PAR未来可以做的一些工作了,我就简单写一写得了。
人体属性识别还是一个比较复杂的工作,而且看下来,貌似跟“行人”类的任务绑定的很紧密,PAG+ReID就是很常见的结合,这个看起来是更加适合监控场景使用了。