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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】python的选择语句的三个题目

1.乘坐飞机时,有些航班没有行李额度,当乘客的行李小于等于20公斤时,按每公斤1.68元收费;大于20公斤时,按每公斤1.98元收费,编写程序计算收费情况(保留两位小数) air_bagfloat(input…

java中的Arrays类

java.util.Arrays类 java中的java.util.Arrays类是JDK提供的对数组进行操作的工具类,其中包含了数组的常规操作,有排序、填充、查找、打印等内容。 toString方法 Arrays类里的toString方法是静态方法,能够通过类名.方法名的方式进行调用。这…

[Java基础揉碎]Math类

目录 基本介绍 方法一览(均为静态方法) 1) abs 绝对值 2) pow 求幂 3) ceil 向上取整 4) floor 向下取整 5) round 四舍五入 6) sqrt 求开方 7) random求随机数 8) max 求两个数的最大值 9) min 求两个数的最小值 基本介绍 Math类包含用于执行基本数学运算的方法&…

计算器(C语言)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 介绍关键代码运行代码(3种) 介绍 标准计数器:执行加减乘除等等科学计算器:执行分数、统计学、指数函数、对数、三角…

【机器学习300问】64、简写出常见的激活函数及其导数?

在机器学习特别是深度学习中,激活函数是用于增加模型的非线性特性。对于一个给定的输入信号,激活函数定义了输出信号的形式。以下是一些常见的激活函数及其导数: 一、Sigmoid函数 函数 导数 二、Tanh双曲正切函数 函数 导数 三、ReLU线性整…

通过本机调试远端路由器非直连路由

实验目的:如图拓扑,通过本机电脑发,telnet调试远程AR4设备。 重点1:通过ospf路由协议配置拓扑网络,知识点:ospf配置路由器协议语法格式,area区域的定义,区域内网络的配置&#xff0…

Jenkins使用-绑定域控与用户授权

一、Jenkins安装完成后,企业中使用,首先需要绑定域控以方便管理。 操作方法: 1、备份配置文件,防止域控绑定错误或授权策略选择不对,造成没办法登录,或登录后没有权限操作。 [roottest jenkins]# mkdir ba…

python--正则表达式,元字符,反义符,转义符,位数问题

正则表达式(regular expression): 为什么使用正则表达式: 在软件开发过程中,经常会涉及到大量的关键字等各种字符串的操作,使用正则表达式能很大程度的简化开发的复杂度和开发的效率,所以pytho…

YOLOV8注意力改进方法:DilateFormer多尺度空洞 Transformer(附改进代码)

原论文地址:原论文下载地址 即插即用的多尺度全局注意力机制 本文提出了一种新颖的多尺度空洞 Transformer,简称DilateFormer,以用于视觉识别任务。原有的 ViT 模型在计算复杂性和感受野大小之间的权衡上存在矛盾。众所周知,ViT 模型使用全局注意力机制,能够在任意图像块…

理解Go语言中上下文

开发人员有时会误解context.Context类型,尽管它是Go语言的关键概念之一,也是Go中并发代码的基础之一。接下来让我们看看这个概念,并确保我们理解为什么乃如何有效地使用它。 根据官方文档: 上下文(context)携带最后期限、取消信…

Flink WordCount实践

目录 前提条件 基本准备 批处理API实现WordCount 流处理API实现WordCount 数据源是文件 数据源是socket文本流 打包 提交到集群运行 命令行提交作业 Web UI提交作业 上传代码到gitee 前提条件 Windows安装好jdk8、Maven3、IDEA Linux安装好Flink集群,可…

GitHub 仓库 (repository) Watch - Star - Fork - Follow

GitHub 仓库 [repository] Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库,今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高,代表…

基于ubuntu22.04系统安装nvidia A100驱动与NVLink启用

1、官方仓库 针对驱动包下载认准nvidia官网 dpkg -i nvidia-driver-local-repo-ubuntu2204-550.54.15_1.0-1_amd64.deb apt update apt search nvidia-driver-5502、安装 根据步骤1apt search nvidia-driver-550查出版本:此驱动包封在nvidia-driver-local-repo-ub…

大语言模型的多模态应用(多模态大语言模型的相关应用)

探索大语言模型在多模态领域的相关研究思路

【黑马头条】-day07APP端文章搜索-ES-mongoDB

文章目录 今日内容1 搭建es环境1.1 拉取es镜像1.2 创建容器1.3 配置中文分词器ik1.4 测试 2 app文章搜索2.1 需求说明2.2 思路分析2.3 创建索引和映射2.3.1 PUT请求添加映射2.3.2 其他操作 2.4 初始化索引库数据2.4.1 导入es-init2.4.2 es-init配置2.4.3 导入数据2.4.4 查询已导…

idea中MySQL数据库的配置

在IntelliJ IDEA中配置数据库可以通过以下步骤进行: 打开IntelliJ IDEA,在菜单栏中选择"View" -> "Tool Windows" -> "Database",打开Database工具窗口。 在Database工具窗口上方,点击"…

springboot+vue2+elementui+mybatis- 批量导出导入

全部导出 批量导出 报错问题分析 经过排查,原因是因为在发起 axios 请求的时候,没有指定响应的数据类型(这里需要指定响应的数据类型为 blob 二进制文件) 当响应数据回来后,会执行 axios 后置拦截器的代码&#xff0…

相机模型浅析

相机模型 文章目录 相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标 四个坐标系 ①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。因为数码相机安放在三维空间中,我们需要世界坐标…

主流排序简单集合

排序算法集合 选择排序 图解&#xff1a;以此类推直至 /*选择排序*/ void select_sort(vector<int>& nums) {/*选取一个基准元素逐个与后面的比较*/for (int i 0; i < nums.size() - 1-1; i) {int min i;/*定义随之变化的基准元素*/for (int j i 1; j <…

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套(部分题目分享,完整版带答案,共十套)

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我…