将TDN部署在个人电脑上,并使用mmaction2处理的UCF101进行训练。
本人电脑环境为win10+CUDA10.2+Cudnn7.0
CUDA和Cudnn请自行选择合适的版本安装
MMAction2:https://github.com/open-mmlab/mmaction2
MMAction2是一个基于PyTorch的视频理解开源工具箱。 它是OpenMMLab项目的一部分。 本文需要用到提取帧的功能,详细说明请详见:https://github.com/open-mmlab/mmaction2/blob/master/docs/data_preparation.md中的Extract frames。
自行下载MMaction2的代码部分。git clone(使用git bash)或者下载zip后解压。
在Anaconda中新建环境TDN,Python版本为3.7。
本人系统环境为CUDA10.2,MMaction2要求Pytorch版本大于1.3,因此打开Pytorch官网安装:
具体请根据自己电脑的系统和CUDA版本来选择。
**如觉得本文的安装步骤不够详细,那么详细的安装步骤请参考官方安装:https://github.com/open-mmlab/mmaction2/blob/master/docs/install.md
首先在anaconda中打开TDN环境:
安装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
即安装完成
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文件夹中
打开TDN环境并进入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
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
①修改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"
进入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)
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)