简体中文 | English
autox_video提供了一种基于mmaction2代码库的视频理解自动机器学习框架,您可以通过简单的命令便利地进行视频理解任务的训练。
- Python 3.6+
- PyTorch 1.3+
- CUDA 9.2+ (If you build PyTorch from source, CUDA 9.0 is also compatible)
- GCC 5+
- mmcv 1.1.1+
- Numpy
- ffmpeg (4.2 is preferred)
- decord (optional, 0.4.1+): Install CPU version by pip install decord==0.4.1 and install GPU version from source
根据官方文档进行 PyTorch 和 torchvision 的安装,如:
conda install pytorch torchvision -c pytorch
确保 CUDA 的编译版本和 CUDA 的运行版本相匹配。 用户可以参照PyTorch 官网对预编译包所支持的 CUDA 版本进行核对。
安装 mmcv-full,我们推荐您安装以下预构建包:
# pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.10.0/index.html
另外,用户也可以通过使用以下命令从源码进行编译:
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
MMCV_WITH_OPS=1 pip install -e . # package mmcv-full, which contains cuda ops, will be installed after this step
# OR pip install -e . # package mmcv, which contains no cuda ops, will be installed after this step
cd ..
或者直接运行脚本:
pip install mmcv-full
pip install -r build.txt
python mmaction2/setup.py develop
我们提供了一个demo数据集作为测试,您可以以同样的方式运行您自己的数据集。您可以通过如下指令快速开始。
python AutoTrain.py
这会启动模型的训练,我们会自动保存模型的训练结果,并且在每两个epoch结束时在验证集上评估模型并储存最优权重。
当意外中断时,重新执行此命令,我们会将恢复之前的训练结果而不是重新开始(除非你修改了工作目录的位置)。
您可以通过修改config.yaml中的数据集设置来在自己的数据集上训练和测试模型。
执行下面的脚本,可以启动多卡并行训练,{NUM_GPUS}修改为本机gpu数量
./dist_train.sh {NUM_GPUS}
python AutoTest.py
这会自动读取工作目录中储存的最优权重,并用在测试集上测试模型效果, 并将推理结果输出到config.yaml中指定的位置(默认为results.json)。
执行下面的脚本,可以启动多卡并行推理,{NUM_GPUS}修改为本机gpu数量
./dist_test.sh {NUM_GPUS}
这里举例说明如何使用高级api
# ensure your current working directory is AutoX/autox/autox_video
import AutoXVideo
autox_video = AutoXVideo()
# ------------------
# Load cfg from file (recommend)
autox_video.read_cfg('config.yaml')
autox_video.fit()
autox_video.transform()
# ------------------
# Manually specify cfg
autox_video.fit(
data_root='data/demo/videos',
ann_file_train='data/demo/annotations/train_list.txt',
ann_file_val='data/demo/annotations/val_list.txt',
work_dir='work_dirs/demo',
video_length=2,
num_class=25,
videos_per_gpu=8,
epoch=50,
evaluation=5
)
autox_video.transform(
data_root='data/demo/videos',
ann_file_test='data/demo/annotations/test_list.txt',
)
# ann_file_test is optional. if not specified, it will include all files in data_root.
# ------------------
# Transform only
autox_video.transform(
data_root='data/demo/videos',
ann_file_test='data/demo/annotations/test_list.txt',
checkpoints='work_dirs/demo/latest.pth'
)
模型使用的预训练权重可以通过下面的链接下载,下载后将权重文件储存在checkpoints目录,训练时即会自动使用预训练的权重开始训练
(预训练权重文件由Video-Swin-Transformer提供)
Backbone | Pretrain | Lr Schd | spatial crop | acc@1 | acc@5 | #params | FLOPs | model |
---|---|---|---|---|---|---|---|---|
Swin-B | ImageNet22k & Kinetics600 | 30ep | 224 | 84.0 | 96.5 | 88M | 281.6G | github/baidu |
我们取得了ACM MM 22 PRE-TRAINING FOR VIDEO UNDERSTANDING CHALLENGE比赛视频分类赛道的第一名
公开数据集上测试:
Dataset | Top 1 Accuracy | Top 1 Accuracy of Google Vertex AI |
---|---|---|
MMDS | 0.6140 | 0.405 |
HMDB51 | 0.6357 | \ |
UCF101 | 0.9960* | 0.9940* |
*谷歌Vertex AI使用了包括UCF101在内的多个开源数据集进行预训练,此处实验存在测试集标签泄漏,为了对比,我们在AutoX的预训练数据中也加入了UCF101
- 目前代码仅支持Video Swin Transformer一种backbone,这是我们的实验中效果最好并且较为通用的模型,后续会增加更多的视频理解模型供用户自由选择
- 目前仅支持视频分类,实际上本框架对于视频目标检测、视频语义分割等任务是通用的,后续会陆续开发应用于其他视频任务的接口