全transformer结构视频视觉分类,ViViT_ A Video Vision Transformer
全transformer结构视频视觉分类,ViViT: A Video Vision Transformer
ViViT A Video Vision Transformer.pdf
https://github.com/google-research/scenic/tree/main/scenic/projects/vivit
Video Classification with Transformers (keras.io)
https://github.com/google-research/scenic/tree/main/scenic/projects/vivit
另外一个简易版本的keras实现: Video Vision Transformer (keras.io),这个实现内没有采用VIVIT提出的几种模式,直接用3D卷积提取了特征,然后跟了几层transformer。
模型从时间或者空间的dimension来拆分了计算,VIT模型需要更多的数据来train,模型参数量更多,常见的视频网络就是3D卷积,然后在视频帧提取的特征之间做average,最后做分类,现在有的工作在后面加了transformer来做分类的,提取时间上帧之间的特征。像: Video Classification with Transformers (keras.io) 。就是卷积层提取特征,然后transformer来提取时间上不同帧的特征。
卷积+transformer,就是将空间和时间分离开了,先提取空间特征(hw),然后提取时间方向的特征(t)。

上图右侧就是几种不同的计算方式,目的是减少计算次数,提升准确率的
VIT提取token的方式就是h, w方向2d卷积或者flatten,然后平铺到1d向量,最后加上cls的token,以及加上position的token,最后就可以用了的。最后用 transformer网络内attention使用的mask - 知乎 (zhihu.com)
采用了管道的方式来提取不同高、宽、时间帧的token,也就是3D卷积的,视频的大小是T H W C,那么token化以后大小就是: n t , n h , n w , d n_t,n_h,n_w,d nt,nh,nw,d ,d是embedding的大小,然后reshape到 N d,加上position就是最后的输出,可以做attention操作。
下面是VIT提取2D图片token的方式,也就是2d卷积,视频提取就是3d卷积,多了t。被称作 管道embedding。

若管道的大小是(t, h, w),那么输出的token数量是: n t = T t , n h = H h , n w = W w n_t=\frac{T}{t}, n_h=\frac{H}{h},n_w=\frac{W}{w} nt=tT,nh=hH,nw=wW ,管道越小,提取的token数量越多,特征更加丰富。需要transformer具备更多的参数。
Model1:空间时间注意力
网络将提取到的所有token都送入到transformer网络,输入的帧越多,token越多,model1参数量最多,计算量最大的。
Model2:拆分encoder
先对每一帧的token分别做空间encoder,不同时间的帧不做计算,最后一个时间encoder融合所有的帧,最后做分类的。这种方式结果最好,实际应用应该用这个模型。

Model 3: 拆分self-attention
首先计算空间的self-attention,然后计算时间的self-attention,也就是先对每一帧每个时间步t算self-attention,此时reshape到 t × ( h ⋅ w ⋅ d ) t\times (h\cdot w\cdot d) t×(h⋅w⋅d) ,然后对每个token,算不同时间的self-attention,融合时间信息,也就是reshape到 ( h ⋅ w ) × ( t ⋅ d ) (h\cdot w)\times (t\cdot d) (h⋅w)×(t⋅d)
先算每一帧不同token的空间特征,然后算每个token在不同时间的时间特征。最后融合起来。

时间、空间的顺序没区别不重要
Model4:拆分dot-product attention
也就是QKV计算的时候,一半的head用来计算空间信息,另一半head用来计算时间信息。

作者在初始化权重的时候做了很多的工作,主要是时间方向repeat填充position权重,试验结果显示model2速度最好准确率也很好,GFLOPS 每秒钟10亿次浮点运算也很小。
图像augmentation是一种正则手段,也就是防止网络过拟合,像Mixup,mosica,random augment,以及标签平滑化
标签平滑化
也就是 y ^ = ( 1 − λ ) y + λ u \hat{y}=(1-\lambda)y+\lambda u y^=(1−λ)y+λu ,u服从均匀分布的,y=1, λ ∈ [ 0 , 1 ] \lambda \in[0,1] λ∈[0,1] ,鼓励网络学习更低的置信度。
Mixup混合
x ′ = λ x i + ( 1 − λ ) x j j x' = λx_i + (1 − λ)xj_j x′=λxi+(1−λ)xjj , y ′ = λ y i + ( 1 − λ ) y j y' = λy_i + (1 − λ)y_j y′=λyi+(1−λ)yj ,x是图像,或者目标框,y是真实的label,当图像或者目标框融合以后,相应的label也需要调整,做相应的融合。 λ ∈ [ 0 , 1 ] \lambda \in[0,1] λ∈[0,1] ,λ服从Beta分布的。
更多推荐
所有评论(0)