Counting Out Time: Class Agnostic Video Repetition Counting in the Wild个人笔记

    技术2022-07-17  79

    参考https://mp.weixin.qq.com/s/olVWrq0Dca2Kulbc8xwplA 由于上述公众号文章写的有些部分不够详细,比如repnet的transformer是什么,这里写一个自己读repnet和transformer论文的个人笔记

    repnet论文: http://openaccess.thecvf.com/content_CVPR_2020/papers/Dwibedi_Counting_Out_Time_Class_Agnostic_Video_Repetition_Counting_in_the_CVPR_2020_paper.pdf

    transformer论文: https://arxiv.org/abs/1706.03762

    1.repnet

    本文的四大贡献: 1.repnet,用于视频动作计数的神经网络 2.从没有标签的视频生成和增强合成含有重复动作视频的一种方法 3.在合成数据集上训练的repnet在重复动作计数和周期检测任务大大超越已知所有基准方法 4.Countix,含有大量重复动作视频的数据集(超越之前最大的同类数据集的90倍)

    数据: 类似kinetics较大的视频数据集的标签一般为动作语义标签,用于动作识别任务,这些视频数据集的收集大多是通过关键词搜索,从而导致只适用于分类视频内容; repnet的数据集Countix(视频数量大约是目前同类数据集的90倍以上)主要从两方面产生:1.从kinetics中手动挑选含有重复动作的视频并计数 2.合成 使用时间自相关矩阵的优点 1.极限的bottleneck,即把每个512维特征转化成1维特征,有利于之后将合成数据泛化为真实数据 2.将模型解释能力融入到模型结构中(从自相关矩阵而不是高维特征进行推理)

    Repnet:encoder部分为image encoder,从而得到每张输入图片的特征;然后使用这些特征构造自相关矩阵S;然后将S矩阵输入到周期预测器模块输出两个元素,一个是周期长度预测(动作重复的频率),另一个是周期性得分(显示某一帧是否在视频的某个周期内)

    Encoder:包含3个部分 1.每帧输入为1121123的2d ResNet50提取771024特征 2.将这些特征传给3d卷积(512 333) 3.降维:对空间两个维度采用Global 2d max-pooling,此操作直接省去了追踪图片中roi的步骤

    TSM:相似度函数为负的欧式距离的平方;在得到所有配对的距离后,在对每行做softmax(tsm为极限的information bottleneck,从而提供了正则化的效果-因为参数相对减少了);同时tsm也使得模型时间维度上可解释的 Period predictor: Period predictior部分在最后分类前,处理每帧的操作的权重和结构都是一样的 首先把6464的tsm经过一个2d的33卷积核,再对每帧的输出进行multi-headed attention(使用4 heads with each head being 128 dimension);(截止不再共享权重)再接两个512 fc+一个分类层 Per frame period length为预测的该帧所在周期的单个周期长度 Per frame periodicity prediction为该帧是否在周期中

    Loss: Per frame period length为多分类问题,长度取值可为2-N/2,N为输入clip长度 Per frame periodicity prediction为0,1二分类问题(这里只是判断是否在某一个动作或事件的周期中,并不特指某个动作的周期)

    inference: 每帧Per frame period length的预测为li,每帧Per frame periodicity prediction的预测为pi,定义per-frame count为pi/li,然后把所有的pi/li求和得到总体重复动作的计数估计;若测试集视频数据集的整个视频都是周期的一部分,pi恒定为1;同时在输入帧固定的情况下,改变输入帧的帧频,尝试得到最好的分数

    合成的带有重复动作的视频 使用真实视频产生带有重复动作的视频:1.更加真实 2.数据量非常大,保证数据多样性 如上图所示,随机取一个视频,随机取一个clip,可以将clip直接重复n次,或将clip与倒着的clip连接重复多次再加clip;在得到重复动作的视频片段后,随机截取位于clip前后不带有重复动作的视频片段得到一个完整的合成视频(可为0),然后赋予每帧对应的标签 若不采用camera motion augmentation,在训练合成数据集时损失下降的非常快,在真实数据集上的测试也不好

    数据集: 重复动作次数检测任务: QUVA repetition dataset:包含了真实的带有重复动作的视频,包含了遮挡,相机移动,重复动作的速度变化;测试集由100个动作种类未知的视频与对应的重复次数;数据较少,容易过拟合,泛化性不好 metric:Off-By-One(OBO) count error(如果预测的重复次数和真实重复次数误差小于等于1,则判断为预测准确),Mean Absolute Error(MAE) of count(作用于整个数据集) 周期性检测任务: PERTUBE dataset:主要用于周期性检测,即每帧都有是否属于一个重复动作的一部分的标签;将周期性检测问题转化为二分类问题 metric:precision,recall,F1 score,overlap

    操作细节: encoder的权重初始化为imagenet预训练的resnet50,训练400k个step,lr=6*10^-6,ADAM,batchsize=5,64 frames per clip,训练均在合成的数据上(Countix数据均为真实数据,非增强后的数据)

    消融实验发现: tsm对于减少上述两种误差标准非常有用;在合成的数据上训练的模型对于真实数据的预测效果也非常的好;使用transfromer的效果由于lstm,或在tsm上直接进行2d卷积然后进行预测;每个batch中多加合成的数据有利于预测效果

    错误: 左右脚颠球,模型会判断左脚和右脚是不一样的,但人在计数颠球个数时会考虑左右脚的总和

    应用: 1.检测重复动作的速度变化 2.预测重复过程的频率(心动周期) 3.提取不同周期的同个时期的图像 4.预测超长时间的周期,详见project网站 5.有助于自监督视频特征学习




    Transfromer: Encoder部分:N=6,每个encoder部分包含6层,每层包含两个子层,第一个为multi-head self-attention(多头注意力机制),第二个为postionalwise fc前向网络;且对每个子层进行residual connection和layer normalization,LayerNorm(x + Sublayer(x)),所有的sublayer的输出为512维 Decoder部分:N=6,每个encoder部分包含6层;和encoder相比中间插入了一个对encoder的输出做multi-head attention的子层(同时也有residual connection和layer normalization的操作) Attension:注意力函数可以看作为将一个查询(query)和一组键值组合(key-value)映射到一个输出(output);query,key-value pairs,output均为向量;输出由加权平均得到,权重由查询和对应的键值通过方程计算得到 Scaled Dot-Product Attenion Q(query matrix),K(keys matrix),V(values),一个query或一组keys为dk维向量,一组values为dv维向量 PS1:常用的attention函数为additive attention和dot-product(multiplicative) attention,dot-product就是这里用的,除了除以了dk的根号,additive attention主要是使用一个一层的前向网络;两种注意力机制理论复杂度相同,但乘法注意力因为高度优化的乘法代码更加的高效 PS2:除以dk的根号是因为,当dk非常大的时候,query matrix乘以keys matrix会得到非常大的值,使得softmax函数倾向于拥有非常小梯度的区域;假设q,k的元素均为independent random variables with mean 0 and variance 1,qk的mean为0,variance为dk,qk除以根号dk后的variance就为1

    Multi-head attention Q,K,V matrix均为dmodel维,对Q,K,V进行h 次不同的线性映射,分别转换为dk,dk,dv维,再将一组线性映射后的V,K,Q输入到常规的scaled dot-product attention中得到输出,再进行concat和一次线性映射转换会dmodel维 multi-head attention(多头注意力)可以顾及到在不同位置的不同表征子空间的信息,将dmodel维特征转换为dk维,相当于bottleneck,总体计算计算量与单头注意力相似 dk=dv=dmodel/h=64 Transformer中attention的应用 1.在encoder-decoder部分,由上图可知queries来自之前的decoder层,keys和values来自encoder的输出,这样使得decoder可以顾及输入序列中的所有输入;大致模仿了sequence2sequence中的encoder-decoder机制 2.在encoder部分,为自注意力层;各query,keys,values均为之前encoder的输出

    Position-wise Feed-Forward Networks 上述feed-forward的函数在每个position一样,但在不同层参数不同;输入输出的维度均为512

    Postional encoding Transformer不包含循环或卷积,所以在decoder和encoder部分都要加入位置信息 dmodel=512,i为维度,pos为position

    Processed: 0.008, SQL: 9