其他分享
首页 > 其他分享> > 【论文阅读】D3D: Distilled 3D Networks for Video Action Recognition

【论文阅读】D3D: Distilled 3D Networks for Video Action Recognition

作者:互联网

【论文阅读】D3D: Distilled 3D Networks for Video Action Recognition

个人感觉这篇文章写得挺好的,而且由于太久没有看行为识别相关论文了,所以准备好好地看一下这篇论文,然后基于这篇论文地参考文献往前搜索。

3D卷积网络中的运动信息

提出问题:3D卷积网络到底能不能提取全部的运动信息呢?

这是文章首先提出的第一个问题,我对这个问题也是非常地感兴趣。在之前的3D卷积神经网络中,我们仅仅地输入RGB彩色信息,因为我们默认3D卷积神经网络可以有效地提取视频中的空间和运动信息,但是后来I3D做了相关的实验:two-stream I3D相较于 RGB输入的I3D可以提高行为识别的准确率。所以矛盾来了,如果3D卷积神经网络可以提取全部的运动信息,为什么 two-stream 3D的效果还是会提升呢?所以文章首先做出了一个假设:在3D卷积神经网络中,仅仅输入RGB视频帧,并且以交叉熵为优化目标,会丢失一些运动信息。

设置实验

为了探究3D卷积神经网络是否提取了视频中的运动信息,文章设置了一个非常巧妙的实验:对于一段视频,将其输入到3D卷积神经网络中,提取出这段视频的3D特征,然后使用一个解码器,将3D网络计算的特征中的运动信息解码到光流,根据解码的光流与TV-L1光流EPE损失来判断特征中的运动信息的大小。
文章设置了三种对比的解码器,如下图所示:
在这里插入图片描述

  1. 简单解码器:简单解码器就是使用一层简单的卷积网络解码
  2. 空间解码器:空间解码器使用多层的卷积网络解码
  3. PEC解码器:这个是使用的最新的计算光流的网络解码

我们发现解码器的共同点就是时间维度的卷积都是1,这是为了防止在解码的过程中,解码器根据3D卷积特征时序之间的关系计算光流,从而保证所有的光流都是从3D卷积特征内部解码出来的。

实验结果

在这里插入图片描述
上表是解码出来的结果,其中 All Zeros 表示解码器输出为全0,此时的EPE损失高达2.92。PWC-flow表示的是使用光流输入的3DCNN解码出来的结果,可以看到此时的EPE损失是低到0.63,表明当光流作为输入时,3DCNN可以有效地捕获运动信息。然后再看 Simple-RGB、spatial-RGB和PEC-RGB的EPE,可以看到他们与PWC-flow的EPE相比都是很高的,这说明当以RGB作为3DCNN的输入时,其捕获的视频中的运动信息确实要远远少于以光流作为输入。

个人感想

那么为什么会出现这种结果呢?个人感觉在行为识别任务中,有一些行为appearance的占比更大一些,有一些行为的motion占比更大一些,而以RGB输入的3DCNN中,其更倾向于优化到关注视频的appearance,而以光流为输入的3DCNN中,其更倾向于被优化到关注视频的motion,所以才会得到上边的结论:“当以RGB作为3DCNN的输入时,其捕获的视频中的运动信息确实要远远少于以光流作为输入。其实本质上不能怪3DCNN,而应该怪数据,3DCNN是完全有能力提取视频的时空信息的,只是你一直喂RGB,网络会过拟合地更倾向于appearance”
如果想佐证上边的结论,可以分别计算appearance流的准确率高的行为和motion流的准确率高的行为,然后相互地对比一下就可以。

D3D

结构原理

所以探讨完了 3DCNN中运动信息这个观点以后,我们该如何在RGB输入的3D卷积网络中,让其更多地捕获运动信息呢?本文使用了一个非常巧妙的方法,称为蒸馏学习方法。
在这里插入图片描述
方法如上图所示,其原理是既然我们知道RGB输入的3DCNN中运动信息比较少,光流输入的3DCNN中运动信息非常多,那么我们把光流输入3DCNN中的特征也作为一种监督信息,因为该特征中本身包含有视频的运动信息,从而之前的“交叉熵损失”变为了 “交叉熵损失+光流特征的监督损失”。其中光流特征的监督损失使用的是RGB流和光流流的全连接特征之间的l2 loss(公式就不贴了,非常简单)。这样在RGB输入训练的时候,可以使得3DCNN不会过多的关注appearance信息,达到appearance信息和motion信息的平衡,减少过拟合的现象
文章也使用了其他的没有达到效果的方法来减少这种appearance过拟合的现象:

  1. 在3DCNN中添加一个decoder,损失为decoder解码的结果与TV-L1光流之间的l2损失和交叉熵损失,这种方法不好的原因在于,光流输入的3DCNN捕获运动信息并不是从全部的光流中捕获的,而是从从光流的运动边缘捕获的,所以直接以光流为监督信息得到的效果并不怎么好。
  2. 第二种就是还是维持原来的双流结构,但是motion流的输入不再是TV-L1光流,而是使用光流估计网络从RGB中计算的光流,然后全部微调,这种改进的双流网络的效果要比使用光流作为输入的效果是好的,但是还是没有本文提出的D3D的效果好。

实验

D3D真的比S3D-G中包含更多的运动信息吗?

在这里插入图片描述
文章首先对比了S3D-G和D3D之间在提取视频中运动信息时候的区别(蓝色和红色的立方柱),可以看到在网络的各层都是D3D的光流重构loss更低,所以D3D确实能更好地捕获视频中的运动信息。而且可以看到层数越高损失越大,说明越抽象的特征越难重构出光流信息来。而且蒸馏学习是在抽象层完成的,然而却会影响到底层并且影响最大的还是底层,这个也是挺有意思的,说明加入的蒸馏学习影响到了整个网络的优化。
在这里插入图片描述
然后文章对S3D-G和D3D的decoder的光流进行了可视化,可以看到确实D3D解码出来的光流分布与TV-L1的光流更像一些。

在哪一层的蒸馏效果最好呢?

在这里插入图片描述
文章也实验了在不同层得蒸馏效果,基本上差别不是很大,但是层数越高效果越好,应该是因为层数越高,能够影响的层数越多,相当于全局微调,所以效果好了。

反过来蒸馏怎么样呢?

在这里插入图片描述
上图中第一行表示不加行为识别的损失,可以看到此时的效果是非常地差地,这是必然的。第二行是使用空间流作为老师,motion流作为学生,效果没有反过来好,我个人分析是因为在kinetics数据集中,appearance占比更大,如果换一个motion占比更大的数据集,说不定反过来效果就好了。

蒸馏学习定量分析的效果

在这里插入图片描述
上图是文章统计的关于各个行为经过蒸馏学习准确率的变化,我感觉这个统计是非常地有意思的,可以看到并不是所有的行为的准确率都升高了,我其实也是受到这个的启发,那就是 数据集中的appearance和motion占比是真实的存在的,提升的行为类别motion占比更大一些,减小的行为类别appearance占比更大一些。

标签:卷积,信息,光流,RGB,Video,Distilled,Action,3DCNN,3D
来源: https://blog.csdn.net/zzmshuai/article/details/90903936