博客
关于我
动作识别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 insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>