[论文理解] Attentional Pooling for Action Recognition

Attentional Pooling for Action Recognition

简介

这是一篇NIPS的文章,文章亮点是对池化进行矩阵表示,使用二阶池的矩阵表示,并将权重矩阵进行低秩分解,从而使分解后的结果能够自底向上和自顶向下的解释,并巧用attention机制来解释,我感觉学到了很多东西,特别是张量分解等矩阵论的知识点。

基础概念

低秩分解

目的:去除冗余并减少模型的权值参数

方法:使用两个K*1的卷积核代替掉一个K*K的卷积核

原理:权值向量主要分布在一些低秩子空间,使用少量的基就可以恢复权值矩阵

数学公式(本文):
\[
W \in R^{f \times f}\\那么W矩阵可以分解为\\W = ab^T\\其中a、b \in R^{f \times 1}\\]
这样就用两个1*f的矩阵去表示原来的f*f的矩阵,本文中是将矩阵做 rank-1分解,也就是分解后的矩阵a和b的秩为1,当然也需要做多组实验确定分解的秩为多少最合适。

普通池化

普通池化可以用下面的公式来表示(n = 16*16 = 256,是特征宽高乘积,f为特征通道数):
\[
score_{pool}(X) = 1^TXw\\这里X \in R^{n \times f}, 1 \in R^{n \times 1}, w \in R^{f \times 1}\\写开来就是\\1^{T}X = \begin{bmatrix}1 \\ 1 \\ \cdots \\ 1\end{bmatrix}_{n \times 1}^{T} \times \begin{bmatrix}x_{1,1} & \cdots & x_{1.f} \\x_{2,1} & \cdots & x_{2,f} \\\vdots & \vdots & \vdots \\x_{n,1} & \cdots & x_{n,f}\\\end{bmatrix}_{n \times f}
\]

可以理解为先对特征进行在空间维度上进行全局求和,得到f个结果,然后再对这些结果利用权值矩阵加权求和就得到最终的pooling结果,pooling的结果为一个scalar。

一般avgpooling可以将该式特殊化,也就是X为n*1的张量,对每个通道执行同样的操作,1和w矩阵都是常值。maxpooling的1矩阵不为全1,最大值对应的那个位置为1.

二阶池

本文提出了二阶池的方法,具体如下:

这里我直接从论文中拷出来了,没有自己手打。

这里文章说到二阶池对fine-grained classification的结果有帮助,然后把W做低秩分解,公式就变成了:

其中利用到了矩阵Tr的特点就不解释了。

那么这样分解有什么好处呢? 我觉得这就是本文的一个精髓,可以自顶向下和自底向上来解释公式,公式的可解释性为本文加分很多。

自底向上解释

我们看到公式(6)里先算的是Xb,这里得到的结果是一个n*1的矩阵,这个矩阵刚好可以看成一个attention map,那么作者对他的解释就是由底层特征到高层特征映射过程中生成的attention map,用于评估位置特征。并且,这里的b是针对每个类别都一样的,所以可以自底向上解释,而a是每个类别要学习一个特定的a,所以a的解释是自顶向下的。

自顶向下解释

如上所说,自顶向下解释主要是对a的解释,从上面的公式其实已经可以自底向上解释了,但是作者又做了一步化简:

这里我们看到公式被化成了(8)式,这样其实更加直观,Xa得到的是自顶向下与类别相关的结果,而Xb得到的则是自底向上的与类别无关的结果,两者做矩阵乘,得到最终的结果。这种分解方法我感觉很奇妙,而且解释性非常好。

拓展-张量分解

详见博客:http://www.xiongfuli.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2016-06/tensor-decomposition-cp.html

CP分解

可以对张量做低秩近似,所以这里也可以做很多工作。

Tucker分解

也是一样的。上面那篇博客讲的很详细。也是可以做低秩近似。

所以这个方向是个很神奇的方向,我觉得后面可以做很多东西。需要深厚的数学功底。

网络结构

一张图带过吧。因为本位是做human pose的,所以网络结构是针对pose的。结构非常简单,用了两种方法,我们看一下method 2吧。

直接映射到17个channel的特征层,前十六个是pose map,用于预测关键点的,最后一个是attention map,这里的attention map是pose map的by-product,也就是说利用pose map去帮助分类,所以attention map再与Xa作用,最终的结果做分类,这样的一个思路。

后面实验就不看了,我也不是做这个的。。

结论

二阶池对局部特征的描述更加丰富。

低秩分解可以用来做attention。

Coding

自己实现一下文章中的method 2吧。

'''
@Descripttion: This is Aoru Xue's demo, which is only for reference.
@version:
@Author: Aoru Xue
@Date: 2019-10-27 13:11:23
@LastEditors: Aoru Xue
@LastEditTime: 2019-10-27 13:18:40
'''
import torch
import torch.nn as nn
from torchsummary import summary
from torch.autograd import Variable
class AttentionalPolling(nn.Module):
    def __init__(self):
        super(AttentionalPolling, self).__init__()
        self.conv = nn.Conv2d(128,16,kernel_size = 1)
        self.a = Variable(torch.randn(1,10,128,1))
        self.b = Variable(torch.randn(1,128,1))
    def forward(self,x):
        feat = self.conv(x)
        # (64*64,128) @ (128,1) -> (64*64,1)
        #print(x.permute(0,2,3,1).view(-1,64*64,128).size())
        xb = x.permute(0,2,3,1).contiguous().view(-1,64*64,128) @ self.b
        #print(xb.size())
        xa = x.permute(0,2,3,1).contiguous().view(-1,1,64*64,128) @ self.a
        xa = xa.permute(0,1,3,2).contiguous().view(-1,10,1,4096)
        xb = xb.view(-1,1,4096,1)

        output = xa @ xb
        print(output.size())
        return output.view(-1,10)

if __name__ == "__main__":
    net = AttentionalPolling()
    summary(net,(128,64,64),device = "cpu") # feature X

    '''
    torch.Size([2, 10, 1, 1])
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1           [-1, 16, 64, 64]           2,064
================================================================
Total params: 2,064
Trainable params: 2,064
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 2.00
Forward/backward pass size (MB): 0.50
Params size (MB): 0.01
Estimated Total Size (MB): 2.51
----------------------------------------------------------------
    '''

论文原文:https://arxiv.org/pdf/1711.01467v2.pdf

原文地址:https://www.cnblogs.com/aoru45/p/11747275.html

时间: 2024-07-30 21:37:25

[论文理解] Attentional Pooling for Action Recognition的相关文章

201904Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptors

论文标题:Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptors 来源/作者机构情况: 卧龙岗大学,第一次听说这个学校.竟然是在澳大利亚的一个学校.好吧,华人果然全球了 解决问题/主要思想贡献: 使用一个加权协方差因子,来积累前几帧的信息,使用增强学习来实现online learning,可以不用使用分好段的视频来预测动作 成果/优点: 缺点: 反思改进/灵感

【CV论文阅读】+【搬运工】LocNet: Improving Localization Accuracy for Object Detection + A Theoretical analysis of feature pooling in Visual Recognition

论文的关注点在于如何提高bounding box的定位,使用的是概率的预测形式,模型的基础是region proposal.论文提出一个locNet的深度网络,不在依赖于回归方程.论文中提到locnet可以很容易与现有的detection系统结合,但我困惑的是(1)它们的训练的方法,这点论文中没有明确的提到,而仅仅说用迭代的方法进行(2)到底两者的融合后两个网络的结构是怎样呢?可以看做一个多任务的系统,还是存在两个网络呢? 检测方法 输入的候选bounding box(使用selective s

【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition 2018-01-28  15:45:13  研究背景和动机: 行人动作识别(Human Action Recognition)主要从多个模态的角度来进行研究,即:appearance,depth,optical-flow,以及 body skeletons.这其中,动态的人类骨骼点 通常是最具有信息量的,且能够和其他模态进行互补.

动作识别新论文:A Novel Scheme for Training Two-Stream CNNs for Action Recognition

A Novel Scheme for Training Two-Stream CNNs for Action Recognition 创新点 1.使用cur算子来代表运动信息 2.提升了速度运算 3.依然是使用双端网络模型 4.对训练的的时候,收敛条件的判断,可以提速: pdf地址: https://link.springer.com/content/pdf/10.1007%2F978-3-030-33904-3.pdf 代码地址: 原文地址:https://www.cnblogs.com/ca

Spatio-temporal feature extraction and representation for RGB-D human action recognition

propose a novel and effective framework to largely improve the performance of human action recognition using both the RGB videos and depth maps. The key contribution is the proposition of the sparse coding-based temporal pyramid matching approach (Sc

[论文理解] CornerNet: Detecting Objects as Paired Keypoints

[论文理解] CornerNet: Detecting Objects as Paired Keypoints 简介 首先这是一篇anchor free的文章,看了之后觉得方法挺好的,预测左上角和右下角,这样不需要去管anchor了,理论上也就w*h个点,这总比好几万甚至好几十万的anchor容易吧.文章灵感来源于Newell et al. (2017) on Associative Embedding in the context of multi-person pose estimation

Human Action Recognition Using Kinect

Abstract: In this paper, a general approach for human action recognition is applied for classifying human movements into action classes . The propose method uses Kinect for capturing depth  stream. The system performs preprocessing on depth informati

《Real-Time Compressive Tracking》论文理解

     这是Kaihua Zhang发表在ECCV2012的paper,paper的主题思想是利用满足压缩感知(compressive sensing)的RIP(restricted isometry property)条件的随机测量矩阵(random measurement matrix)对多尺度(multiple scale)的图像特征(features)进行降维,然后通过朴素贝叶斯分类器(naive Bayes classifier)对特征进行分类预测目标位置.   首先介绍下paper

[论文理解]关于ResNet的进一步理解

[论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡献就是,证明了即使是深度网络,也可以通过训练达到很好的效果,这跟以往的经验不同,以往由于网络层数的加深,会出现梯度消失的现象.这是因为,在梯度反传的时候,由于层数太深,传递过程又是乘法传递,所以梯度值会越乘越小,梯度消失在所难免.那么怎么才能解决这个问题呢?resnet提供了很好的思路. 怎么解决