热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【视频分类】3DResNetsPyTorch复现

参考代码:https:github.comkenshohara3D-ResNets-PyTorch0.环境ubuntu16.04python3.6cuda9

参考代码:

https://github.com/kenshohara/3D-ResNets-PyTorch


0.环境

ubuntu16.04
python3.6
cuda9.0# pip install
torch==1.1.0
joblib
pandas
h5py
torchvision# apt install
apt-get -y install ffmpeg


1.数据准备


1.1 下载数据

官网:https://www.crcv.ucf.edu/data/UCF101.php,下面有两处是我们需要的。第一处是avi数据,第二处是分训练集与测试集的。

UCF101视频分类数据集:http://www.crcv.ucf.edu/datasets/human-actions/ucf101/UCF101.rar

新建data目录,解压UCF101.rar文件到其中:

apt-get install unrar
unrar x UCF101.rar

下载第二处数据https://www.crcv.ucf.edu/data/UCF101/UCF101TrainTestSplits-DetectionTask.zip。放到自己想放的地方,我是放到data目录下。


1.2 视频生成图片

修改代码(参考此处https://github.com/kenshohara/3D-ResNets-PyTorch/issues/202):

# line 18
p = subprocess.run(ffprobe_cmd, capture_output=True)
# 改为
p = subprocess.run(ffprobe_cmd, stdout=PIPE, stderr=PIPE)

运行命令,视频生成jpg文件:

python -m util_scripts.generate_video_jpgs avi_video_dir_path jpg_video_dir_path ucf101eg:
python -m util_scripts.generate_video_jpgs "/root/avi_video_dir_path" "/root/jpg_video_dir_path" dataset="ucf101"

大概这个过程需要花1个小时以内。


1.3 生成json文件

python -m util_scripts.ucf101_json annotation_dir_path jpg_video_dir_path dst_json_path# eg:python -m util_scripts.ucf101_json "/root/data/ucfTrainTestlist" "/root/data/UCF101_jpg/" "/root/data/UCF101_json"

2.准备预训练模型

https://drive.google.com/drive/folders/1zvl89AgFAApbH0At-gMuZSeQB_LpNP-M


3.文件结构

dataUCF101_videosApplyEyeMakeup...YoYoUCF101_jpgApplyEyeMakeup...YoYoUCF101_jsonucf101_01.jsonUCF101_txtclassInd.txttestlist01.txttestlist02.txttestlist03.txttrainlist01.txttrainlist02.txttrainlist03.txtmodelsresnet-50-kinetics.pthresults

4.finetuning for mutil-gpu

此处遇到“RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:1”问题,已经尝试修改两天了,暂缓一下。

下载好了多gpu训练的模型,需要多gpu优化才行,否则会报模型的参数名称不对应的问题。

修改代码:

# model.py
# line 100pretrain = torch.load(pretrain_path, map_location='cpu')if torch.cuda.device_count() > 1:# 如果有多个GPU,将模型并行化,用DataParallel来操作。这个过程会将key值加一个"module. ***"。model = nn.DataParallel(model)model.load_state_dict(pretrain['state_dict'])tmp_model = modelif model_name == 'densenet':tmp_model.classifier = nn.Linear(tmp_model.classifier.in_features,n_finetune_classes)elif model_name != 'densenet' and torch.cuda.device_count() > 1:tmp_model.fc = nn.Linear(tmp_model.module.fc.in_features,n_finetune_classes)else:tmp_model.fc = nn.Linear(tmp_model.fc.in_features,n_finetune_classes)

如果指定gpu从0开始的话,下面的"cuda:0";如果从1开始,设置“cuda:1”。

# main.py
opt.device = torch.device('cpu' if opt.no_cuda else 'cuda')# 指定为
opt.device = torch.device('cpu' if opt.no_cuda else 'cuda:0')
# or
opt.device = torch.device('cpu' if opt.no_cuda else 'cuda:1')

CUDA_VISIBLE_DEVICES='0,1,2,3' python main.py --root_path ./data --video_path ucf101_jpg/ --annotation_path ucf101_json/ucf101_01.json \
--result_path results --dataset ucf101 --n_classes 101 --n_pretrain_classes 400 \
--pretrain_path models/resnet-50-kinetics.pth --ft_begin_module fc \
--model resnet --model_depth 50 --batch_size 128 --n_threads 4 --checkpoint 5

如果出现共享内存不足的话,修改 --n_threads 1,或者更小。如果还有问题的话,参考我的另外一篇博客,将对应代码添加到运行代码的前面。https://blog.csdn.net/qq_35975447/article/details/107287614


5.训练

python main.py --root_path ./data --video_path ucf101_jpg/ --annotation_path ucf101_json/ucf101_01.json \
--result_path results --dataset ucf101 --n_classes 101 --model resnet --model_depth 50 --batch_size 128 \
--n_threads 4 --checkpoint 5

如果出现共享内存不足的话,修改 --n_threads 1,或者更小。如果还有问题的话,参考我的另外一篇博客,将对应代码添加到运行代码的前面。https://blog.csdn.net/qq_35975447/article/details/107287614

终端显示结果:

batch_size=32时,大概需要7GB显存吧。


推荐阅读
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
author-avatar
忘爱LIAN
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有