论文笔记: FSA-Net

FSA-Net是针对头部姿态估计的深度学习模型,通过精细结构聚合学习提升性能。该文介绍了FSA-Net的结构,包括Two Stream设计和Feature Aggregation,使用注意力机制优化特征表示。实验表明,FSA-Net在头部姿态估计任务中取得了最先进的结果。
摘要由CSDN通过智能技术生成

论文笔记: FSA-Net:Learning Fine-Grained Structure Aggregation for Head Pose Estimation from a Single Image

简介

这篇工作目前看下来,给我的总体感觉就是hopenet的后续版,introduction和related work和hopenet论文里写的差不多。但由于改进了网络的结构,
原文《FSA-NET》
原代码 https://github.com/shamangary/FSA-Net。

Attention机制

由于自己一开始做头部姿态的初衷就是出于人类注意力分析的工程目的,而且attention detection这一头部姿态的目的也在前面的introduction中出现过,因此在文中看到Attention下意识以为指的是头部姿态,细读才发现attention是作为一个CV的学术名词出现的。
由于自己读过的论文太少,Attention这个概念还是我第一次读到。
大体来说,是为了实现提取有用信息,除去无用信息的目的,类似于机器学习中的主成分分析。
叫做attention机制,正是因为它的思想就是模拟了人类注意力的生物特性。注意力信息

注意力机制是人类视觉所特有的大脑信号处理机制。人类眼睛快速扫描全局图像的同时,会下意识地获得需要重点关注的目标区域,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。

因此当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。实际上这种方法在深度学习中也经常会使用,比如池化、卷积的局部连接,我觉得也算是一定程度上在实现注意力机制。

SSR-NET的结构

SSR本身指的是Soft Stagewise regression。SSR-NET是原文的作者在过去做的工作[2],做的是年龄估算的工作。受到DEX[3]的启发,SSR-NET把回归问题也把年龄估算看作是一个分类问题来处理。DEX是将一个年龄分成几个不同的阶段(bins),再把每一个阶段都当作是一个类别来看待,输出的概率即为年龄分布的概率,再将该阶段取代表性年龄μ。对于一个 s 类的分类模型,取其每一类的概率与当前类的代表年龄的加和作为最终的预测值:
{%asset_img 2.png [func1]%}

而SSR-NET与DEX不同的是,SSR-NET选择分阶段执行DEX的预测操作,再对不同阶段的值进行融合。
简单来就是第一阶段(0,30)(30,60)(60,90),那么第二阶段就是(0,10)(10,20)(20,30)。

SSR-NET给出的预测结果的公式如下所示:
{%asset_img 3.png [func2]%}

作者除了多阶段预测以外,在这里还使用了一个trick,年龄是连续的,而且有一定的不确定性,将年龄段划分为无交集的区域并不合适,因此引入了shift vector η和scale factor Δ,对预测结果进行调整。

a shift vector η(k) adjusts the center for each bin and a scale factor ∆ scales the widths of all bins at the k-th stage, thus modifying the representative ages μ(k).

同时scale factor、shift vector以及分布p都是可学习的,最终映射到连续结果,最终SSR-NET的结果在年龄预测这一问题的效果有提升。

虽然FSA-NET与SSR-NET有巨大的关联。但这里和年龄估算不同的是,FSA-Net是对姿态进行估算,他有3个数值,是一个矢量,而非一个像年龄一样的标量。作者将用SSR-NET预测多维结果的形式称为SSR-NET—MD,后续并将其结构略做修改。

尽管SSR-NET—MD已经能够取得不错的效果,但在特征融合方面依然有提升空间,也就是可以利用attention机制学习到更好的表达。

最终修改部分结构的SSR-NET以及添加了特征融合的网络也就是FSA-NET。
{%asset_img 4.png [architecture1]%}

除了多段预测以外,SSR-NET还有一个特点,那就是使用了互补的Two Stream的结构。这部分是受到了参考文献[3]的启发,据说通过这种方式,可以探索不同的特征,他们的融合也可以提高性能。以后有空的话去专门了解一下。

FSA-NET的结构

下面就是本篇文章的重头戏了。论文看了很久,这部分也没能感觉特别清晰。但还是尽量把自己理解的东西记录下来吧。

首先,下图是FSA-NET的结构:
{%asset_img 5.png [architecture2]%}

流程简单来说,Two Stream会先进行element-wise multiplication,再使用11卷积,后面再接池化,类似于SSR-NET,最终得到wh*c大小的特征图。特征图的每个网格都是c维度的空间向量,代表了一定的空间局部信息。然后把Uk送入到映射模块中,最终产生k个c’维度的特征向量,这k个c’维度的特征向量的向量用于姿态的预测。也就是利用他们去获得SSR所需要的p、η、μ和Δ等参数。

Two Stream

首先就是类似SSR-NET的Two Stream和多个stage的数据,但具体的网络结构相较于SSR-NET发生了变动,每条stream具体Building Block安排得不太一样。

Feature Aggregation

除此之外,就是Fine-grained structure feature aggregation的部分,也就是将Uk送入,最终产生k个c’维度的特征向量的模块。也就是这部分较为难懂,我觉得这部分的工作也是这篇文章能够被CVPR录用的原因,毕竟SSR-NET是过去的工作,换个皮的话,不会被别人认可的(其实我觉得hopenet就是resnet换了个皮…)。

aggregation 模型的的任务就是对前面得到的Uk进行提炼,也就是上图的右侧部分。

类似于pooling的操作,最终从Uk中提炼到更加有用的信息,最终获得更小的,K*c‘维度的向量。

目前存在的Aggregation的方法,主要有capsule和NetVLAD两种。但正如introduction讲到的,两种方法都忽略了特征图中的空间信息。因此在执行aggregation前,作者对特征进行了空间分组。作为aggression输入的带有空间信息的特征,相比于像素级特征,会更有效果。

为了有效地对Uk进行空间分组,作者使用了注意力机制。即后面介绍的scoring function。先通过scoring function先计算得到一个Ak,下一步把Ak和Uk一起送入到fine-grained structure mapping module中,从而得到最终K*c‘维度,从而对向量进行SSR的计算。

Scoring function

为了更好地对特征进行空间分组,需要去测量像素级特征的重要性,也就是前面提到的注意力机制。作者设计了一个评分的函数Φ(u)来评估特征的重要性从而更好地进行空间分组。每一个特征图Uk都有一个对应的Ak,Ak(i,j

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值