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

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官网安装:
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第1张图片
具体请根据自己电脑的系统和CUDA版本来选择。

3.安装

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

首先在anaconda中打开TDN环境:
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第2张图片
安装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命令),例如:
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第3张图片
然后运行:

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中的文件:
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第4张图片
移动到annotations文件夹中
②将UCF101中的所有文件夹(每一个文件夹中都是对应分类的视频文件):
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第5张图片
移动到Videos文件夹中
③rawframes为空文件夹,用来存放提取的视频帧
④将这三个文件夹移动到mmaction2\tools\data\ucf101文件夹中

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

打开TDN环境并进入mmaction2文件夹(后面涉及到进入某某文件夹不再贴图提示,均为相同操作):
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第6张图片
执行:

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

得到:
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第7张图片
即完成数据集构建

二、部署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.测试模型
UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)_第8张图片
2.显示总体结果
在这里插入图片描述

你可能感兴趣的:(机器学习,python,git,bash)