导读:目前互联网视频数据日益增多,用户观看短视频、小视频的时长也迅速增长,如何对海量的视频资源快速准确地分析、处理、归类是一个亟待解决的问题。视频理解技术可以多维度解析视频内容,理解视频语义,自动分类打标签,极大节省人工审核效率,节约成本;同时实现精准用户推荐,提升体验效果。

1.  视频理解之TSM

谈到视频理解,不得不给大家介绍一下新鲜出炉的视频理解技术之一:TSM(Temporal Shift Module)。TSM是由MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan和SongHan等人提出的通过时间位移模拟3D建模达到效果和性能的平衡,提高视频理解能力的模块。

跟TSM最相关的视频理解模型当属Limin Wang等人在ECCV2016上发表的Temporal Segment Network (TSN)了。TSN模型从视频中采样N帧图像并通过最简单直接地对N帧图像分类结果进行平均的方式进行时序信息融合,取得了当时State-of-the-art的性能,并得到大规模的应用。考虑到TSN模型对时序信息的建模不够充分,以I3D,S3D, P3D等为代表的一系列工作通过3D卷积进行端到端联合时空建模,这一系列工作尽管能捕获时空特征,但是相比TSN,由2D卷积到3D卷积不可避免地引入了额外计算量。TSM巧妙的通过时间维度特征map移位的想法,理论上用零额外计算开销达到了不同帧之间特征融合联合建模的目的。

论文: Temporal Shift Module for Efficient VideoUnderstanding:https://arxiv.org/pdf/1811.08383v2.pdf

先看一下文中给出的测试视频示例:如果图片分别从左往右播放和从右往左播放,测试者会给出不同但是正确的理解结果,说明对视频的理解强依赖于视频的时序关系。

看起来很有意思,我们继续深入研究一下。

2.  TSM关键技术介绍

在传统的图片分析的基础上,视频分析需要研究者补充关于时间信息(temporal information)的建模结构。目前,2D CNN和3D CNN是视频理解中最常用的两个方法:使用2D CNN 模型运算量少但会丧失部分时间信息;而使用3D CNN虽然效果好但运算量极大。面对这样的情况,MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan和Song Han等人提出了Temporal Shift Module (TSM)模块。他们将时间位移模块嵌入2D CNN,从而可以在不添加任何额外的计算量和参数的情况下,轻松地达到与3D CNN效果相当的视频理解能力。

上图中矩阵的行和列分别表示特征图中的temporal和channel维度。在TSM模块中,将一部分的channel在temporal维度上向前位移一步,一部分的channel在temporal维度上向后位移一步,位移后的空缺补零。通过这种方式在特征图中引入temporal维度上的上下文交互,提高了在时间维度上的建模能力。

在此基础上,MIT和IBM Watson AI Lab的研发人员将模块进一步细分为适合在线视频使用的TSM模块和适合离线视频使用的TSM模块。

双向(bi-direction)的TSM模块可获取过去和未来的时空信息,适合高吞吐量的离线视频使用;而单向(uni-direction)的TSM模块仅可比对现在和过去的时空信息,适用于低延迟在线视频的识别。

好了,基本原理搞清楚了,可以找一个项目直接上手分析了。

3.  飞桨TSM快速上手

飞桨(PaddlePaddle)目前实现的版本是以ResNet-50作为主干网络的TSM模型。

    3.1.数据准备

TSM的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考:

https://github.com/PaddlePaddle/models/blob/v1.5.1/PaddleCV/PaddleVideo/dataset/README.md

3.2.模型训练

数据准备完毕后,可以通过如下两种方式启动训练:

export FLAGS_fast_eager_deletion_mode=1
export FLAGS_eager_delete_tensor_gb=0.0
export FLAGS_fraction_of_gpu_memory_to_use=0.98
python train.py --model_name=TSM--config=./configs/tsm.txt--save_dir=checkpoints--log_interval=10--valid_interval=1--pretrain=${path_to_pretrain_model}bash scripts/train/train_tsm.sh

[1]  从头开始训练,需要加载在ImageNet上训练的ResNet50权重作为初始化参数,请下载此模型参数(https://paddlemodels.bj.bcebos.com/video_classification/ResNet50_pretrained.tar.gz)并解压,将上面启动脚本中的path_to_pretrain_model设置为解压之后的模型参数存放路径。如果没有手动下载并设置path_to_pretrain_model,则程序会自动下载并将参数保存在~/.paddle/weights/ResNet50_pretrained目录下面。

[2]  可下载已发布模型model(https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)通过--resume指定权重存放路径进行finetune等开发。

数据读取器说明:

模型读取Kinetics-400数据集中的mp4数据,每条数据抽取seg_num段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至target_size。

训练策略:

  • 采用Momentum优化算法训练,momentum=0.9

  • 权重衰减系数为1e-4

模型评估

可通过如下两种方式进行模型评估:

python test.py --model_name=TSM--config=configs/tsm.txt--log_interval=1--weights=$PATH_TO_WEIGHTSbash scripts/test/test_tsm.sh

[1]  使用scripts/test/test_tsm.sh进行评估时,需要修改脚本中的--weights参数指定需要评估的权重。

[2]  若未指定--weights参数,脚本会下载已发布模型进行评估。

当取如下参数时,在Kinetics400的validation数据集的评估精度如下:

seg_num

target_size

Top-1

8

224

0.70

3.3.模型推断

可通过如下命令进行模型推断:

  • 模型推断结果存储于TSM_infer_result中,通过pickle格式存储。

  • 若未指定--weights参数,脚本会下载已发布模型进行推断。

python infer.py --model_name=TSM--config=configs/tsm.txt--log_interval=1--weights=$PATH_TO_WEIGHTS--filelist=$FILELIS


3.4.效果实测

TOP5预测结果

分类

概率

Yoga(瑜伽)

0.973069250584

stretching_leg(腿部拉伸)

0.0223769713193

bending_back(向后弯腰)

0.00322460732423

stretching_arm(上臂拉伸)

0.00108245189767

Lunge(猛冲)

0.00108245189767

可以看到,TSM模型准确的判断出了视频中是瑜伽(yoga)动作,而且预测概率0.97也是足够高,完全可以在商业中应用起来。

赶紧来试试吧!

想与更多的深度学习开发者交流,请加入飞桨官方QQ群:432676488。

如果您想详细了解更多飞桨PaddlePaddle的相关内容,请参阅以下文档或点击阅读原文。

官网地址:https://www.paddlepaddle.org.cn

项目地址:

https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleCV/PaddleVideo

最后给大家推荐一个GPU福利 - Tesla V100免费算力!配合PaddleHub能让模型原地起飞~ 扫描下方二维码申请~


自动分类打标签!飞桨TSM模型帮你做视频理解相关推荐

  1. 基于百度飞桨PaddlePaddle模型训练的手势识别模型控制音乐播放器

    基于百度飞桨paddle模型训练的手势识别模型控制音乐播放器 前言 一.什么是百度飞桨PaddlePaddle? 一.1 飞桨AI Studio 二.实际使用 1.配置虚拟环境 2.安装 三.实战 四 ...

  2. 137% YOLOv3加速、10倍搜索性能提升!百度飞桨推出模型压缩神器

    深度学习模型压缩,又有利器问世. 最新消息,历经一年四个版本打磨之后,百度推出最新深度学习模型压缩工具PaddleSlim1.0. 不仅囊括了深度学习模型压缩中常用的量化.剪裁.蒸馏.模型结构搜索.模 ...

  3. 【飞桨特色模型挑战赛】CTRGCN的轻量化

    2022年10月12日最新提交所做的改进(当前V3):增加精度为91.157%的CTRCGN_lightV2,其GPU和CPU上推理速度对比分别比原模型分别快1.72倍和1.71倍! 2022年10月 ...

  4. 李沐读论文笔记--大模型时代下做科研的四个思路

    大模型时代下做科研的四个思路 0. 视频来源: 1. 提高效率(更快更小) 1.1 PEFT介绍(parameter efficient fine tuning) 1.2 作者的方法 1.3 AIM效 ...

  5. 强强联合,OpenCV搭载飞桨模型,帮你轻松玩转深度学习

    OpenCV 是一个跨平台的开源的计算机视觉库,提供了 Python.Ruby.MATLAB 等语言的接口.下一个版本OpenCV 5.0 不仅仅支持常规的图像分类.目标检测.图像分割和风格迁移功能, ...

  6. 使用飞桨完成手写数字识别模型

    手写数字识别任务 数字识别是计算机从纸质文档.照片或其他来源接收.理解并识别可读的数字的能力,目前比较受关注的是手写数字识别.手写数字识别是一个典型的图像分类问题,已经被广泛应用于汇款单号识别.手写邮 ...

  7. 飞桨企业版重磅发布智能边缘控制台 5分钟零代码自动化模型部署

    12月12日,由深度学习技术及应用国家工程实验室主办的WAVE SUMMIT+ 2021深度学习开发者峰会在上海召开.此次峰会,最让开发者惊艳的是飞桨开源框架v2.2的重磅发布.百度深度学习技术平台部 ...

  8. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!

    点击左上方蓝字关注我们 16年前的电影<功夫>可以说是家喻户晓,并将武侠片推向了一个新的高潮.在电影中,街头小混混阿星偶然间被打通了任督二脉,因善开悟,再有"如来神掌" ...

  9. 截屏就可以转文字?飞桨带您体验OCR超轻量中英文识别模型

    [飞桨开发者说]陈千鹤,华中科技大学计算机科学与技术学院大一在读 任务背景 目前很多实用小工具都趋向收费模式,即使免费,不是功能不完整,就是有很多约束条件,在应用时效果无法达到我们的预期.于是我萌生一 ...

最新文章

  1. MySQL BIT、BINARY、VARBINARY、BLOB(二进制类型)
  2. [function.require]: Failed opening required 杰奇cms
  3. HBase Java API 代码开发
  4. I2C和Modbus通信
  5. mysqld已删除但仍占用空间的_U盘删除的文件在哪?
  6. 贪心 区间覆盖最小值
  7. linux基础命令---bzip2
  8. WordPress图片插件:Auto Highslide修改版(转)
  9. 【HDU6194】string string string(统计出现k次的子串数目---后缀数组+st表)
  10. 27 构造连续的ICMP数据包
  11. 使用搜狗翻译实现网页多国语言转换
  12. 一场技术人的年终盛典:9个老兵对2016年总结与思考
  13. java中pl是什么意思,英语中pl是什么意思
  14. 神经网络怎么学,怎么学神经网络
  15. Conmi的正确答案——树莓派更新缓慢解决方案
  16. SAP销售订单一张交货单对应一张发票
  17. Object-Oriented JavaScript
  18. 2021年全球与中国手动切片机行业市场规模及发展前景分析
  19. 学习并掌握结构化写作方法,提高写作能力 ——结构化写作学习笔记(2)
  20. Python错误:SyntaxError: Non-UTF-8 code starting with

热门文章

  1. 【AI3D】nerf入门及其实操
  2. python工作岗位有哪些-请问掌握Python可以去哪些岗位?
  3. mysql查询去重后的总数
  4. java安全架构____RSA加密原理(1)
  5. java虚拟机是干吗的_从头开始学习-JVM(二):为什么java需要JVM(Java虚拟机)?...
  6. 红米Note4(全网通/免解锁)线刷兼救砖_解账户锁_纯净刷机包_教程
  7. 在Linux防火墙上过滤外来的ICMP timestamp和禁止Traceroute探测
  8. 家庭室内外环境监控需要哪些传感器?Gravity:五合一环境传感器详细介绍
  9. linux-sfdisk 用法
  10. uboot是用来干什么的