博客
关于我
动作识别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 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    查看>>
    MySQL 快速创建千万级测试数据
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>