UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)

article/2025/3/19 22:09:42

UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)

  • 前言
  • 一、安装MMAction2
    • 1.引入库
    • 2.环境搭建
    • 3.安装
    • 4.准备原始数据集
    • 5.制作视频提取帧数据集
  • 二、部署TDN
    • 1.引入库
    • 2.读入数据
    • 3.训练模型
    • 4.查看结果
  • 本人实测结果


前言

将TDN部署在个人电脑上,并使用mmaction2处理的UCF101进行训练。
本人电脑环境为win10+CUDA10.2+Cudnn7.0
CUDA和Cudnn请自行选择合适的版本安装


一、安装MMAction2

MMAction2:https://github.com/open-mmlab/mmaction2
MMAction2是一个基于PyTorch的视频理解开源工具箱。 它是OpenMMLab项目的一部分。 本文需要用到提取帧的功能,详细说明请详见:https://github.com/open-mmlab/mmaction2/blob/master/docs/data_preparation.md中的Extract frames。

1.引入库

自行下载MMaction2的代码部分。git clone(使用git bash)或者下载zip后解压。

2.环境搭建

在Anaconda中新建环境TDN,Python版本为3.7。
本人系统环境为CUDA10.2,MMaction2要求Pytorch版本大于1.3,因此打开Pytorch官网安装:
Pytorch安装
具体请根据自己电脑的系统和CUDA版本来选择。

3.安装

**如觉得本文的安装步骤不够详细,那么详细的安装步骤请参考官方安装:https://github.com/open-mmlab/mmaction2/blob/master/docs/install.md

首先在anaconda中打开TDN环境:
TDN env
安装Pytorch:Pytorch安装指令参考上一小节
然后输入:

pip install git+https://github.com/open-mmlab/mim.git
mim install mmaction2 -f https://github.com/open-mmlab/mmaction2.git

此处如果出现文件权限相关问题:参见https://cloud.tencent.com/developer/article/1740284

实在解决不了可以试试方法二:
同样在anaconda中打开TDN环境
输入:

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.8/index.html

注意-f后面的参数中的cu102和torch1.8要更改为自己安装的版本(本人安装的是CUDA10.2所以此处是cu102,torch同理)

pip install mmcv-full

然后打开mmaction2所在文件夹(在terminal中使用cd命令),例如:
打开文件夹
然后运行:

pip install -r requirements/build.txt
python setup.py develop

即安装完成

4.准备原始数据集

UCF101介绍:https://www.crcv.ucf.edu/data/UCF101.php
下载UCF101数据集:https://www.crcv.ucf.edu/data/UCF101/UCF101.rar
下载好的数据集应为:
数据集
其中UCF101中是视频文件,大约6.7G
新建三个文件夹:
新建文件夹
①将UCF101TrainTestSplits-RecognitionTask->ucfTrainTestlist中的文件:
标注文件
移动到annotations文件夹中
②将UCF101中的所有文件夹(每一个文件夹中都是对应分类的视频文件):
视频文件夹
移动到Videos文件夹中
③rawframes为空文件夹,用来存放提取的视频帧
④将这三个文件夹移动到mmaction2\tools\data\ucf101文件夹中

5.制作视频提取帧数据集

打开TDN环境并进入mmaction2文件夹(后面涉及到进入某某文件夹不再贴图提示,均为相同操作):
mmaction2
执行:

cd tools/data #进入mmaction2\tools\data文件夹
python build_rawframes.py ucf101/videos ucf101/rawframes --task rgb  --num-gpu 1 --level 2 --ext avi --use-opencv --new-short 0 --new-width 320 --new-height 240

等待提取完成。

完成后生成训练模型所需的list,执行:

cd ..#进入mmaction2\tools文件夹
python data/build_file_list.py ucf101 data/ucf101/rawframes/ --level 2 --format rawframes --shuffle
python data/build_file_list.py ucf101 data/ucf101/videos/ --level 2 --format videos --shuffle

得到:
生成txt
即完成数据集构建

二、部署TDN

1.引入库

TDN: Temporal Difference Networks for Efficient Action Recognition (CVPR 2021)。
代码部分自行下载
打开TDN环境,安装所需库:

pip install TensorboardX
pip install tqdm
pip install scikit-learn
pip install ffmpeg
pip install decord

2.读入数据

①修改dataset_config.py中的代码

ROOT_DATASET = '自己的数据库的位置' 
#例如:ROOT_DATASET = 'E:/MyGithub/mmaction2/tools/data/ucf101/'def return_ucf101(modality):中
filename_imglist_train = "ucfTrainTestlist/ucf101_rgb_train_split_3.txt"
filename_imglist_val = "ucfTrainTestlist/ucf101_rgb_val_split_3.txt"
修改为刚才生成的文件
filename_imglist_train = "ucf101_train_split_3_rawframes.txt"
filename_imglist_val = "ucf101_val_split_3_rawframes.txt"
#这些txt文件都在E:\MyGithub\mmaction2\tools\data\ucf101中

②修改dataset.py中的代码

def __getitem__(self, index):中
video_path = directory+".mp4"
将此处修改为video_path ='videos文件夹所在路径'+directory+'.avi'
#例如:video_path = 'E:/MyGithub/mmaction2/tools/data/ucf101/videos/'+ directory+".avi"

3.训练模型

进入TDN文件夹,运行:

python -m torch.distributed.launch --master_port 12347 --nproc_per_node=1  main.py  ucf101  RGB --arch resnet50 --num_segments 1 --gd 20 --lr 0.01 --lr_scheduler step --lr_steps  30 45 55 --epochs 60 --batch-size 8  --wd 5e-4 --dropout 0.5 --consensus_type=avg --eval-freq=1 -j 4 --npb 

如果遇到correct_k = correct[:k].view(-1).float().sum(0)的错误,可以将源代码修改为

correct_k = correct[:k].contiguous().view(-1).float().sum(0)

4.查看结果

1.测试模型

python test_models_center_crop.py ucf101 --archs='resnet50' --weights E:/MyGithub/TDN/checkpoint/TDN__ucf101_RGB_resnet50_avg_segment1_e60/best.pth.tar  --test_segments=1  --test_crops=1 --batch_size=16  --gpus 0 --output_dir E:/MyGithub/TDN/pkl -j 0 --clip_index=0

注意:
–weights 后面的路径请更换为训练模型生成的在ckeckpoint文件夹中的best.pth.tar的路径(/checkpoint/TDN__ucf101_RGB_resnet50_avg_segment1_e60/best.pth.tar)
–output_dir后面的路径请更换为自己创建的存放pkl的文件夹(/pkl)

2.显示总体结果

python pkl_to_results.py --num_clips 1 --test_crops 1 --output_dir E:/MyGithub/TDN/pkl

–output_dir后面的路径请更换为自己创建的存放pkl的文件夹(/pkl)


本人实测结果

1.测试模型
在这里插入图片描述
2.显示总体结果
在这里插入图片描述


http://chatgpt.dhexx.cn/article/fqXpdJNs.shtml

相关文章

UCF101动作识别数据集简介绍及数据预处理

文章目录 一、数据集简介:二、数据集获取及解压缩:1. 数据下载2. 数据集解压缩: 三、数据集划分四、数据集预处理1. 生成pkl文件2. 直接对视频文件处理 一、数据集简介: UCF101是一个现实动作视频的动作识别数据集,收…

【Java】内部类的定义

目录 一、前言 二、内部类 语法格式: static修饰内部类 内部类未被static修饰时: 内部类被static修饰后 演示操作: 一、前言 前面我们学习了一个小的项目,现在我们来学习新的知识点,关于内部类的描述&#xff0…

Java类的定义、声明及使用

1、 class 类名称{属性方法} 2、声明一个类需要通过一个关键字class 3、类与对象的关系 1)类是对某一类事物的描述,是抽象的、概念上的意义,对象是实际存在的该类事物的每一个个体,也被称为实例。 package classdemo; class …

C#类的定义

在C#语言中创建的任何项目都有类的存在,通过类能很好地体现面向对象语言中封装、继承、多态的特性。 类的访问修饰符:用于设定对类的访问限制,包括 public、internal 或者不写,用 internal 或者不写时代表只能在当前项目中访问类…

C#类的定义和声明及使用

类的定义 类的成员 } 例如,以水果为例来声明一个类,代码如下:在 C# 语言中创建的任何项目都有类的存在,通过类能很好地体现面向对象语言中封装、继承、多态的特性。 简单的来说,在C#编程里,类是一种数据结…

(27)python类的定义和使用

面向对象初步 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭积木一样简单。 面向对象编程将数据和操作数据相关的方法封装…

类的认识和定义

前言 C为啥要引入类这个概念呢,以C实现栈为例说明。 typedef int STDataType; typedef struct Stack { . . . .int top; . . . .STDataType* data; . . . .int capacity; }Stack; void StackInit(Stack* ps); //栈的初始化 void StackDestory(Stack* ps); //栈的销…

Python类的定义

类的定义:我们把对象比作一个“饼干”,类就是制造这个饼干的模具。通过类定义数据类型的属性和方法,也就是说,“类将行为和状态打包在一起”。 类的结构 方法(函数)..............行为 属性(…

java类的定义

目录 一、概念二、使用1.成员变量2.成员方法3.权限修饰符4.静态方法 三、重写toString方法 一、概念 我们不能将一个事物称之为一类事物,例如一只鸟我们不能称为鸟类,但是我们需要给一类事物统称,例如大雁,麻雀,燕子&…

C++ 类的定义与使用

十二、类与对象 对象:就是我们生活中的具体事物,看得见摸得到,有一定的属性和行为或操作方式 面向对象:是一种软件的开发方法,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个…

4.类的定义,变量类型,方法类型

文章目录 1.类的概念1.1 如何创建一个类1.2 如何定义一个类1.2.1变量1.2.2 方法 2.对象3.类定义使用实例4.理解类和对象的关系4.1.一个java程序和类之间的关系 5.细节知识分析5.1.类与类的关系5.2.变量和变量区别5.3.方法的区别5.4.类方法和类变量的特点 1.类的概念 类java是基…

关于类的定义

类的定义 类的概念如何定义类修饰符 类的概念 1、类是把事物的数据与相关功能封装到一起,形成一种特殊的数据结构,用以表达真是事物的一种抽象;而对象则是实际存在的属该类事物的具体个体,因而也称为实例(instance&am…

python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一)

python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二、数据清洗及存储) 爬起疫情数据,有两个网址: 1、百度:链接 2、丁香园疫情:链接 在这两个中,丁香园的爬虫相对简单一点&#…

采用python爬虫爬取数据然后采用echarts数据可视化分析

前言:采用python爬虫爬取天气数据然后采用echarts数据可视化画图分析未来天气变化趋势 从获取数据到可视化的流程 (熟悉爬虫爬取数据然后数据可视化这个过程) 一、python爬取未来8-15天的天气数据 1、导入用到的一些python第三方库 imp…

python网络爬虫爬取数据,python全网爬取内容

大家好,小编来为大家解答以下问题,python网络爬虫爬取数据,利用python爬取数据,现在让我们一起来看看吧! 网络爬虫,就是按照一定规则自动访问互联网上的信息并把内容下载下来的程序或脚本。 在整个的Python…

Python爬虫爬取网页数据并存储(一)

Python爬虫爬取网页数据并存储(一) 环境搭建爬虫基本原理urllib库使用requests库使用正则表达式一个示例 环境搭建 1.需要事先安装anaconda(或Python3.7)和pycharm *anaconda可在中科大镜像下下载较快 2.安装中遇到的问题&#x…

【用Java爬取网页图片——爬虫爬取数据】

用Java爬取网页图片——爬虫爬取数据 1、在创建项目中导入jsoup 2、创建一个保存下载图片的路径 3、使用URL读取网页路径,jsoup读取网页内容 4、利用属性标签获取图片连接块 5、因为该路径没有http:头,用StringBuilder增加 5、完善下载路径…

爬虫爬取数据

打开爬取工具页面,使用爬虫工具列表: 开始节点 仅仅是爬虫的起点,所有流程图必须有该节点。 爬取节点 该节点用于请求HTTP/HTTPS页面或接口 请求方法:GET、POST、PUT、DELETE等方法 URL: 请求地址 延迟时间:单位是毫秒,意思是爬取之前延迟一段时间在执行抓取 超时时间:网…

手把手教会 爬虫爬取json数据

提示:本章爬取练习的url地址 发现曲谱 (yoopu.me) 前言 我们学爬虫,有时候想要的数据并不在html文本里面,而是通过js动态渲染出来的。 如果我们需要爬取此类数据的话,我们该怎么办呢? 请读者接着往下看&#xff1a…

六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 Python爬虫六部曲 第一步:安装requests库和BeautifulS…