美文网首页Paper
基于人体骨架序列的视频行为识别

基于人体骨架序列的视频行为识别

作者: 谢小帅 | 来源:发表于2019-08-22 10:56 被阅读0次

    整体思路

    Reference: Yan S, Xiong Y, Lin D. Spatial temporal graph convolutional networks for skeleton-based action recognition[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.

    fig1. ST-GCN architecture

    1. 基于 OpenPose 的 2D 多人 姿态/骨架 估计

    • 输入:RGB image 或者 video sequence
    • 输出:人体关节点位置和可信度 (x, y, confidence)

    OpenPose 总共估计人体 18 个关节点,关节点顺序和名称如下图:

    fig2. OpenPose 18 joints

    2. build Spatial-Temporal Graph on skeleton sequence

    • Nodes: V = \{ v_{ti} | t = 1, ...,T, i=1,...,N \}
      T 表示 skeleton sequence 帧数,即 T 个时刻,N 表示N个人的骨架
      t 表示 temporal 联系,inter-frame;i 表示 spatial 联系,intra-skeleton

    • Feature vector on a node F(v_{ij}) = (x,y, confidence)

    • Edges = spatial + temporal
      E_S = \{ v_{ti}v_{tj}|(i,j)∈H \} intra-skeleton, H 表示 joints in a skeleton,如 fig2 OpenPose 关节点的连接方式
      E_F = \{ v_{ti}v_{(t+1)i} \} inter-frame,连续帧之间的对应关节点连接起来

    fig3. Spatial-Temporal Graph of a skeleton sequence

    注:spatial graph 理解为单帧中的骨架图,temporal graph 为多帧之间相应关节点的连接图

    3. Graph Convolution details

    3.1 传统图像在坐标点 x 位置的 conv

    f_{out}(x) = \sum_{h=1}^{K}\sum_{w=1}^{K}f_{in}(p(x,h,w)) · w(h,w)

    • f_{in}, f_{out}:input, output feature map
    • p(x,h,w):表示位置 xh × w 邻域
    • w(h,w):表示邻域内相应位置点的权值
    3.2 图卷积在顶点 v_{ti} 位置的 conv
    • f_{in}:input feature map
      对于图卷积,f_{in}^{t}: V_t → R^c 表示 t 时刻输入的 feature map,即为 t 时刻的 spatial graph V_t,而 R^c 表示图中顶点的 feature vector 有 c 个通道。
      定义完输入的 feature map 后,再定义邻域采样函数 p(v_{ti},v_{tj}) 和权值函数 w(v_{ti},v_{tj}) 就能完成卷积运算了,这里 pw 表示方法与传统 Conv 不同。

    • p(v_{ti},v_{tj}) 邻域采样函数
      B(v_{ti})= \{ v_{tj}|d(v_{tj},v_{ti}) \leq D\}

      • d(v_{tj},v_{ti})v_{tj}v_{ti} 的最短路径 / 边数,hops
      • D=1:只将直接相连的邻接点作为邻域
    • w(v_{ti},v_{tj}) 权值函数
      l_{ti}:B(v_{ti}) → \{ 0, ..., K-1\}

      1. 邻域 B(v_{ti}) 分成 K 个子集(注意这里的 K 和前面传统卷积的 K 同样表示卷积的 kernel size)
      2. 子集中 nodes 分别赋上数值权值,这里为子集编号(图卷积中叫 labeling,即给每个 node 打分类标签)code 中用 size = (c, K) 的 tensor 表示,类比传统卷积权值 (c, K, K)

    注:划分 K 个子集,同一个子集内的节点采用相同的权重,从而实现权重共享。可按照邻域 path 划分,也可按照节点距离重心的远近划分,见 part 4

    3.3 Spatial Graph Convolution 空域图卷积

    f_{out}(v_{ti}) = \sum_{v_{ti}∈B(v_{ti})} \frac{1}{Z_{ti}(v_{tj})} f_{in}(p(v_{ti},v_{tj})) · w(v_{ti},v_{tj})

    • Z_{ti}(v_{tj}):标准化因子,领域顶点 v_{tj} 所在的子集中的顶点总个数

    上述公式样式仍然偏向传统图像卷积,进一步转化为图卷积样式:

    f_{out}(v_{ti}) = \sum_{v_{ti}∈B(v_{ti})} \frac{1}{Z_{ti}(v_{tj})} f_{in}(v_{tj}) · w(\color{red}{l_{ti}(v_{tj})})

    • v_{tj}:邻域顶点
    • l_{ti}(v_{tj}):给邻域顶点 打标签/赋权值 函数
    3.4 Spatial Temporal Modeling 时空图卷积

    时空邻域采样函数:空域连接 扩展到 时域连接,单帧扩展到多帧
    B(v_{ti})= \{ v_{qj}|d(v_{tj},v_{ti}) \leq K, |q - t| \leq \lfloor \Gamma /2 \rfloor \}

    • 邻域 v_{tj}v_{qj},不限于单帧
    • 上限 dDK
    • \Gamma:temporal range, temporal kernel size,本文 = 9

    时空邻域权值函数:划分子集 labeling 扩展到时域
    l_{ST}(v_{qj}) = l_{ti}(v_{tj}) + (q-t+\lfloor \Gamma /2 \rfloor)×K

    4. 划分子集 & labeling

    labeling 体现了 将邻域的特征聚合到当前节点 的一种规则。

    • (b) Uni-labeling 同一标注权值
      邻域内所有 nodes 权值一样,没有局部差异性 local differential properties
      labeling:令 K=1,则 l_{ti}(v_{tj})=0

    • (c) Distance partitioning 距离划分 distance to root joint
      具有局部差异性,但是缺乏子集 joints 相对全局的位置关系,即不能反应子集 joints 处于人体的哪块区域
      labeling:令 K=2,则 l_{ti}(v_{tj})=d(v_{tj},v_{ti}) 可取值:0 或 1

    • (d) Spatial configuration partitioning
      骨架 joints 运动可分为向心和离心,可将 nodes 分为 3 组:
      l_{ti}(v_{tj}) = \begin{cases} 0 & \text{if } r_j = r_i\\ 1 & \text{if } r_j < r_i\\ 2 & \text{if } r_j > r_i \end{cases}

      其中 r_j 是邻域 joint 到黑色十字 × 的距离,r_j 为 root joint

    综上所述,邻域 joints 子集的划分特点:

    1. 既能保留局部信息,又能涵盖全局信息
    2. 邻域权重划分更加多样性

    5. Implementing ST-GCN

    5.1 邻接矩阵

    对于 (c)(d) 划分,邻接矩阵 A 被分成了不同子集 \sum_jA_j
    f_{out} = \sum_j \Lambda^{-\frac{1}{2}} A_j\Lambda^{-\frac{1}{2}}f_{in}W_j

    • (c)A_0, A_1
    • (d)A_0, A_1, A_2

    添加 mask MA_j \otimes M,学习不同邻接点对 root 的权重影响

    5.2 网络结构
    "9 ST-GCN units,temporal kernel size = 9 感受野"
    # out 64 channels
    ST-GCN
    ST-GCN
    ST-GCN
    # out 128 channels
    ST-GCN  # stride = 2,时域下采样,2 frame -> 1frame
    ST-GCN
    ST-GCN
    # out 256 channels
    ST-GCN  # stride = 2,时域下采样,2 frame -> 1frame
    ST-GCN
    ST-GCN
    "Global Pooling, feature map -> 256 dimension feature vector"
    GAP
    "Softmax classifier"
    softmax
    

    相关文章

      网友评论

        本文标题:基于人体骨架序列的视频行为识别

        本文链接:https://www.haomeiwen.com/subject/psbgsctx.html