代码阅读笔记:GaitMixer

训练数据的格式是(296,60,17,2)的tensor,2表示一个关节的二维坐标,17表示一帧里的17个关节,60表示一个序列里的60帧,296是batch_size=74*4。296个序列作为一个batch_size,每次训练输入一个batch_size。

1.joint to embedding

线性变换,将数据格式从(296,60,17,2)扩展为(296,60,17,32),即由两通道扩展为32通道,同时将得到的权重和偏置存储在参数中。

2.加入位置信息

将位置信息编码进语义表征中,位置信息是(1,17,32)的tensor,然后转为参数Parameter类型,使得其能够根据模型训练而变化。

3.spatial mixer

根据黄红颜色分为两个模块

红色部分是对通道数进行改变,黄色部分是对token进行改变

黄色部分:多头自注意力。数据通过层归一化和多头自注意力得到的结果与原数据相加,层归一化是对数据的最后一维归一化,归一化后的格式仍然为(296,60,17,32)。多头自注意力将输入数据线性映射(nn.Linear计算)8次,每次生成一套q,k,v,得到8套q,k,v,再在每套中进行1次自注意力操作,共操作8次,得到8个自注意力结果,将得到的8个自注意力结果进行拼接就是多头自注意力的结果。多头自注意力能够使网络注意到不同的部分。

红色部分:MLP(multi-layer perceptrons),多层感知机,由两层全连接层组成。使用1*1卷积核改变通道数32为128,通过激活函数GELU添加非线性,再使用第二个1*1卷积核改变通道数128为32,两层全连接层后面都添加了dropout防止过拟合。

像这样的spatial mixer有4个,顺次连接,最后进行层归一化计算(nn.LayerNorm(32)),通道数为32.

4.temporal mixer

上述层归一化的输出要输入4个顺次连接的temporal mixer结构中。一个temporal mixer结构如上图所示。先使用深度可分离卷积(Depthwise separable convolution)。分别为逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution),一个卷积核负责一个通道,一个通道只被一个卷积核卷积,这个过程产生的feature map通道数和输入的通道数完全一样,逐通道卷积使用31*1的卷积核,一个32通道的图像经过逐通道卷积运算后生成了32个feature map,逐点卷积使用1*1的卷积核,每个卷积核将32个feature map在深度方向上进行加权组合,生成新的feature map,逐点卷积有几个1*1卷积就生成几个feature map。后续再通过GELU激活函数和批归一化,对特征进行归一化处理。

四个temporal mixer的(输入通道数,输出通道数)分别为(32,32),(32,64),(64,128),(128,256),后续是一层内核为(60,17),步长为1的平均池化层,再进行两次维度压缩。

经过四个spatial mixer和四个temporal mixer后,通过层归一化(nn.LayerNorm(256)),线性投射(nn.Linear计算),将256个通道投射为128通道,此时tensor的格式为(74,128)。模型最后对第二维数据进行L-2范数标准化,输出(74,128)的tensor。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值