上一篇文章《Video Understanding(1)——Action Recognition动作识别》翻译于一篇综述,从这篇综述可以看到,目前对于视频的处理方式大概可以分成三类方法:(1)双流法,利用RGB图像提取空间信息,利用光流提取时序信息;(2)CNN+LSTM,用RNN中的LSTM结构处理时序信息;(3)3D卷积,用3D卷积比2D卷积多出的维度来处理视频相对于图像多出的维度,也就是时序信息。本文作为补充,记录一下自己学习动作识别的历程。

1、TSN

稀疏采样的动机:动作识别之所以较常规识别更难是因为动作具有持续性,它需要结合多帧内容,可以将其称为“长时结构问题”(long-range temporal structure)。之前的文章一般采取密集采样(dense and local sampling)的方式,以固定的帧率来采样,比如 1FPS;密集采样的方式虽然能很好的获取时序信息,但是计算量太大,而且相邻帧之间的信息是大部分是重复的,不同动作持续时间不同导致采样的数量也不一样。因此作者提出稀疏采样的方案:一段视频固定采样帧的数量,也就是说一秒的视频如果采样5帧,那么十秒的视频也只采样5帧,保证时序信息被充分利用,而且不至于冗余。

稀疏采样的实现:(1)将一段视频分割成 K 段 segment;(2)然后从每一段里面随机采样得到一帧 snippet;(3)然后从这一帧里面预测得到一个低级别的预测结果 snippet-level;(4)最后将多个结合联合起来形成最终的视频级别预测 video-level。TSN⁡(T1,T2,⋯,TK)=H(G(F(T1;W),F(T2;W),⋯,F(TK;W)))\begin{array}{l}{\operatorname{TSN}\left(T_{1}, T_{2}, \cdots, T_{K}\right)=} {\mathcal{H}\left(\mathcal{G}\left(\mathcal{F}\left(T_{1} ; \mathbf{W}\right), \mathcal{F}\left(T_{2} ; \mathbf{W}\right), \cdots, \mathcal{F}\left(T_{K} ; \mathbf{W}\right)\right)\right)}\end{array}TSN(T1​,T2​,⋯,TK​)=H(G(F(T1​;W),F(T2​;W),⋯,F(TK​;W)))​F\mathcal{F}F表示(卷积神经网络,TSN的主体部分)从每一帧进行预测,G\mathcal{G}G表示联合多帧的预测得到视频分类结果,H\mathcal{H}H表示softmax操作得到最终结论。由此可以看到,TSN 的输入数据是稀疏采样得到的单帧图像,要得到对整段视频的识别结果还需要后续处理,也就是 G、H\mathcal{G}、\mathcal{H}G、H 的工作

损失函数:模型的度量建立在视频级预测结果之上,但是是对 segment 进行损失计算,具体表示如下:G=G(F(T1;W),F(T2;W),⋯,F(TK;W))\mathbf{G}= \mathcal{G}\left(\mathcal{F}\left(T_{1} ; \mathbf{W}\right), \mathcal{F}\left(T_{2} ; \mathbf{W}\right), \cdots, \mathcal{F}\left(T_{K} ; \mathbf{W}\right)\right) G=G(F(T1​;W),F(T2​;W),⋯,F(TK​;W))L(y,G)=−∑i=1Cyi(gi−log⁡∑j=1Cexp⁡gj)\mathcal{L}(y, \mathbf{G})=-\sum_{i=1}^{C} y_{i}\left(g_{i}-\log \sum_{j=1}^{C} \exp g_{j}\right) L(y,G)=−i=1∑C​yi​(gi​−logj=1∑C​expgj​)采用的还是交叉熵损失,CCC 是行为总类别数,yiy_iyi​ 是类别 iii 的 groundtruth,gig_igi​ 是 G\mathbf{G}G 的第 iii 个分量。

网络输入:对于一般的 two-stream 模型,空间流卷积网络接受 RGB 图像作为输入,时间流卷积网络接受光流作为输入;对于时间流网络,这里作者提出另外两种输入模式,RGB差分(RGB difference)、翘曲光流(warp flow)。

  • 所谓 RGB 差分其实就是相邻两帧之间求差,以此来计算帧间差异,作为动作时序信息的表征。
  • 运动视频中我们只关注人体的运动,而希望背景是相对静止的;但是训练数据可能会因为相机存在运动,导致背景发生改变。作者受到 iDT 工作的启发,通过计算单应性矩阵(homography matrix)和补偿相机运动来提取扭曲光流场,从而抑制背景运动,专注于视频中的人物运动。

交叉输入模式:对于时间流网络,先使用 ImageNet 数据集的 RGB 预训练模型做初始化,具体操作就是将 RGB 模型第一个卷积上的通道权重进行平均,然后根据时间网络输入的通道数量复制这个平均值,其余参数直接复制;接着通过线性变换将光流场离散到从0到255的区间,使得光流场的范围和RGB图像相同,然后对预训练模型继续训练。这样做的好处是,能够有效避免时间流网络的过拟合。

2、Decouple-SSAD

Decouple-SSAD 是一种基于动作识别特征进行动作检测(Temporal Action Detection)的 two-stream 方法。所谓识别其实就是对完整的动作视频进行分类,就类似于人脸对齐后的分类任务;对应于人脸对齐,动作的对齐就是要知道它的起始/终止时间点,动作检测就是要从一段长视频中检测出某个动作的时间戳位置
动作检测算法分为两类:two stage 和 one stage。前者先通过卷积网络得到 action instance,也就是一个完整的独立动作在一段视频中的时间戳,然后再去确定这个 instance 的类别;后者则将这两步在一个 step 中完成,在找到 proposal 的并进行回归的同时,完成分类任务。Decouple-SSAD 采用的是 one stage 方法,在 proposal 回归的同时进行分类,空间流模型与时间流模型分开训练,但共享网络结构。

2.1 算法理解

下图给出了 Decouple-SSAD 的网络结构,具体来说:

  • 先对视频进行编码处理,得到 1024 维特征向量,作为 Base Feature Network 的输入;经过 Base Feature Network 的 conv1>>>max_pooling>>>conv2>>>max_pooling,得到大小为 [32, 512] 的特征。
  • main stream 接受的是 Base Feature Network 的输出,conv1>>>conv2>>>conv3,3个卷积的步长全都是2,与之相对应的3个 anchor layer 层记为:MAL1,MAL2,MAL3,各自的输出特征尺寸为 [16, 1024],[8, 1024],[4, 1024]。
  • classification branch 的计算顺序与 main stream 相反:
    • BAL3接受MAL3作为特征,in_conv(conv1>>>conv2)>>>out_conv(ReLU>>>conv3),输出为 [4, 1024];
    • BAL2接受MAL2、BAL3作为特征,BAL3经过反卷积将特征尺寸上采样得到BAL3_up,MAL2经过in_conv(conv1>>>conv2)得到BAL2_in_conv,MAL3_up 与 BAL2_in_conv加权求和,然后out_conv(ReLU>>>conv3),输出为 [8, 1024];
    • BAL1接受MAL1、BAL2作为特征,处理过程同BAL2相同,输出为 [16, 1024]。
  • proposal branch 不同层的计算方式和 classification 相同,得到的特征大小也一样,但是并不共享参数。


每一个branch都包含3个 anchor layer 层,每一层的输出特征都会生成若干个 action proposal,具体来说:同一分支的3个anchor layer 层会得到 [16,1024]/[8,1024]/[4,1024] 的特征,一个1024维特征产生5个proposal,因此最终proposal的数量为 80/40/20,这些proposal经过筛选产生最终的动作时间戳。

2.2 代码解析

(1)proposal 的生成——train
基于 Decouple-SSAD 的 [tensorflow] 版本来分析它的整个流程。
经过上述的网络结构,我们可以得到很多个1024维的特征了,下面就要对这些特征进行分解、再融合,产生proposal。

  1. biClsReg_predict_layer:它针对的是 proposal branch,该分支的1024维特征经过一个卷积conv,最后得到一个4维向量locAnc。
  2. mulClsReg_predict_layer:它针对的是 main_stream/classification,1024维特征经过一个卷积conv,最后得到一个24维向量 mainAnc、clsAnc。
  3. 融合:24维 mainAnc 可以视为21个分类概率和3个动作定位分量,后者具体包括conf(置信度)rx(动作的中点)rw(动作的宽度);融合需要将 mainAnc 中的值分配到 locAnc、clsAnc 中去(locAnc只融合后面的3个动作定位分量)locAnc=(locAnc+mainAnc)/2clsAnc=(clsAnc+mainAnc)/2locAnc=(locAnc+mainAnc)/2 \\ clsAnc=(clsAnc+mainAnc)/2locAnc=(locAnc+mainAnc)/2clsAnc=(clsAnc+mainAnc)/2
  4. anchor_bboxes_encode:将 mainAnc/locAnc/clsAnc 中的 anchor 进行分解(原始的anchor是一个4/24维向量),得到xxAnc_class、xxAnc_conf、xxAnc_rx、xxAnc_rw;同时要搜索得到该 window 的 groundtruth 信息,也就是和每一个预测分量对应的xxAnc_BM_class、xxAnc_BM_conf、xxAnc_BM_rx、xxAnc_BM_rw。locAnc分解后返回的 locAnc_class 分量是1维的,直接舍弃不用。对于每一个分量,按照 anchor layer 层的顺序将它们 concat 起来,参与 loss 的计算。
  5. loss_function:loss 由3部分构成(class_loss,loc_loss,conf_loss),不同部分的权重(它代表正负样本的选取规则)不同,计算方法也不同。权重计算由三部分决定,pmask 表示正样本(预测值和 groundtruth 的匹配度 match_scores 大于0.5的样本),nmask 表示负样本,hmask 表示难分样本(match_scores 小于0.5但是 anchor 本身的置信度 conf 大于0.5),具体实现时保证正负样本的比例为1:1。loc_loss 的计算只用正样本,所以权重等于pmask;class_loss/conf_loss用到所有样本,权重等于三者之和。class_loss 使用交叉熵损失,loc_loss、conf_loss 则使用smooth_L1(文章中 conf_loss 写的是均方误差MSE损失)。
  6. 损失值:mainAnc 得到的8个分量都要用到,通过 loss_function 后得到 main_class_loss/main_loc_loss/main_conf_loss;locAnc 只用到跟conf、rx、rw相关的(6个),clsAnc 只用到跟class相关的(2个),它们俩是拼起来送入 loss_function 后得到 cls_class_loss/loc_loc_loss/loc_conf_loss。最后分类、定位、置信度的损失计算方法如下:class_loss=(main_class_loss+cls_class_loss∗2)/3loc_loss=(main_loc_loss+loc_loc_loss∗2)/3conf_loss=loc_conf_loss\begin{aligned}class\_loss&=(main\_class\_loss+cls\_class\_loss*2)/3 \\ loc\_loss& = (main\_loc\_loss+loc\_loc\_loss*2)/3 \\ conf\_loss&=loc\_conf\_loss \end{aligned}class_lossloc_lossconf_loss​=(main_class_loss+cls_class_loss∗2)/3=(main_loc_loss+loc_loc_loss∗2)/3=loc_conf_loss​这是源代码中给出来的计算方法,但是论文中给出的 conf_loss 形式跟其他两个是一样的(main_branch 和 proposal_branch 按照1:2的比例),源码和论文不一致。最后的损失值是三个loss按照 1:10:10求和得到。

(2)数据预处理
回过头来看一下网络的输入,也就是 Base Feature Network 接受的数据,这一部分跟 decouple SSAD 网络理解无关,但是如果要用 decouple SSAD 来训练自己的数据集就不得不搞清楚它的数据预处理方式。

  1. window_info.log:该文件一行对应一个 window 的起始终止时间,window 的大小是固定的,不同数据集可能不同,作者在THUMOS14上使用的是512,也就是一个窗口包含 512 帧数据,一段视频包含多个 window,相邻 window 间隔256帧。
  2. extract_feature.py:利用 TSN 网络提取 spatial/temporal 两种特征,前提是先要计算好一段视频的 rawframes/flow_x/flow_y。spatial feature 采样的对象是 rawframes,起始帧通过读取 window_info.log 得到,采样的步长是 4,window_size=512,也就是说一个 window 会采样得到128帧,送入 TSN 的是 [img_size, img_size, 3, 128]。temporal feature 采样的是 flow_x/flow_y,起始帧也是在 window_info.log 写好的,区别在于光流是 1 维数据(对比img的3通道),采样的时候会一次取连续的5帧作为一个stack(包括 x/y 方向),采样步长也是 4,5帧作为一个 stack 的做法意味着光流采样之间会产生一帧的重叠,最后送入 TSN 的是 [img_size, img_size, 10, 128]。TSN 模型计算特征的时候,会将采样的帧(或者stack)挨个送进去,单个采样帧得到一个 1024d 的 feature,然后将 128 个 feature 拼起来写入到 .npy 文件。

TSN提取 window 的特征作为输入,而与之对应的 label 是什么?因为 window 可能位于视频中的任何一个部位,它一般不会刚好与视频的动作区间吻合,而且一个视频可能包含多个动作,不同动作的类别、时间戳都不同。

  1. get_data_info.py:它会根据数据集的标注文件 annotation.csv 生成 window_info.log,那也就知道每一个window 在视频中的位置,然后和标注文件对比得到 window 中动作的时间戳(可能存在也可能不存在)、类别、置信度等,分别存储在 gt_label.pkl、gt_info.pkl 中。
  2. gt_label.pkl:这个文件跟 window_info.log 类似,它的每一行(其实不是一行,但就是这个意思)对应一个 window,给出 window 视频片段内真实动作的类别,是一个 21 维的 one-hot 向量。
  3. gt_info.pkl:这个文件与 gt_info.pkl 的唯一区别是它包含的信息是视频中动作的时间戳以及置信度,时间戳用它在整个 window 中的位置百分数表示。
  4. batch_data_process:在加载数据的时候,一个 window 可能包含多个动作,这多个动作的 label 会写入到 gt_label.pkl 的一行,训练的时候需要将它们分成多行以便每一个 proposal 搜索匹配,这就是这个函数要做的。
  5. batch_index:这是将一个 window 的多个动作分隔之后的索引,不分隔的时候一个 window 占据一行,分割之后一个动作占据一行,这个索引就指示了属于 window 的动作从哪一行开始;一个索引对应一个 window,中间可能不连续,例如:window_i 的动作 GT 就需要在 Index[i]:Index[i + 1] 之间进行搜索。

(3)proposal后处理——inference
数据预处理的过程大致就是如此,那么如何做后处理?要知道,decouple SSAD 网络只是得到了每一个 window 的 action proposal,这些 proposal 并非都符合要求,而且单个 window 的 proposal 也不能作为最终整段视频的预测结果。之前分析 proposal 的生成一直说的是 train 过程,train 最终只需要完成 loss 的计算以便实现后向传播,这里再来就 inference 分析一下后处理过程。
Classification Branch 能够产生 140个proposal,但是在计算 loss 时,它只提供 class 分量的预测值和GT,也就只有 class 这个分量是有效的;Proposal Branch 也能产生140个proposal,但是它提供另外3个分量 rx、rw、conf 的预测值和GT,这3个分量都有效。所以在 inference 中用的是这两个分支的结合体,刚好产生140个包含 class/rx/rw/conf 的“完整” proposal。之所以不用 Main Branch,是因为 classification/proposal 分支已经融合了 Main Branch 的结果,而且这两个分支融合了不同 anchor layer 层的特征,具有上下文信息。

  • result_process:将一个 window 的140个 proposal 数据写入 .csv 文件,要注意的是这里给出的 proposal 时间戳是针对window 而言的(以帧为单位,不再是位置百分数),所以还要加上 window 的起点;之所以要写入 .csv 文件是因为 spatial/temporal 流程是分开的,后面还需要将二者融合,做一个 fuse 操作,fuse 针对的就是每个 window 的140个 proposal;
  • final_result_process:这个是进行最终的 proposal 的筛选的,具体的步骤为:
    • 选择那些不是背景的 proposal,也就是 score0<0.98score_0<0.98score0​<0.98 的,0.98是背景类的阈值
    • 选择那些置信度高的 proposal,这个置信度指的是时间戳的置信度,conf>0.1conf>0.1conf>0.1 就可以
    • 选择同一视频的 proposal,因为一个视频会处理为多个 window,每一个 window 会得到140个proposal,如果有多个视频,那么它们的proposal是混合的,现在要综合一个视频的预测结果完成视频级的动作预测
    • post_process:处理一个视频筛选之后的 proposal,先提取 proposal 的属于每一类的概率,然后置信度归一化乘以概率得到每一类的分数,找到分数 top-1/2/3 的类,保存时间戳、类别、分数
    • temporal_nms:以分类得分为标准,对动作时间区间使用 NMS 算法,去掉那些重合度较高的并且得分又不是最好的proposal
      • 首先根据得分从高到低排序,找到得分最高的proposal_t,它的持续时间就是 duration_t
      • 然后将其他的 proposal_i 的动作起始点置为不小于 proposal_t 的起始点,终止点置为不大于 proposal_t 的终止点
      • 计算其他 proposal_i 动作时间重置之后的持续时间 intersection_i,这就是 proposal_i 与 proposal_t 的交叉区域
      • 计算其他 proposal_i 与 proposal_t 的动作并集的持续时间,也就是 proposal_t + proposal_i - intesection_i
      • 计算交并比 IoU,找到 IoU 较小的那些 proposal,交并比太大的表示重复性太高,冗余了,直接不要
      • 得到新的 proposal_t,重复计算
    • 将 NMS 筛选之后的 proposal 写入文件,作为最终的结果
  • mode=fuse:fuse 模式下需要提前将 temporal/spatial 两条线产生的 proposal 计算好,它融合的就是两条线生成的 predict_xxx.csv,融合的内容就是 conf/xmin/xmax/score_i,temporal占比2/3;然后接下来的内容就跟单线状态下的 spatial/temporal 是一样的,筛选非背景 proposal、剔除、top-1/2/3、NMS


temporal 与 spatial:两条线是分开的,但是计算模型都是 decouple_ssad,temporal 的输入是 rawframe 产生的特征,spatail 的输入是 flow_x/flow_y 产生的特征;训练完的模型参数也不同。

3、动作检测综述

从 Decouple-SSAD 出发,简要总结一下动作检测常用的方法,这里讨论的是 two-stream 的方式。
two-stream 以 action recognition 网络作为特征提取工具,从视频流中提取 spatial/temporal 特征,可将此操作视为动作信息编码,同时它们也是动作检测网络的输入。所以,动作检测网络并不直接以视频流信息作为处理对象,它们主要的工作是完成从 feature 到 actionLoc 的预测,feature 之前的工作都属于 preprocess,大部分都是来源于action recognition

3.1 时序动作特征提取

从上图可以看到,two-stream 方法都需要提前计算光流,且大多数模型采用的都是 dense_flow,这很大一部分归功于 TSN,因为它在做动作识别的时候用的就是 dense_flow,而之后的工作大部分是参考 TSN 来的。dense_flow 的本质还是 OpenCV 的光流算法,只是它将其中的三种算法进行了封装编译(一般都是采用 TVL1 算法),并利用 GPU 加速计算。即便如此,在python环境下,单帧光流耗时还是多达 150ms(单个GPU,256*340*3 图像)。
除了 dense_flow 之外,也有一些专门用于光流计算的 CNN 网络,MPI SIntel 就是基于CNN的光流计算竞赛,从这里可以看到查看到光流计算的SOTA模型。

  • SelFlow :目前排名第一的光流算法,速度可达单帧 55ms(320*320)
  • PWC-Net:官方论文给出的时间是 20 ms,实测 pytorch 为26ms(256*340)
  • FlowNet:PWC-Net的前身,比PWC-Net快,但是精度不如它
3.2 SSN(2017)

论文:《Temporal Action Detection with Structured Segment Networks》
代码:[Pytorch]
贡献
简介:跟TSN出自于同一作者,现在都集成于 MMAction 平台。要注意的是,TAG 出来的并不是特征,而是一个个高质量的proposal,SSN在这些proposal基础上进行后续操作。
效果
评论

3.3 TAL-Net(2018)

论文:《Rethinking the Faster R-CNN Architecture for Temporal Action Localization》
代码: -
贡献:TAL-Net 沿袭了Faster-RCNN的思想,即在一个特征图上使用不同尺度的 anchor 产生不同大小的proposal,然后对proposal进行分类和回归;TAL-Net 将此应用到时序动作定位中,不同之处在于特征图由2D变成1D,同时还针对性地解决三个问题:(1)使用多尺度结构解决 anchor 和感受野不对齐的问题;(2)适当扩大感受野,充分利用时序信息;(3)证明了多流特征(multi-stream feature)晚融合的效果要比早融合好。

简介:在Faster-RCNN中,同一位置处、不同尺度的 anchor 通过使用不同数量的filters来生成不同大小的bounding boxs,由此一来所有anchor的感受野就是相同的,这对于目标检测来说是可接受的,因为目标尺寸虽有变化但大多相差不会太大;但是在时序动作检测中,动作的跨度变化是远比目标检测尺度要广得多,THUMOS14中小的动作可能只有1s,长的动作能持续1min,如果所有anchor的感受野还是一样,那么如果感受野设置小了势必会造成特征提取不充分,如果感受野设置大了那对于小动作而言会有很多干扰特征被提取,所以TAL-Net的一项重要工作就是使用空洞卷积(dilated temporal convolutions)来对齐anchor和它的感受野。假设一个anchor的感受野是s,那么从特征图到proposal之间会先使用一个max pooling,然后是两个空洞卷积,卷积的尺寸依赖于s,具体来说 r1=s/6,r2=(s/6)∗2r_1=s/6,r_2=(s/6)*2r1​=s/6,r2​=(s/6)∗2;anchor数量是K=9,尺度分别是{1,2,3,4,5,6,8,11,16}\{1,2,3,4,5,6,8,11,16\}{1,2,3,4,5,6,8,11,16}。
作者还注意到,往往动作的前奏(preview)和后续(following)对动作的分类、定位关系是很重要的,所以在原本的anchor感受野s前后分别延伸s/2的距离,让proposal包含更丰富的上下文信息。
最后就是特征晚融合,一般的two-stream方法在产生proposal之后就将RGB和flow的特征进行融合,然后再用proposal来产生分类;作者做的改变是 SPN 网络得到RGB和flow的proposal之后,用element-wise average 来产生最终的proposal,然后这些proposal分别作用在RGB、flow特征图上,产生各自的边框回归和分类信息,最后再将RGB、flow的结果进行融合。作者用对比实验验证,这种晚融合是比早融合更加有效的。
效果:从上面的综述表格可以看到,在THUMOS14数据集上,mAP@0.5=42.8mAP@0.5=42.8mAP@0.5=42.8,达到了当时的SOTA。
评价:灵活运用空洞卷积,对于动作尺度跨度广的处理方式很值得借鉴,SPN 能够产生不同尺度的 proposal,这对于decouple-SSAD的固定window-size来说是有优势的。

3.4 PGCN(2019)

论文:《Graph Convolutional Networks for Temporal Action Localization》
代码:[pytorch]
贡献:将图卷积网络引入时序动作定位,结合 proposal 的特征信息和 proposal-proposal 之间的关联关系来做动作定位,整体效果比 TAL-Net 提升了6.3个百分点(截止到2019/12/12见到最好的)。

简介:一般的模型都只会单独处理一个个的proposal,但实际上一个动作往往是由多个proposal组成的,相邻的proposal之间是有关联的,单独处理proposal的方式显然没有考虑这种关联信息。PGCN将proposal特征作为节点,proposal-proposal 之间的关系作为边,构建图网络,然后运用图卷积来计算proposal的类别、动作区间、动作完整度。文章定义了两种 proposal-proposal 关系:相邻proposal的边能够为动作分类提供参考(因为它们属于一个动作),非相邻proposal的边能够提供上下文信息。
从上图可以看出,作者使用两个图卷积网络GCN1、GCN2分别计算原始的proposal和扩展proposal,每个GCN由两层图卷积组成,扩展proposal 和 TAL-Net 中的做法是相同的,分别在首尾延伸 1/2 的长度。proposal 的获取使用的是BSN(Boundary-Sensitive Network for Temporal Action Proposal Generation,2018年的ECCV),一个视频可能会有很多个proposal,将每一个proposal内的视频分割成一个包含64帧的片段,用 I3D 提取片段中每一帧的特征,然后用 max-pooling 将64个1024维特征融合得到一个1024维向量,这个向量和 proposal 联合作为GCN的输入:GCN1给出proposal的类别,GCN2给出proposal的动作区间和完整度。下图则展示了两种proposal的区别,GCN1、GCN2的具体网络结构。

文章还做了很多验证对比实验,比如:proposal-proposal 信息是否真的有用?用图卷积来表征 proposal-proposal 关系是比较好的吗?提取proposal时用BSN好还是TAG好?等等…
效果:在THUMOS14上达到SOTA,mAP@0.5=49.1mAP@0.5=49.1mAP@0.5=49.1。
评价:首先文章就写的很好,之前没研究过图卷积,但完全不妨碍理解论文的思想;其次,做了很多对比实验,对于模型的每一个选择都地给出了有力的证明(为什么要使用边边信息,为什么要用图卷积,为什么要用BSN…);最后,性能是目前最好的!

Video Understanding(2)——Temporal Action Detection时序动作检测相关推荐

  1. 时序动作检测《BSN: Boundary Sensitive Network for Temporal Action Proposal Generation》

    时序动作检测SSAD<Single Shot Temporal Action Detection>_程大海的博客-CSDN博客_时序动作检测 时序动作检测<BSN: Boundary ...

  2. PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection (AAAI 2020)

    PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection AAAI 2020 中国科学技术大学 欢迎感兴 ...

  3. SSN:Temporal Action Detection with Structured Segment Networks

    原文链接: Temporal Action Detection with Structured Segment Networks 本文只是对原文的简单翻译,不对实验过程分析,如有不准确的地方,欢迎指教 ...

  4. G-TAD: Sub-Graph Localization for Temporal Action Detection

    论文下载链接:https://arxiv.org/pdf/1911.11462.pdf 1 摘要 对于动作检测而言,视频的文本信息是十分重要的线索之一,但是当前的工作主要集中于时序文本信息(tempo ...

  5. [行为识别论文详解]SSN(Temporal Action Detection with Structured Segment Networks)

    SSN发表在ICCV 2017上,题目为:<Temporal Action Detection with Structured Segment Networks>,作者是Yue Zhao, ...

  6. SSN—《Temporal Action Detection with Structured Segment Networks》概述

    <Temporal Action Detection with Structured Segment Networks>概述 引言: 最近阅读了本篇发表在ICCV'17上关于Action ...

  7. 【论文阅读】时序动作检测系列论文精读(2020年)

    文章目录 1. DBG: Fast Learning of Temporal Action Proposal via Dense Boundary Generator 论文目的--拟解决问题. 贡献- ...

  8. CVPR2019 | 论文之行为/动作识别、手势识别、时序动作检测及视频相关

    CVPR2019 | 论文之行为/动作识别.手势识别.时序动作检测及视频相关 行为/动作识别.手势识别 1.An Attention Enhanced Graph Convolutional LSTM ...

  9. Talk预告 | 腾讯AI Lab研究员童湛南京大学谈婧:基于注意力机制的视频自监督表示学习和时序动作检测

    本期为TechBeat人工智能社区第465期线上Talk! 北京时间12月22日(周四)20:00,腾讯AI Lab研究员--童湛&南京大学计算机科学与技术系硕士研究生--谈婧的Talk将准时 ...

  10. STPP[时间金字塔池化]||SSN(Temporal Action Detection with Structured Segment Networks)时间动作定位

    看完SSN网络其中一个重点就是文章所提出的STPP结构.文章或者有些解读对于我们这种初学者来说可能有一点点理解难度,特别是对于L和Bl这些参数,我看到有些网上的解释写的有些歧义.但实际上只要结合SPP ...

最新文章

  1. 详解深度学习的可解释性研究(上篇)
  2. 数字货币 Electron Cash钱包 如何离线转账
  3. CTFshow 文件上传 web156
  4. PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes)
  5. VTK:图片之ImageSobel2D
  6. 初识canvas,使用canvas做一个百分比加载进度的动画
  7. 20应用统计考研复试要点(part2)--统计学
  8. mybatis mysql selectkey_Mybatis示例之SelectKey的应用
  9. Javascript UserAgent 获取平台及浏览器信息
  10. 元旦海报设计素材|节日气氛PNG元素,满满中国风
  11. Spyder5.3.3无法使用下载好的库
  12. python icon生成小工具
  13. 设计网站如何提高版式的设计水平?
  14. Git 拉取远程最新代码
  15. 【C语言】博客之旅从学习C语言开始
  16. 关于“W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169”问题的解决
  17. 耦合(六种)与 内聚(七种)—《软件工程与计算》笔记
  18. 深度学习之图像分类(十九)-- Bottleneck Transformer(BoTNet)网络详解
  19. 银联在线支付5.0.0版-仿真端
  20. 如何实现一个直播APP

热门文章

  1. Java实现支付功能代码
  2. 基于深度学习的商品检索技术
  3. 使用MATLAB任意修改图片像素大小
  4. matlab批量修改指定像素
  5. asp.net前端页面上使用if
  6. STM32——触摸屏实验-电阻型触摸屏-M4
  7. office相关文件转pdf的几种方式
  8. Cisco Packet Tracer路由器的基本命令
  9. Excel——从文本中提取数字
  10. Python 自动关机小程序