BEVT:BERT预训练视频变换器实践指南
BEVT 项目地址: https://gitcode.com/gh_mirrors/be/BEVT
项目介绍
BEVT(BERT Pretraining of Video Transformers)是基于PyTorch实现的一种新颖方法,该方法探索了视频变压器的BERT式预训练策略。由复旦大学和微软云+AI团队联合提出,并在CVPR 2022上发表。论文研究了将图像变换器的BERT预训练方式扩展到视频领域,通过分离空间表征学习与时间动态学习,首先对图像数据执行遮罩图像建模,然后在视频数据上联合执行遮罩图像和视频建模。这种方法利用了仅在图像数据上训练的Transformer提供的空间先验,简化了从零开始的视频Transformer的学习过程,并处理不同视频间的类内与类间变化导致的时空线索差异。
项目快速启动
环境安装
确保您的环境已配置好Python以及必要的依赖。可以通过以下命令安装DALL-E的tokenizer权重,这是BEVT预训练所需的一部分:
pip install DALL-E
TOKENIZER_PATH=/path/to/save/dall_e_tokenizer_weight
mkdir -p $TOKENIZER_PATH
wget -O $TOKENIZER_PATH/encoder.pkl https://cdn.openai.com/dall-e/encoder.pkl
wget -O $TOKENIZER_PATH/decoder.pkl https://cdn.openai.com/dall-e/decoder.pkl
修改配置文件中的tokenizer_path
指向刚才下载的路径。
数据准备
参照项目中"data_preparation.md"获取如何准备Kinetics-400等数据集的详细信息。
预训练BEVT
首先,你需要预训练图像流(Swin-base)于ImageNet-1K上(800个epoch),然后进行双流预训练,初始化自之前预训练的图像流模型:
bash tools/dist_train.sh configs/recognition/swin/swin_base_patch244_window877_bevt_in1k_k400.py \
--work-dir OUTPUT/swin_base_bevt_twostream \
--cfg-options total_epochs=150 model.backbone.pretrained=/path/to/save/swin_base_image_stream_pretrain.pth \
--seed 0 --deterministic
应用案例和最佳实践
BEVT在不同的视频基准上展示了其强大的性能,尤其是在那些高度依赖时间动态分析的任务如Something-Something-V2和Diving48上。为了达到最佳效果,建议遵循以下最佳实践:
- 对于侧重于空间特征的场景,如Kinetics-400,可以预先调整模型参数以优化空间表示。
- 在处理时间敏感任务时,充分利用BEVT的时间建模能力,确保两流(图像和视频流)的协同训练得到充分时间。
- 调整预训练和微调的epochs数,以及使用适当的硬件加速,如GPU并行计算,以提高训练效率和最终性能。
典型生态项目
BEVT不仅自身成为一个重要的研究成果,还促进了视频理解领域中其他相关技术的发展。例如,与之相关的Perceptual Codebook(PeCo)同样致力于提升视觉Transformer的预训练效果,两者共同推动了视频自我监督学习的进步。开发者可以结合这些生态内的项目,如mmaction2框架,来搭建更复杂的视频分析系统,实现诸如动作识别、事件检测等多种应用场景的高效解决方案。
此文档提供了一个基础的引导,实际操作时请参考项目文档中的详细说明和配置选项,以适应具体需求。BEVT的开放源码特性鼓励开发者深入探索,不断实验,以挖掘视频处理和理解的新可能性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考