PaddleVideo:PP-TSM 视频分类

本文记录:使用Paddle框架训练TSM(Temporal Shift Module

前提条件:已经安装Paddle和PadleVideo,具体可参考前一篇文章。

1-数据准备:

以UCF101为例:内含13320 个短视频,视频类别:101 种

1. 主要包括5类动作 :人和物体交互,只有肢体动作,人与人交互,玩音乐器材,各类运动

2. 每类视频被分为25组,每组包含4-7个视频,同组视频具有一些相似的特征,比如背景、人物等

3. 视频来自YouTube,25FPS码率,320x240分辨率,avi格式,DivX编码方式,平均时长7.21秒

4. 视频按照 v_X_gY_cZ.avi的格式命名,其中X表示类别、Y表示组、Z表示视频编号,例如:v_ApplyEyeMakeup_g03 c04.avi表示ApplyEyeMakeup类别下,第03组的第04个视频

标签下载、数据下载:

# 切换到ucf101目录
cd PaddleVideo/data/ucf101# 下载annotations文件
sh download_annotations.sh# 下载UCF101的视频文件,视频会自动解压移动到videos文件夹
sh download_videos.sh

视频抽帧:自动存储到rawframes文件夹

# 提取视频文件的frames
python extract_rawframes.py ./videos/ ./rawframes/ --level 2 --ext avi

生成list文件

# 生成视频文件的路径list
python build_ucf101_file_list.py videos/ --level 2 --format videos --out_list_path ./# 生成frames文件的路径list
python build_ucf101_file_list.py rawframes/ --level 2 --format rawframes --out_list_path ./

参数说明:

videos/ 或者 rawframes/ : 表示视频或者frames文件的存储路径--level 2 : 表示文件的存储结构--format: 表示是针对视频还是frames生成路径list--out_list_path : 表示生成的路径list文件存储位置

合并list文件

cat ucf101_train_split_*_rawframes.txt > ucf101_train.txt
cat ucf101_val_split_*_rawframes.txt > ucf101_val.txt

最终文件目录结构

├── data
|   ├── dataset
|   │   ├── ucf101
|   │   │   ├── ucf101_{train,val}.txt
|   │   │   ├── ucf101_{train,val}_split_{1,2,3}_rawframes.txt
|   │   │   ├── ucf101_{train,val}_split_{1,2,3}_videos.txt
|   │   │   ├── annotations
|   │   │   ├── videos
|   │   │   │   ├── ApplyEyeMakeup
|   │   │   │   │   ├── v_ApplyEyeMakeup_g01_c01.avi
|   │   │   │   │   └── ...
|   │   │   │   ├── YoYo
|   │   │   │   │   ├── v_YoYo_g25_c05.avi
|   │   │   │   │   └── ...
|   │   │   │   └── ...
|   │   │   ├── rawframes
|   │   │   │   ├── ApplyEyeMakeup
|   │   │   │   │   ├── v_ApplyEyeMakeup_g01_c01
|   │   │   │   │   │   ├── img_00001.jpg
|   │   │   │   │   │   ├── img_00002.jpg
|   │   │   │   │   │   ├── ...
|   │   │   │   │   │   ├── flow_x_00001.jpg
|   │   │   │   │   │   ├── flow_x_00002.jpg
|   │   │   │   │   │   ├── ...
|   │   │   │   │   │   ├── flow_y_00001.jpg
|   │   │   │   │   │   ├── flow_y_00002.jpg
|   │   │   │   ├── ...
|   │   │   │   ├── YoYo
|   │   │   │   │   ├── v_YoYo_g01_c01
|   │   │   │   │   ├── ...
|   │   │   │   │   ├── v_YoYo_g25_c05

2-模型训练

PaddleVideo/docs/zh-CN/benchmark.md at develop · PaddlePaddle/PaddleVideo · GitHub

根据benchmark性能指标选择所需模型:初步看8帧配置下,PP-TSMv2性价比不错

预训练模型下载

根据上面的选型,到 paddlevideo/modeling/backbones 目录下打开自己选择的模型

文件中 MODEL_URLS 就是预训练模型的下载路径,手动下载

放到 PaddleVideo/data 目录 

修改训练配置文件

进入PaddleVideo/configs/recognition/pptsm/v2 目录,

因为我们使用的是ucf101数据集训练,所以复制 pptsm_lcnet_k400_8frames_uniform.yaml 一份,并重命名为:pptsm_lcnet_ucf101_8frames_uniform.yaml 来进行修改

修改pretrained、num_seg、class_num、data_prefix、file_path 

开启训练

单卡训练

# 单卡训练
export CUDA_VISIBLE_DEVICES=0         #指定使用的GPU显卡id
python main.py  --validate -c configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml

多卡训练 

# 多卡训练
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
python -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7"  --log_dir=log_pptsm  main.py  --validate -c configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml

参数说明:

-c 必选参数,指定运行的配置文件路径,具体配置参数含义参考配置文档
--validate 可选参数,指定训练时是否评估
-o: 可选参数,指定重写参数,例如: -o DATASET.batch_size=16 用于重写train时batch size大小
--gpus参数指定使用的GPU显卡id
--log_dir参数指定日志保存目录 多卡训练详细说明可以参考单机多卡训练

输出日志

运行日志,并默认保存在./log目录下

3-模型测试(可选-因为训练的时候已经测试了,没必要再去测试一次)

对于视频分类任务,模型测试时有两种不同的方式,中心采样(Uniform)和密集采样(Dense)

中心采样:速度快,适合产业应用,但精度稍低。

密集采样:精度高,但由于测试要对多个clip进行预测,比较耗时。

轻量化模型PP-TSMv2统一使用中心采样方式进行评估。PP-TSM则提供两种不同的评估方式。

3.1-中心采样测试

中心采样测试,1个视频共采样1个clips。

时序上:等分成num_seg段,每段中间位置采样1帧

空间上:中心位置采样。

也可以使用如下命令对训练好的模型进行测试:

python3 main.py --test -c configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml -w output/ppTSMv2/ppTSMv2_best.pdparams

3.2-中心采样测试

密集采样测试,1个视频共采样10*3=30个clips。

时序上:先等分10个片段,每段从起始位置开始,以64//num_seg为间隔连续采样num_seg帧;

空间上:左中,中心,右中3个位置采样。

python3 main.py --test -c configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml -w output/ppTSMv2/ppTSMv2_best.pdparams

4-导出推理模型

# 切换到output目录
cd output# 创建inference目录存储推理模型
mkdir ppTSMv2_inference

python tools/export_model.py -c configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml \-p output/ppTSMv2/ppTSMv2_best.pdparams \-o output/ppTSMv2_inference
├── output/ppTSMv2_inference
│   ├── ppTSMv2.pdiparams       # 模型权重文件
│   ├── ppTSMv2.pdiparams.info  # 模型信息文件
│   └── ppTSMv2.pdmodel         # 模型结构文件

5-基于python进行模型推理

python tools/predict.py --input_file data/example.avi \--config configs/recognition/pptsm/v2/pptsm_lcnet_ucf101_8frames_uniform.yaml \--model_file output/ppTSMv2_inference/ppTSMv2.pdmodel \--params_file output/ppTSMv2_inference/ppTSMv2.pdiparams \--use_gpu=True \--use_tensorrt=False

6-基于onnx进行模型推理

详见下一篇博文。

参考链接

1:PP-TSM视频分类模型PaddleVideo/docs/zh-CN/model_zoo/recognition/pp-tsm.md at develop · PaddlePaddle/PaddleVideo · GitHubAwesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognition model, practical applications for video tagging and sport action detection. - PaddleVideo/docs/zh-CN/model_zoo/recognition/pp-tsm.md at develop · PaddlePaddle/PaddleVideoicon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleVideo/blob/develop/docs/zh-CN/model_zoo/recognition/pp-tsm.md

2: PP-TSMv2PaddleVideo/docs/zh-CN/model_zoo/recognition/pp-tsm_v2.md at develop · PaddlePaddle/PaddleVideo · GitHubAwesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognition model, practical applications for video tagging and sport action detection. - PaddleVideo/docs/zh-CN/model_zoo/recognition/pp-tsm_v2.md at develop · PaddlePaddle/PaddleVideoicon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleVideo/blob/develop/docs/zh-CN/model_zoo/recognition/pp-tsm_v2.md

3: ucf101数据处理

PaddleVideo/docs/zh-CN/dataset/ucf101.md at develop · PaddlePaddle/PaddleVideo · GitHubAwesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognition model, practical applications for video tagging and sport action detection. - PaddleVideo/docs/zh-CN/dataset/ucf101.md at develop · PaddlePaddle/PaddleVideoicon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleVideo/blob/develop/docs/zh-CN/dataset/ucf101.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…

AI实时换天解决方案:重塑汽车与旅行拍摄新视界

在汽车拍摄与旅行摄影领域,天空作为画面中的重要元素,往往决定着整体视觉效果的成败。美摄科技作为业界领先的AI视觉技术提供商,近日推出了全新的AI实时换天解决方案,为用户带来了前所未有的创意空间与效率提升。 传统的换天技术…

hive-3.1.2分布式搭建与hive的三种交互方式

hive-3.1.2分布式搭建: 一、上传解压配置环境变量 在官网或者镜像站下载驱动包 华为云镜像站地址: hive:Index of apache-local/hive/hive-3.1.2 mysql驱动包:Index of mysql-local/Downloads/Connector-J # 1、解压 tar -zx…

03 Php学习:echo 、 print 、EOF

echo 和 print 在 PHP 中有两个基本的输出方式: echo 和 print。 echo 和 print 区别: echo - 可以输出一个或多个字符串print - 只允许输出一个字符串,返回值总为 1 注意:echo 输出的速度比 print 快, echo 没有返回值&…

【已完成】把Win10右键改回Win7的模样

win11右键设置成原来模样的方法如下: 1、winr打开运行窗口,输入regedit,按下回车键确认即可打开注册表。 2、在路径中输入:HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID,或者是依次定位点开到CLSID。 3、右键点击CLSID&…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…

基础入门-操作系统名词文件下载反弹shell防火墙绕过

目录 基础入门-操作系统&名词&文件下载&反弹shell&防火墙绕过 知识点 参考: 演示案例 基础案例 1:操作系统-用途&命令&权限&用户&防火墙 实用案例 1:文件上传下载-->解决无图形化&解决数据传输 实用案例 …

Redis中的集群(二)

节点 集群数据结构 redisClient结构和clusterLink结构的相同和不同之处 redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区,这两个结构的区别在于,redisClient结构中的套接字和缓冲区是用于连接客户端的,而clust…

Visual Studio Code 终端为管理员权限

第一部 1、 Visual Studio Code 快捷方式启动选项加上管理员启动 第二步 管理员方式运行 powershell Windows 10的任务栏自带了搜索。或者开始菜单选搜索只需在搜索框中输入powershell。 在出来的搜索结果中右击Windows PowerShell,然后选择以管理员方式运行。 执…

网络安全:重要性与应对措施

1. 网络安全的重要性 随着互联网的普及和信息技术的快速发展,网络安全问题已经变得日益突出。网络攻击者可以通过各种手段窃取个人信息、破坏系统、传播病毒等,给个人和社会带来巨大的损失。因此,网络安全已经成为信息化时代的重要问题之一。…

numpy,matplotilib学习(菜鸟教程)

所有内容均来自于: NumPy 教程 | 菜鸟教程 Matplotlib 教程 | 菜鸟教程 numpy模块 numpy.nditer NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。 for x in np.nditer(a, orderF):Fortran order,即是列序优先&#x…

UML2.0在系统设计中的实际使用情况

目前我在系统分析设计过程中主要使用UML2.0来表达,使用StarUML软件做实际设计,操作起来基本很顺手,下面整理一下自己的使用情况。 1. UML2.0之十三张图 UML2.0一共13张图,可以分为两大类:结构图-静态图,行…

CADMap3D2024 2023下载地址及安装教程

CAD Map 3D是由Autodesk开发的一款专业的地图制作和GIS(地理信息系统)软件。它是AutoCAD系列软件的一个扩展,提供了一系列特定于地理数据的工具和功能。 CAD Map 3D主要用于处理和管理与地理空间相关的数据,在地图制作、城市规划…

备考分享丨云计算HCIE实验考试需要注意什么

去年九月底我在朋友的推荐下报考了誉天的云计算方向,在此期间我非常感谢田sir、苗苗老师和凡凡老师,每次我遇见问题找他们都能给我完完全全的解决,给我这个非科班出身的学员很大的鼓励与帮助。 我是经济学专业,毕业之后没有考研&…

04---webpack编写可维护的构建配置

01 构建配置抽离成npm包; 意义:通用性: 业务开发者无需关注构建配置 统一团队构建脚本可维护性:构建配置合理的拆分 质量:冒烟测试 单元测试 持续集成构建配置管理的可选方案:1 通过多个配置文件管理不同…

基于Android的记单词App系统的设计与实现

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

019——IIC模块驱动开发(基于EEPROM【AT24C02】和I.MX6uLL)

目录 一、 IIC基础知识 二、Linux中的IIC(韦东山老师的学习笔记) 1. I2C驱动程序的层次 2. I2C总线-设备-驱动模型 2.1 i2c_driver 2.2 i2c_client 三、 AT24C02 介绍 四、 AT24C02驱动开发 实验 驱动程序 应用程序 一、 IIC基础知识 总线类…

机器学习(三)

什么是特征工程 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。 意义︰会直接影响机器学习的效果 特征工程的位置与数据处理的比较 pandas:—个数据读取非常方便以及基本的处理格式的工具sklearn:对于特征的处理提…

计算机视觉——Python OpenCV BGR转HSV

这里将介绍如何使用 OpenCV 与 Python 来作彩色影像转HSV(RGB to HSV 或 BGR to HSV),在写 Python 影像处理程序时常会用到 OpenCV cvtColor 作颜色空间转换的功能,接下来介绍怎么使用 Python 搭配 OpenCV 模块来进行 RGB/BGR 转 HSV 彩色转HSV空间。 H…

(WSI分类)WSI分类文献小综述 2024

2024的WSI分类。 Multiple Instance Learning Framework with Masked Hard Instance Mining for Whole Slide Image Classification (ICCV2024) 由于阳性组织只占 Gi- gapixel WSI 的一小部分,因此现有的 MIL 方法直观上侧重于通过注意力机…