ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-19 21:04:19  阅读:328  来源: 互联网

标签:卷积 信息 光流 RGB Video Distilled Action 3DCNN 3D


【论文阅读】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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有