深度学习视频理解(分类识别)算法梳理
视频理解是计算机视觉中重要的研究,之前一直都在做图像相关的工作,没有了解过视频相关的算法,这里梳理一下视频理解相关的算法综述逻辑。
一、动作分类相关数据集二、动作分类识别算法1. 最直观的解决方案
从基于卷积神经网络的图像算法引申出来,最直观的解决方案是,针对每个视频帧,利用卷积神经网络提取其每个视频帧图像的特征,将这个视频所有帧的特征向量取平均得到整个视频的特征向量,然后进行分类识别。
这种最直观的方案太简单,直接对所有帧特征取平均太粗暴,很难实现较好的效果,需要较为复杂的特征融合策略。此时「VLAD与」应运而出。
2. VLAD
VLAD( of local )是一种新的特征融合策略,首先对一个视频的各个帧特征进行聚类得到多个聚类中心,将所有的特征分配到指定的聚类中心中,对于每个聚类区域中的特征向量取平均,最终所有的聚类区域的特征向量作为整个视频的特征向量。
上边最直观的解决方案相当于把所有帧的特征向量聚类到一个中心点,而VLAD将所有帧的特征向量聚类到多个中心点,通过所有特征向量的堆叠,能够获得更加丰富的特征,丢失更少的信息。
「」是利用神经网络实现VLAD。这里的聚类中心通过网络学习得到。
「上边的两种方案均没有考虑视频帧之间的时序关系。」
3. 视频时序信息利用
双流法基本方案就是两个网络分支,一个为「图像分支」提取视频帧的特征向量,另一个为「光流分支」,利用多帧之间的光流图提取光流特征,利用图像分支与光流分支特征向量的融合进行分类预测。
❝
虽然视频的帧率很高,但是视频中的内容变化相对较慢,临近的视频帧信息存在大量的冗余。如何能更加高效的从视频中采样图像帧也是非常重要的。
❞
4. 图像帧的采样
「TSN( ,时序分段网络)」,将一个视频分为多个小段,每段均匀的采集一帧图像与多帧光流,之后利用双流法,每视频小段获取图像分支与光流分支的特征后,融合所有的特征作为整个视频的特征向量进行处理。tsn对于不同段之间的特征向量直接进行平均融合处理,没有充分利用多帧之间的时序关系。
❝
上边介绍的都是基于2D神经网络的算法,利用2D卷积神经网络提取图像帧的特征或者光流图像特征之后,利用VLAD、RNN或者3D卷积进行特征融合。
也可以直接利用3D卷积来做。
❞
5. 3D卷积5.1「C3D与Res3D」
最基础的网络,直接使用3D卷积构建网络,「C3D」(3D版本的VGG算法),随后还有3D版本的:「Res3D」。
❝
这两种算法,时间步长都比较短。
❞
**LTC(长距离时序卷积)**将输入视频帧数增加,实验发现60帧58×58的输入与16帧的输入计算量差不多,但精度更好。
❝
3D卷积相比较2D卷积参数量大幅度的增加,训练困难。「如何能够有效降低模型参数量呢?」
❞
5.2「低秩近似」
利用3D卷积的低秩近似实现参数量的减少。
对于2D卷积 7×7的核,可以用1×7与7×1近似替代。
同样3D卷积,3x3x3的核可以用 1x3x3与3x1x1近似替代。
利用这种低秩近似的算法:「FSTCN(空间-时间分解卷积网络)、P3D(-3D)、R(2+1)D、S3D」。
5.3「non-local」
3D卷积虽然可以提取视频帧之间的时序信息,针对TSN这种分段的网络,3D卷积仅能提取到每个视频片段中的时序信息,因此在提取得到每个视频片段特征之后,利用LSTM融合多个视频片段,全局视频的时序信息得到利用。
「」,卷积层的输出仅仅与一部分的输入相链接,都是局部的操作,需要堆叠多层才能达到全局的效果,这样参数量大。采用non-local的操作,类似于全连接层计算所有向量之间的相似性,但是这里的参数不是学习出来的而使一些特定的函数。
5.4「」
3x3x3的3D卷积实际上是同等看待了时间与空间维度。这里采用两个分支,分别对于时间与空间维度进行处理。
slow分支用比较少的帧数T,较大的通道数D,更加关注空间信息。
fast分支采用比较多的帧数T,较小的通道数D,更加关注时间维度的信息。
「多网格方法设计超参数」
当输入尺寸HW比较小的时候,训练准确率较低,但是可以使用更大的batch,可以更快的过完一轮数据。
当HW比较大的时候,训练准确率较高,更小的batch。
因此,在训练早期可以使用大B,后期使用小B。
也可以周期性的变化。
❝
主要学习张皓老师的《深度学习视频理解》一书,所作出的总结。
接下来将集中看看其中几个经典算法的论文和代码。
❞
❝
原文首发于「小哲AI」公众号,公众号主要分享人工智能前沿算法解读,AI项目代码解析,以及编程、互联网求职等技术资料文章,偶尔也会分享个人读书笔记、工作学习心得,欢迎关注,一起学习。
❞
发表回复