博客
关于我
动作识别0-02:mmaction2(SlowFast)-官方数据训练测试-ucf101
阅读量:729 次
发布时间:2019-03-21

本文共 3975 字,大约阅读时间需要 13 分钟。

mmaction2(SlowFast-动作识别)项目实践

背景介绍

mmaction2是一个基于SlowFast网络的强大的视频动作识别框架,旨在高效识别人类行为。该项目主要包含行人检测、追踪和行为识别三个模块。本文将详细介绍从项目搭建到模型训练及测试的实践经验和问题解决方案。

环境搭建

安conda环境配置

首先,我在自己的ubuntu18.04系统上创建了一个专门用于mmaction2的anaconda环境。以下是具体操作步骤:

# 进入mmaction2根目录cd $MMACTION2# 创建并激活新的环境conda create -n mmaction2-pytorch1.5-py3.6 -ypython=3.6conda activate mmaction2-pytorch1.5-py3.6# 安装必要的库pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.htmlpip install -r requirements/build.txtpython setup.py developpip install decord -i https://pypi.douban.com/simple

数据准备

文件下载与组织

在之前的博客中,已经提供了数据下载链接。下载完成后,我按照如下方式组织数据:

  • 创建必要的目录结构:

    ./Dataset/ucf101/├── videos/└── annotations/
  • 解压并重命名文件:

    • UCF-101.tar.gz 解压后重命名为 videos/UCF-101
    • ucfTrainTestList.tar.gz 解压后重命名为 annotations/ucfTrainTestList
  • 数据格式转换

    为了便于后续处理,我执行了以下脚本:

    cd tools/data/python./build_rawframes.py --task rgb --level 2 --ext avi --new-short 0 --new-width 320 --new-height 240./generate_rawframes_filelist.sh./generate_videos_filelist.sh

    这样处理后,数据目录结构变为:

    ./data/ucf101/rawframes/├── test/|   └── 01/|       └── 00/|           └── rawframes/|               └── video_320_240_.ToLower(abcdef).avi├── train/|   └── 01/|       └── 00/|           └── rawframes/|               └── video_320_240_.ToLower(abcdef).avi└── val/    └── 01/        └── 00/            └── rawframes/                └── video_320_240_ToLower(abcdef).avi

    模型训练

    模型选择与配置

    我选择了一个预先配置好的SlowFast模型进行训练:

    configs/recognition/slowfast/my_slowfast_r50_4x16x1_256e_ucf101_rgb.py

    在修改配置文件时,特别关注以下部分:

    # 原始配置# test_cfg = dict(average_clips=None)# dataset_type = 'RawframeDataset'# data_root = 'data/kinetics400/rawframes_train'# data_root_val = 'data/kinetics400/rawframes_val'# ann_file_train = 'data/kinetics400/kinetics400_train_list_rawframes.txt'# ann_file_val = 'data/kinetics400/kinetics400_val_list_rawframes.txt'# ann_file_test = 'data/kinetics400/kinetics400_val_list_rawframes.txt'# dataset_type = 'RawframeDataset'# data_root = 'data/ucf101/rawframes'# data_root_val = 'data/ucf101/rawframes'# ann_file_train = 'data/ucf101/ucf101_train_split_1_rawframes.txt'# ann_file_val = 'data/ucf101/ucf101_val_split_1_rawframes.txt'# ann_file_test = 'data/ucf101/ucf101_val_split_1_rawframes.txt'# 修改后的配置dataset_type = 'VideoDataset'data_root = 'data/ucf101/videos'data_root_val = 'data/ucf101/videos'ann_file_train = 'data/ucf101/ucf101_train_split_1_videos.txt'ann_file_val = 'data/ucf101/ucf101_val_split_1_videos.txt'ann_file_test = 'data/ucf101/ucf101_val_split_1_videos.txt'

    训练命令

    执行训练命令时,我优化了训练策略:

    python tools/train.py configs/recognition/slowfast/my_slowfast_r50_4x16x1_256e_ucf101_rgb.py--work-dir work_dirs/my_slowfast_r50_4x16x1_256e_ucf101_rgb--validate--seed 0--deterministic

    问题解决

    键Error解决

    在训练过程中遇到了KeyError: 'CosineAnealingLrUpdaterHook is not in the hook registry'错误。这是由于某些配置文件中的学习率策略不存在。此解决方法是修改train_pipelineval_pipeline的间隔设置:

    train_pipeline = [    dict(type='DecordInit'),    dict(type='SampleFrames', clip_len=16, frame_interval=2, num_clips=1),    dict(type='DecordDecode'),    dict(type='Resize', scale=(-1, 256)),]val_pipeline = [    dict(type='DecordInit'),    dict(type='SampleFrames', clip_len=16, frame_interval=2, num_clips=1, test_mode=True),    dict(type='DecordDecode'),    dict(type='Resize', scale=(-1, 256)),]

    显存不足解决

    由于显存不足,调整了训练interval:

    # 原始配置# checkpoint_config = dict(interval=4)# 修改后的配置checkpoint_config = dict(interval=1)

    这样设置后,每个epoch结束后保存一次模型,减少显存压力。

    验证训练效果

    训练完成后,模型的输出路径在work_dirs/my_slowfast_r50_4x16x1_256e_ucf101_rgb/epoch_1.pth。通过测试指标可知,这次训练成功识别了多个动作类别。

    模型测试

    测试配置

    为了评估模型性能,我运行了测试脚本:

    python tools/test.py configs/recognition/slowfast/my_slowfast_r50_4x16x1_256e_ucf101_rgb.pywork_dirs/my_slowfast_r50_4x16x1_256e_ucf101_rgb/epoch_1.pth--eval top_k_accuracy mean_class_accuracy--out result.json--average-clips=prob

    测试结果显示,模型准确率达到了预期水平,验证了训练效果的正确性。

    总结与展望

    通过以上实践,我成功地在本地环境中搭建了mmaction2框架,并完成了UCF101基准集的视频动作识别任务。未来,我计划深入研究SlowFast网络的原理,以及如何优化其性能和训练逻辑,以应对更复杂的视频数据和更大规模的动作识别任务。

    如需进一步了解SlowFast网络的细节或有其他问题欢迎随时联系!

    转载地址:http://xvigz.baihongyu.com/

    你可能感兴趣的文章
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    MySQL 高性能优化规范建议
    查看>>
    mysql 默认事务隔离级别下锁分析
    查看>>
    Mysql--逻辑架构
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-5.6.17-win32免安装版配置
    查看>>
    mysql-5.7.18安装
    查看>>
    MySQL-8.0.16 的安装与配置
    查看>>
    MySQL-Buffer的应用
    查看>>
    mysql-cluster 安装篇(1)---简介
    查看>>