视频分类

小徐科研日记——深度学习视频分类方法 视频由空间维度和时间维度组成。包括静态图像特征,运动特征,音频特征,外部特征等。目前主要的方法有:双流网络,静态图像特征聚合,3D卷积以及基于transformer的视频分类。 阅读详情

1.什么是视频分类

视频分类是指给定一个视频片段,对其中包含的内容进行分类。类别通常是动作(如做蛋糕),场景(如海滩),物体(如桌子)等。其中又以视频动作分类最为热门,毕竟动作本身就包含“动”态的因素,不是“静“态的图像所能描述的,因此也是最体现视频分类功底的。

2.公开数据集

熟悉深度学习的朋友们应该清楚,深度学习是一门数据驱动的技术,因此数据集对于算法的研究起着非常重要的作用。网络上虽然有大量用户上传的视频数据,但这些数据大多数缺少类目标签,直接用于算法的训练会导致效果欠佳。在学术界,通常有一些公开的、已经经过完整标注的数据集,是算法训练的好帮手。具体到视频分类领域,主要有两种数据集,trimmed和untrimmed。Trimmed是指视频经过剪辑,使其只包含待识别类别的内容;untrimmed是指视频未经过剪辑,包含了动作/场景/物体之外的很多信息。Untrimmed通常在视频分类的算法之外,还要加上动作检测算法。这不在今天的话题当中,有空我们可以再聊聊这一块的算法。

那么trimmed video的数据集比较常见的有UCF101,HMDB51,Kinetics,Moments in time。Untrimmed video的数据集比较常见的有ActivityNet,Charades,SLAC。部分数据集的比较见下表:

​ 视频分类常用数据集
在这里插入图片描述需要指出的是,从上表中我们可以看出视频分类的数据集实际上比图像分类的数据集的规模小得多。这是因为在视频上进行标注远比对图像进行标注要费时费力。trimmed视频还好些,基本标注时间等于视频时长。如果是untrimmed视频,需要在视频中手工标注动作的起始和结束时间,根据测试,需要花费视频长度的 4 倍时间。

3.研究进展

在视频分类中,有两种非常重要的特征:表观特征(appearance)和时序特征(dynamics)。一个视频分类系统的性能很大程度上取决于它是否提取并利用好了这两种特征。但是提取这两种特征并不那么容易,会遇到诸如形变/视角转换/运动模糊等因素的影响。因此,设计对噪声鲁棒性强且能保留视频类别信息的有效特征至关重要。

根据ConvNets(深度卷积神经网络)在图像分类上取得的成功,很自然地,我们会想到把ConvNets用到视频分类中。但是,ConvNets本身是对二维图像的表观特征的建模,而对于视频来说,除了表观特征,时序特征也很重要。那么如果把时序特征用起来呢?通常有三种思路:LSTM,3D-ConvNet和Two-Stream。

在这里插入图片描述

1. LSTM系列

LRCNs[1]是LSTM和ConvNet结合进行视频分类的方法。这种结合很自然,已经在图像分类任务上训练好的ConvNet分类器,可以很好地提取视频帧的表观特征;而对于时序特征的提取,则可以通过直接增加LSTM层来实现,因为LSTM能够将多个时刻的状态作为当前时刻的输入,从而允许时间维度上的信息得以保留。

在这里插入图片描述
视频分类任务是变长输入定长输出的。文章另外还介绍了LRCNs用于图像描述(定长输入变长输出)和视频描述(变长输入变长输出)的方案,感兴趣的同学可以自行查看。

2. 3D-ConvNet及其衍生系列

C3D[2]是Facebook的一个工作,它主要是把2D Convolution扩展到3D。其原理如下图,我们知道2D的卷积操作是将卷积核在输入图像或特征图(feature map)上进行滑窗,得到下一层的特征图。例如,图(a)是在一个单通道的图像上做卷积,图(b)是在一个多通道的图像上做卷积(这里的多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的帧,即一小段视频),最终的输出都是一张二维的特征图,也就是说,多通道的信息被完全压缩了。而在3D卷积中,为了保留时序的信息,对卷积核进行了调整,增加了一维时域深度。如图©所示,3D卷积的输出仍是一个三维的特征图。因此通过3D卷积,C3D可以直接处理视频,同时利用表观特征和时序特征。

在这里插入图片描述关于实验效果,C3D在UCF101上的精度为82.3%,并不高,其原因在于C3D的网络结果是自己设计的简单结构(只有11层),而没有借鉴或预训练于其他成熟的ConvNets结构。

因此针对这一点,有很多学者提出了改进。

  • I3D[3] 是 DeepMind 基于 C3D 作出的改进,值得一提的是 I3D 这篇文章也是发布 Kinetics数据集的文章。其创新点在于模型的权重初始化,如何将预训练好的2D ConvNets的权重赋值给3D ConvNets。具体地,将一张图像在时间维度上重复T次可以看作是一个(非常无聊的)T帧的视频,那么为了使该视频在3D结构上的输出和单帧图像在2D结构的输出相等,可以使3D卷积的权重等于2D卷积的权重重复T次,再将权重缩小T倍以保证输出一致。I3D在Kinetics数据集上进行预训练然后用于UCF101,其精度可达到98.0%。
  • P3D[4]是MSRA基于C3D作出的改进,基本结构是把ResNet扩展为“伪”3D卷积,“伪”3D卷积的意思是利用一个133的2D空间卷积和311的1D时域卷积来模拟常用的333的3D卷积,如下图所示。P3D在参数数量、运行速度等方面对C3D作出了优化。

在这里插入图片描述

3. Two-Stream Network及其衍生系列

Two Stream[5]是VGG组的工作(不是UGG哦),其基本原理是训练两个ConvNets,分别对视频帧图像(spatial)和密集光流(temporal)进行建模,两个网络的结构是一样的,都是2D ConvNets,见下图。两个stream的网络分别对视频的类别进行判断,得到class score,然后进行分数的融合,得到最终的分类结果。

可以看出Two-Stream和C3D是不同的思路,它所用的ConvNets都是2D ConvNets,对时序特征的建模体现在两个分支网络的其中一支上。Two-Stream的实验结果,在UCF101上达到88.0%的准确率。

在spatial stream和temporal stream如何融合的问题上,有很多学者作出了改进。

  • [6]在two stream network的基础上,利用3D Conv和3D Pooling进行spatial和temporal的融合,有点two stream + C3D的意思。另外,文章将两个分支的网络结构都换成了VGG-16。在UCF101的精度为92.5%。
  • TSN[7]是CUHK的工作,对进一步提高two stream network的性能进行了详尽的讨论。two stream在这里被用在视频片段(snippets)的分类上。关于two stream的输入数据类型,除去原有的视频帧图像和密集光流这两种输入外,文章发现加入warped optical flow也能对性能有所提高。在分支网络结构上尝试了GoogLeNet,VGG-16及BN-Inception三种网络结构,其中BN-Inception的效果最好。在训练策略上采用了跨模态预训练,正则化,数据增强等方法。在UCF101上达到94.2%的精度。

4. 其他

除了以上两种常见的思路以外,也有学者另辟蹊径,尝试与众不同的方法。

  • TDD[8]是对传统的iDT[9]算法的改进(iDT算法是深度学习以前最好的行为识别算法),它将轨迹特征和two-stream network结合使用,以two-stream network作为特征提取器,同时利用轨迹对特征进行选择,获得轨迹的深度卷积描述符,最后使用线性SVM进行视频分类。TDD是一个比较成功的传统方法与深度学习算法相结合的例子,在UCF上达到90.3%的精度。
  • ActionVLAD[10]是一种特征融合的方式,它可以融合two stream的特征,C3D的特征以及其他网络结构的特征。其思想是对原有的特征计算残差并聚类,对不同时刻的帧进行融合,得到新的特征。ActionVLAD是对视频空间维度和时间维度的特征融合,使得特征的表达更全面。
  • Non-local Network[11]是Facebook何恺明和RBG两位大神近期的工作,非局部操作(non-local operations)为解决视频处理中时空域的长距离依赖打开了新的方向。我们知道,卷积结构只能捕捉数据的局部信息,它对于非局部特征的信息传递不够灵活。Non-local Network则根据所有帧所有位置的信息对某个位置进行调整。文章把这个block加在I3D上做了实验,在Charades上精度提升2%。

转载简书

视频分类(Classification)和摘要(Captioning)总结 例如,在视频分析中,3D CNN可以检测动作、行为和事件,为视频分类、视频理解和动作识别等任务提供强大的能力。例如,在动作识别任务中,光流信息可以帮助区分不同的动作类别,而RGB信息可以提供更多的上下文信息。然而,与2D CNN相比,3D CNN具有更高的计算复杂性和更大的模型参数量,因此可能需要更多的计算资源和数据来训练。基本思路使用2dcnn或者3dcnn提取rgb视频或者光流视频每一帧的特征,将得到的每一帧的特征输入LSTM或者Transformer这样的语言模型进行学习,从而输出任意形态的句子。 阅读详情

相关推荐

Pytorch基础知识(14)基于PyTorch的视频分类

到目前为止,我们只处理了图像。我们建立了各种图像分类、检测和分割模型。我们甚至可以凭空生成新的图像(噪音)。但是图像是静止的。静态图像中没有运动。真正的快乐来自运动。这就是视频发挥作用的方式。 事实上,视频并不比图像复杂多少。视频实际上是一组连续播放的帧或图像的集合。 为了获得流畅的视频,我们需要每秒播放一定数量的帧数;否则,视频看起来脱节。我们日常生活中处理的大多数视频每秒超过30帧。按照这个比例,一个10秒长的短视频相当于300张图片。如此多的图像让事情变得复杂。 尽管如此复杂,我们仍有许多应用程序可以

weixin_43229348的博客 1万+

【深度学习】视频分类技术整理

最近在做多模态视频分类,本文整理了一下视频分类的技术,分享给大家。传统的图像分类任务中,一般输入的为一幅HxWxC的二维图像,经过卷积等操作后输出类别概率。对于视频任务,输入是由连续的二维图像帧组成的一个存在时序关系的二维图像序列,或是视为一个TxHxWxC的四维张量。这样的数据具有以下特点:1. 帧之间的变化信息往往能反映视频的内容;2. 相邻帧之间变化一般较小,存在大...

fengdu78的博客 6977

硬货 | 手把手带你构建视频分类模型(附Python演练))

译者 |VK 来源 |AnalyticsVidhya 概述 了解如何使用计算机视觉和深度学习技术处理视频数据 我们将在Python中构建自己的视频分类模型 这是一个非常实用的视频分类教程,所以准备好Jupyter Notebook 介绍 我们可以使用计算机视觉和深度学习做很多事情,例如检测图像中的对象,对这些对象进行分类,从电影海报中生成标签。 这一...

TensorFlowNews 7600

视频分析中的那点事情

对视频进行分类是一个活跃的研究领域,因为处理这种类型的问题需要大量的数据。内存需求经常达到现代GPU的极限,可能需要在多台机器上进行分布式的训练。 目前学者们正在探索复杂度不断增加的几个方向,来回顾一下: 第一种方法是通过将视频的每一帧视为一幅单独的图像,利用二维 CNN 进行处理。这种方法将视频分类问题简化为图像分类问题。每帧视频图像都有类别输出,并且根据各帧输出的类别,选择频率最高的类别作为视...

weixin_43506858的博客 626

人体行为识别和视频分类算法介绍

在这篇文章中,我们将介绍一些方法来制作用于人体行为识别的视频分类器。在我们讨论视频分类之前,让我们先了解一下什么是人体行为识别。简单地说,对某人正在执行的活动/动作进行分类或预测的任务称为活动识别。我们可能会有一个问题:这与普通的分类任务有什么不同?这里的问题是,。看看这个人做的这个后空翻动作,我们只有看完整的视频才能判断这是一个后空翻。 如果我们提供的模型只是来自视频片段的随机快照(如下图),那么它可能会错误地预测动作。 如果一个模型只看到上面的图像,那么它看起来有点像这个人正在下降,所以它预测会下降。

@bangbang的博客 2529

视频分类数据集介绍

视频分类数据集   在视频分类项目中,有很多经典的公开数据集,目前主要的数据集如列表所示:   重点介绍三个中等规模的数据集。 1. UCF101 动作识别数据集,从youtube收集而得,共包含101类动作。其中每类动作由25个人做动作,每人做4-7组,共13320个视频,分辨率为320*240,共6.5G。 UCF101在动作的采集上具有非常大的多样性,包括相机运行、外观变化...

dake1994的博客 2万+

ActionVLAD算法详解

action vlad

Michael’s Blog 1269

CVPR2020论文解析:视频分类Video Classification

CVPR2020论文解析:视频分类Video Classification Rethinking Zero-shot Video Classification: End-to-end Training for Realistic Applications 论文链接:https://arxiv.org/pdf/2003.01455.pdf 摘要 深度学习(deep learning,DL)是在大型...

吴建明wujianming_110117 3913

深度学习实现视频分类的6种方法

对视频进行分类是一个活跃的研究领域,因为处理这种类型的问题需要大量的数据。内存需求经常达到现代GPU的极限,可能需要在多台机器上进行分布式的训练。 目前学者们正在探索复杂度不断增加的几个方向,来回顾一下: 第一种方法是通过将视频的每一帧视为一幅单独的图像,利用二维 CNN 进行处理。这种方法将视频分类问题简化为图像分类问题。每帧视频图像都有类别输出,并且根据各帧输出的类别,选择频率最高的类别作为视频的分类结果。 第二种方法是创建一个单一的网络,将二维 CNN 与一个 RNN 结合在一起。这个想法是,CN

爱CV 1万+

简单视频分类模型

视频可以简单看作一系列图片的集合 1. 视频分类简介 视频分类通过有以下几种方法: 2DCNN + LSTM 3DCNN 本文仅仅介绍最简单的2DCNN + LSTM的方法,使用tensorflow 2.0+ 进行实现,保证代码尽可能简短,但性能将会一般。 2. 数据集准备 虽然视频是由很多帧构成的,但是如果我们选取所有帧会消耗大量的计算资源,并且不同视频帧数不同会导致LSTM的输入不确定。为了保证所有视频提取出的所有帧数量相同,本文使用最简单的方法进行预处理(等间隔采样法)。 等间隔采样方法示例:.

自由小兵儿 4342

LSTM在视频分类中的原理与实践

序列建模: LSTM能够有效地对视频帧序列进行建模,捕捉视频中的时序信息。特征提取: LSTM可以自动学习视频帧序列中的特征表示,无需手动设计特征。端到端训练: LSTM可以与其他深度学习模型(例如卷积神经网络)进行端到端训练,从而实现更好的分类性能。LSTM可以用于生成视频的简短摘要,例如提取视频中的关键帧、生成视频的文字描述等。LSTM作为一种强大的序列模型,在视频分类任务中取得了显著的成果。LSTM能够有效地捕捉视频中的时序信息,并可以与其他深度学习模型进行端到端训练。

AI天才研究院 1651

深度学习进阶,Keras视频分类

Keras视频分类 在此教程中,您将学习如何使用Keras、Python 和深度学习执行视频分类。 具体来说,您将学习: 视频分类与标准图像分类的区别 如何使用 Keras 进行图像分类来训练一个旋转神经网络 如何采取CNN,然后使用它的视频分类 如何使用滚动预测平均值来减少结果中的"闪烁" 本教程将作为对时间性深度学习概念的介绍,为我们讨论长期短期记忆网络(LSTM)并最终获得人类活动识别铺平道路。 要学习如何执行视频分类与Keras和深度学习,只是继续阅读! 视频可以理解为一系列单独的图像;因此,许

AI浩 3171

基于Keras的深度学习视频分类实战

视频分类是计算机视觉领域的一个核心任务,它旨在将视频内容按照其内容或上下文自动归入一个或多个类别。这项技术在诸如视频搜索、内容审核、智能监控等众多应用中扮演着重要角色。准确有效的视频分类系统可以极大地提高信息检索的效率,丰富用户内容消费体验,同时为智能分析提供关键数据支持。Keras的设计哲学之一是模块化,即用户可以灵活地将不同的组件拼接起来,以构建适合的模型架构。Keras中的模块化主要体现在以下几个方面:模型层(Layers)

weixin_42356162的博客 845

使用预训练模型的视频分类

torchvision是PyTorch的一个图形图像库,专门服务于PyTorch深度学习框架,用于构建计算机视觉模型。它提供了丰富的功能和工具,帮助开发人员和研究人员轻松处理图像数据,从而加速计算机视觉应用的开发和部署。在torchvision库中,有几个核心组件值得一提。首先是torchvision.datasets,这个模块包含了许多加载数据的函数以及常用的数据集接口,如MNIST、CIFAR10、ImageNet等,使得数据准备变得简单快捷。

夏天又到了的专栏 1463

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1517

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

【视频分类】3D-ResNets-PyTorch复现

参考代码: https://github.com/kenshohara/3D-ResNets-PyTorch 0.环境 ubuntu16.04 python3.6 cuda9.0 # pip install torch==1.1.0 joblib # apt install apt-get -y install ffmpeg 1.数据准备 UCF101视频分类数据集:http://www.crcv.ucf.edu/datasets/human-actions/ucf101/UCF101.

聿默的博客 7575

基于STM32智能震动报警器震动检测声光报警系统设计

*单片机设计介绍,基于STM32智能震动报警器震动检测声光报警系统设计。

2201_75940997的博客 2150

视频分类 算法学习总结

视频分类 pytorchvideo

jacke121的专栏 1186

QGIS:安装Deepness插件+应用

简单的描述了deepness的安装应用历程,重点是记录博主本次遇到的坑

fengyi157的博客 2337

C#上位机开发入门:从基础到进阶的全方位指南

C#作为一门现代化编程语言,具备强大的功能和广泛的生态支持,适合用于开发各种类型的上位机应用。通过学习并掌握UI开发、通信协议、多线程编程、数据库操作等技能,你可以打造出稳定、易用、性能优异的上位机软件。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 8316

视频分类算法

一、传统视频分类方法 深度学习兴起前,大多数视频分类都是基于手工设计的特征和典型的机器学习方法。 比如:基于局部时空域的运动信息和表现信息,利用词袋模型等方式审核才能视频编码,然后利用视频编码来训练分类器(SVM)。这种基于人工设计特征的方法,如HOG、HOF、MBH 等特征,在经过词袋模型或Fisher向量生成视频编码。 目前,基于轨迹的方法,DT 和 IDT 方法,是人工设计的特征...

weixin_30378311的博客 2281

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 112

C3D的视频分类

很久之前做了C3D的视频分类,现在详细把整个项目的细节描述一下。 首先介绍一下C3D:对于一段视频来说,它是连续的帧图像叠加起来的,所以可以考虑在生成通道图像的时候,把多帧图像叠加的特性讨论进去。 一个视频段输入,其大小为 c∗l∗h∗w ,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=Tr...

qq_28778507的博客 6814

C# HttpClient完全攻略:从入门到精通只需5步

HttpClient是.NET框架中用于发送HTTP请求和接收HTTP响应的类。它基于异步编程模型,使得网络操作更加高效和灵活。

java专栏 1579

MIPI CSI-2

来源:公众号瓜大三哥版权归三哥所有1 MIPI简介2 MIPI CSI-2简介2.1 MIPI CSI-2 的层次结构2.2 CSI-2协议层2.3 打包/解包层2.4 ...

OpenFPGA的博客 2114
上一篇: 直方图计算 - calcHist函数详解
下一篇: 回调函数
like_study_cat
博客等级 码龄7年 44粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值