VideoMAE模型复现(Linux)

目录

注意1(必看!!!少走冤枉路!!!)

注意2(你想走就走吧。。。)

一.代码下载

二.环境下载

三.数据集下载

四.数据集处理

五.训练


注意1(必看!!!少走冤枉路!!!)

个人不建议去使用单卡从头预训练VideoMAE模型,因为VideoMAE是个大模型,它需要大量的数据集做预训练才能调整好参数,在向下迁移学习的时候才能防止过拟合。当你用单卡从头预训练的时候需要把batch_size调整的很小才可以跑,而这样做会导致训练不充分,模型效果差。普通人从头训练大模型会耗费大量的时间和金钱(租服务器),还可能训练的不好,就比如我已经将batch_size调到4了,还训练了6天多,可想而知要想完全训练好这个模型,得耗费多少。而我做这个复现是因为VideoMAE是我看的第一篇论文,想跟着这个代码跑一遍,熟悉深度学习的过程。如果想用VideoMAE好的效果模型,我建议直接用他们预训练好的模型来测试,以下是他们预训练好的VideoMAE模型库:

VideoMAE/MODEL_ZOO.md at main · MCG-NJU/VideoMAE (github.com)

注意2(你想走就走吧。。。)

1.VideoMAE是一个大模型,作者在里面用到了deepspeed分布式训练模块,我的pytorch是1.13.0+cuda11.7版,运行代码时报错说:No module named ’torch._six‘,原因是高版本的pytorch中没有_six模块;看了github上的运行环境,支持1.8.0和1.6.0版本的pytorch 

因为我复现代码的环境是我们课题组共用的环境,cuda是11.7的,对应的pytorch里没有1.8.0的,所以我就下载了1.13.0+cuda11.7版本,在原代码中引掉分布式训练的部分,不使用分布式训练。

2.如果不使用分布式训练,则对你的电脑性能要求会非常高,首先数据集非常庞大,作者在代码里写了四种数据集的加载方法:Kinetics-400(26万条数据集,125个G),something-something-v2(22万数据集,19个G),UCF101,HMDB51,在github里作者在dataset.md中只详细说明了ssv2和k400数据集怎么预处理的,其他数据集没有过多说明,因此我用的是ssv2数据集;其次当我在显卡3080,显卡内存为10G的电脑上运行的时候,设置代码参数batch_size=8,epoch=100的时候,电脑跑不动,当我将代码参数设置成batch_size=4,epoch=100的时候,电脑才能跑动,此时gpu利用率为89%,显卡内存占了6个G。

结论是:如果要用分布式训练pytorch版本得在1.8或以下,不使用分布式训练电脑性能得高

以下是我不使用分布式模块的训练步骤:

一.代码下载

官网:MCG-NJU/VideoMAE: [NeurIPS 2022 Spotlight] VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training (github.com)

二.环境下载

1.pytorch下载官网:Previous PyTorch Versions | PyTorch

 2.github上的install.md文件中的环境要求:

根据以上版本要求,在你的环境中pip install,代码运行的时候可能还会说哪些模块没找到,哪个没找到就pip install哪个

三.数据集下载

 这里我参考的一个博主的博客:【Paper】复现VideoMAE_KiraFenvy的博客-CSDN博客

1.下载:百度网盘:百度网盘 请输入提取码 ,提取码:6666

2.合并与解压:这里我参考的博客是Something-Something-v2数据集在Windows下下载与解压_something v2数据集_weixin_43759637的博客-CSDN博客

在linux上用的合并语句是:

cat 20bn-something-something-v2-* > video.tar

在Linux上的解压语句是:

tar -xvf video.tar
四.数据集处理

作者在github上提出了数据集的格式:240px的mp4格式,而我们解压后的数据集是webm格式,因此需要转换格式

 1.转mp4

在博主写的转换成MP4格式代码的基础上引掉了缩放和裁剪功能的代码,以下是我改的代码:

import os
import argparse
import moviepy.editor as mp


def resize_and_convert_video(input_file, output_file, output_format='mp4'):
    # 读取输入视频
    video = mp.VideoFileClip(input_file)
  
    # 转换视频格式并保存
    output_file_path, _ = os.path.splitext(output_file)
    output_file_path += f'.{output_format}'
    video.write_videofile(output_file_path, codec='libx264', audio_codec='aac')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Resize and convert videos in a directory')
    parser.add_argument('input_dir', type=str,help='input directory containing webm videos')
    parser.add_argument('output_dir', type=str,help='output directory for resized and converted videos')
    args = parser.parse_args()


    # 遍历输入目录中的所有webm文件
    for file_name in os.listdir(args.input_dir):
        if file_name.lower().endswith('.webm'):
            # 构建输入和输出文件路径
            input_file = os.path.join(args.input_dir, file_name)
            output_file = os.path.join(args.output_dir, os.path.splitext(file_name)[0] + '.mp4')

            # 调整尺寸并转换格式
            resize_and_convert_video(input_file, output_file,output_format='mp4')

在linux终端输入

python preprocess.py '/inputdir' 'outputdir'

2.下载ssv2的csv文件

https://drive.google.com/drive/folders/1cfA-SrPhDB9B8ZckPvnh8D5ysCjD-S_I?usp=share_link

五.训练

1.在run_mae_pretraining.py下修改数据集路径,输出路径,batch_size,epoch等参数,官网给出了预训练的基本参数

这里我建了一个videomae的文件夹,在里面创建了三个文件夹,list_ssv2放train.csv文件,ssv2_videomae_pretrain_base_patch12_224_frame...放生成的模型文件,YOUR_PATH放转换过的mp4视频数据: 

 在run_mae_pretraining.py中修改dataset参数data_path,output_dir:

注意,train.csv的路径也要改,不然运行代码的时候就会报错:说找不到文件路径读取不了视频数据。

这个模型使用表格形式读取数据的,原train.csv文件结构由两部分组成:mp4的视频数据路径,标签(ssv2有177类)

 这里我将train.csv表格的视频数据集路径全改成了我自己的路径,后面的label标签不动 

然后可以在终端输入以下命令,运行代码

python run_mae_pretraining.py

如果出现cuda memory out则说明显卡内存不足,我的解决方法是将batch_size调小。在这台设备上,当batch_size=4的时候可以运行

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
对于复现经典的 PyTorch 模型,你可以按照以下步骤进行操作: 1. 确定要复现的经典模型:选择你想要复现的经典模型,可以是在计算机视觉、自然语言处理或其他领域中广泛应用的模型,例如 AlexNet、VGG、ResNet 等。 2. 收集模型的相关论文和代码:查找并阅读原始论文,以了解模型的具体结构和训练方法。同时,搜索已经实现的代码库或者 GitHub 上的开源项目,以获取相关的参考代码。 3. 创建 PyTorch 模型:根据论文中描述的模型结构,使用 PyTorch 创建一个对应的模型类。这包括定义模型的网络层、初始化权重等操作。 4. 实现模型训练:根据论文中描述的训练方法,实现相应的训练步骤。这可能包括数据预处理、损失函数定义、优化器选择以及训练循环等。 5. 数据准备:准备用于训练和测试模型的数据集。这可能涉及数据下载、数据预处理、数据划分等。 6. 训练模型:使用准备好的数据集对模型进行训练。根据需要,可以设置训练超参数、学习率调度器等。 7. 模型评估:使用测试集或交叉验证集对训练好的模型进行评估。可以计算准确率、损失值等指标。 8. 模型优化(可选):根据需要,尝试改进模型的性能。这可能包括调整超参数、尝试不同的优化器、增加正则化等。 9. 结果分析:分析模型的性能和训练过程,比较实现的模型与原论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值