SlowFast Networks for Video Recognition

SlowFast Networks for Video Recognition

地址:https://arxiv.org/pdf/1812.03982.pdf

introduction

总述:在行为识别中提出两分支的slowfast网络。其中slow pathway,在低帧率操作来捕获空间特征;fast pathway,高帧率操作来捕获运动特征。

motivation:行为识别中,没必要同等对待时空特征,因为空间特征往往变化缓慢,而时间上动作特征变化快。由此提出slowfast网络:1)一个分支从images中捕获空间特征,在low frames rate & slow refreshing speed上操作 2)另一分支捕获rapidly changing motion,操作fast refreshing speed。

slowfast有点类似于two-stream,但传统two-stream中:1)每个分支采用the same backbone,2)两个分支不交互;但在slowfast中,fast分支更lightwight(采用更少的通道数),并且fast分支得到的部分特征会引入slow分支。

slowfast network

slow分支:该分支的关键在于,采用较大的时间步长处理输入帧,例如在τ帧中只处理1帧。如果被slow分支处理的帧数为T,则原始输入的frames总帧数为T*τ。

fast分支:采样更小的步长,fast分支同slow分支处理同一份原始输入,所以该分支处理的帧数为α*T,α>1。但fast分支的channel数更少,channel是slow分支channel数* β, β<1

网络结构:

SlowFast Networks for Video Recognition_第1张图片

 

如何理解该网络结构?

假设原始输入shape:[b,c,t,h,w],以1,3,64,224,224为例:即1个视频,3通道,64帧,h和w都为224。

                    slow分支                   fast分支

data层: 1,3,4,224,224        1,3,32,224,224 (这里两分支的原始输入帧数就不同,但分享同一份原始输入,只是采样间隔不同)

conv1:     1,64,4,112,112      1,8,32,112,112 (升c降h&w,但fast-pathway的channel为slow-pathway的1/8,即上述 β)

pool1:      1,64,4,56,56         1,8,32,56,56       (降h&w)

res2:        1,256,4,56,56       1,32,32,56,56      (升c,res2里包含3层的瓶颈结构,可以发现slow和fast分支中h&w相同)

后面的res3-res5都是升c降h&w,未对时间维度处理。

但上表中缺乏slow和fast pathway间特征的交互,实际代码中有SlowFast fusion,e.g. 对于fast pathway的pool1会额外得到:lateral_p = self.lateral_p1(pool1), self.lateral_p1为卷积操作,将c升为该层原channel的两倍,同时将t维度降到与slow pathway对应层的t大小,然后slow pathway中降 pool1的输出 和 lateral_p 在channel维度链接 ,x = torch.cat([pool1_x, lateral_p,dim=1)。所以对于slow pathway而言,res2的输入shape=1,80,4,56,56,其中pool1_x:1,64,4,56,56来自于slow pathway, lateral_p:1,16,4,56,56来自于fast pathway。随后的res3、res4、res5之前都有类似融合的操作。

slow和fast pathway都会得到自己的输出,会在自己的分支里进行global average pool,最后将两分支的输入在channel维度链接,最后接dropout+fc层。

 

个人理解:

slowfast中的slow pathway可以理解为普通resnet-3d结构,但区别:1)处理更短的时间帧 2)会引入部fast pathway的中间层输出。fastpathway可以理解为降channel的resnet-3d结构,它与普通resnet-3d的输入帧数近似(例如32帧,选用较长的时间帧)。

slowfast中不额外捕获光流 or 近似光流特征,而是用帧的刷新速度来区分空间和时间关系,感觉有点意思。

看完论文有两个小问题:

1)论文中的slow分支用来捕获空间特征,为什么不考虑用2d结构?这样会训练的更快。

2)对于slowfast-50,我们可以理解为resnet-50的改进版,删减了channel数,并在部分层引入 SlowFast fusion。但相当于同时训练两个resnet3d结构,实际训练时速度很慢啊。

而且我目前在用pytorch框架,在缺乏kinetic数据集的情况下,在ucf这样的小数据上很难复现结果~(因为没法用kinetics预训练,通道数也变化了,连imagenet预训练都没法用,相当于从头训练ucf)

 

你可能感兴趣的:(深度学习)