资讯动态

MMAction2 中的 ACRN 时空动作检测:Actor-Centric Relation Network 原理与实战

发布时间:2026/10/13 2:37:49 来源:尧图企业网站定制
人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载本文以 configs/detection/acrn/README.md 为核心骨架围绕 MMAction2 中对 ACRNActor-Centric Relation Network以演员为中心的关系统网络的完整落地展开从算法思想、模型结构到 AVA 数据集准备、训练与测试的完整实战流程并深入源码剖析 ACRNHead 的具体实现帮助你快速上手并在自己的时空动作检测任务中复现或改进这一方案。算法背景为什么需要关系建模在时空动作定位Spatio-Temporal Action LocalizationSTAD任务中传统的 SOTA 方法通常依赖帧级目标检测结果并借助 3D 卷积网络如 SlowFast、SlowOnly建模时序上下文。然而要区分语义相近的人体动作例如握手与递东西、拥抱与推搡仅凭演员自身的外观特征往往不够——必须建模演员actor与相关物体、场景元素之间的空间-时序关系。ACRN 正是在这一思路下提出的方案论文发表于 ECCV 2018见 metafile.yml 中登记的论文信息。其核心设计如下弱监督、免标注挖掘不需要额外标注物体框或场景分割ACRN 自动挖掘对当前动作分类最相关的元素以演员为中心的关系建模ACRN 计算并累积演员特征与全局场景特征之间的两两关系信息生成用于动作分类的关系特征可端到端联合训练整个关系模块以神经网络实现可与既有的动作检测系统联合训练效果验证论文表明 ACRN 优于其它捕获关系信息的方法并在 JHMDB 与 AVA 基准上刷新了当时的 SOTA关系特征的可视化也证实模型能聚焦于每个动作相关的关键关系。在 MMAction2 中ACRN 被实现为检测框架中的shared_head共享头与 SlowFast 骨干和 AVA 检测头BBoxHeadAVA组合成完整的时空动作检测模型在 AVA 数据集上提供了两个可复现的配置。模型架构ACRN 如何嵌入检测框架ACRN 在 MMAction2 中的完整配置见AVA 2.1 版slowfast-acrn_kinetics400-pretrained-r50_8xb8-8x8x1-cosine-10e_ava21-rgb.pyAVA 2.2 版slowfast-acrn_kinetics400-pretrained-r50_8xb8-8x8x1-cosine-10e_ava22-rgb.py两者模型结构完全一致仅数据集标注版本与数据读取后端不同。整个模型是一个基于 MMDetectionFastRCNN的两阶段检测器_scope_mmdet由以下部分串联组成SlowFast ResNet50 (backbone) │ ▼ SingleRoIExtractor3D (bbox_roi_extractor) ┌───┤ │ └─► 返回 RoI 特征 bbox_feats 全局特征 global_feat ▼ ACRNHead (shared_head) ── 融合演员 RoI 特征与全局场景特征 │ ▼ BBoxHeadAVA (bbox_head) ── 多标签动作分类81 类SlowFast 骨干双路径时空特征提取backbonedict( typemmaction.ResNet3dSlowFast, pretrainedNone, resample_rate4, speed_ratio4, channel_ratio8, slow_pathwaydict( typeresnet3d, depth50, pretrainedNone, lateralTrue, fusion_kernel7, conv1_kernel(1, 7, 7), dilations(1, 1, 1, 1), conv1_stride_t1, pool1_stride_t1, inflate(0, 0, 1, 1), spatial_strides(1, 2, 2, 1)), fast_pathwaydict( typeresnet3d, depth50, pretrainedNone, lateralFalse, base_channels8, conv1_kernel(5, 7, 7), conv1_stride_t1, pool1_stride_t1, spatial_strides(1, 2, 2, 1)))采用 ResNet50 双路径结构slow pathway 与 fast pathway 分别以speed_ratio4的速率差、channel_ratio8的通道比进行时序降采样与通道扩张整个模型通过init_cfgdict(typePretrained, checkpointurl)加载 Kinetics-400 上预训练的slowfast_r50_8x8x1_256e_kinetics400权重配置中标注的采样策略8x8x1表示8帧每 clip 采样帧数、8帧间隔、1个 clip。RoI 提取与 ACRNHead 的关系融合从 roi_head.py 中的AVARoIHead._bbox_forward可以看到关键的调用链bbox_feats, global_feat self.bbox_roi_extractor(x, rois) if self.with_shared_head: bbox_feats self.shared_head( bbox_feats, featglobal_feat, roisrois, img_metasbatch_img_metas)SingleRoIExtractor3D实现见 single_straight3d.py先对骨干输出的多级特征做时间维池化with_temporal_poolTrue时对 T 维做均值池化、通道拼接再按候选框执行 RoIAlignoutput_size8得到每个 RoI 的局部特征同时保留未裁剪的全局特征图feat作为场景上下文ACRNHead接收 RoI 特征与全局特征完成关系融合。ACRNHead 的完整实现位于 acrn_head.py其结构正如类注释所概括Tile 1x1 convolution 3x3 convolution。核心前向逻辑如下# 1. 对每个 RoI 特征做自适应最大池化压缩为 (N, C, 1, 1, 1) x self.max_pool(x) # AdaptiveMaxPool3d(1) # 2. 将池化后的 actor 特征在 H、W 维度上平铺(tile)到全局特征图尺寸 h, w feat.shape[-2:] x_tile x.repeat(1, 1, 1, h, w) # 3. 按 RoI 的 batch 索引取出对应帧的全局特征 roi_gfeat roi_inds rois[:, 0].type(torch.long) roi_gfeat feat[roi_inds] # 4. 拼接 actor 特征与场景特征依次经过 1x1x1 卷积与 (1,3,3) 卷积 new_feat torch.cat([x_tile, roi_gfeat], dim1) new_feat self.conv1(new_feat) # ConvModule(kernel_size1) new_feat self.conv2(new_feat) # ConvModule(kernel_size(1,3,3))其中conv1是kernel_size1的逐点卷积作用是将演员特征 场景特征拼接后的通道降维融合配置中in_channels4608→out_channels2304conv2是kernel_size(1, 3, 3)的空间卷积按stride参数控制输出空间分辨率num_convs参数可叠加多个 3x3 卷积默认1增加关系特征的非线性建模能力权重初始化在init_weights中完成nn.Conv3d使用 kaiming 初始化BatchNorm 初始化为 1。从 test_shared_heads.py 的test_acrn_head可以验证其维度行为输入roi_feat (4, 16, 1, 7, 7)与全局特征feat (2, 16, 1, 16, 16)ACRNHead(32, 16)输出(4, 16, 1, 16, 16)设置stride2时输出为(4, 16, 1, 8, 8)即空间分辨率减半设置num_convs2时输出维度不变仅增加网络深度。BBoxHeadAVA多标签动作分类头关系特征最终送入BBoxHeadAVA实现见 bbox_head.pybbox_headdict( typeBBoxHeadAVA, background_classTrue, in_channels2304, num_classes81, multilabelTrue, dropout_ratio0.5)num_classes81AVA 共 80 个动作类别额外 1 维用于背景类background_classTrue时损失计算中忽略背景类对应代码中labels labels[:, 1:]multilabelTrueAVA 中同一演员可同时具有多个动作标签因此使用binary_cross_entropy_with_logits作为损失函数预测时对 logits 做 sigmoiddropout_ratio0.5在池化前对特征施加 Dropout 防止过拟合该头还内置了 Focal Loss 支持focal_alpha/focal_gamma默认退化为 BCE以及recallthr0.5、precthr0.5、recalltopk等训练期指标的计算。训练目标分配train_cfgtrain_cfgdict( rcnndict( assignerdict( typeMaxIoUAssignerAVA, pos_iou_thr0.9, neg_iou_thr0.9, min_pos_iou0.9), samplerdict( typeRandomSampler, num32, pos_fraction1, neg_pos_ub-1, add_gt_as_proposalsTrue), pos_weight1.0))采用MaxIoUAssignerAVA以 IoU 阈值 0.9 划分正负样本AVA 检测框质量要求较高每张图随机采样 32 个候选并将 GT 框加入候选集合。整体训练循环为EpochBasedTrainLoop共 10 个 epochmax_epochs10从第 1 个 epoch 起每轮验证val_begin1, val_interval1。AVA 数据准备训练前置条件ACRN 的两个配置均基于 AVA 数据集训练与评测。完整的数据准备流程见 tools/data/ava/README.md按以下步骤操作需在tools/data/ava/目录下执行# Step 1. 准备标注文件默认 v2.1需要 v2.2 时VERSION2.2 bash download_annotations.sh bash download_annotations.sh # Step 2. 下载视频可用并行脚本加速 bash download_videos.sh # 或 download_videos_parallel.sh # Step 3. 截取每个视频第 15~30 分钟片段统一为 30 fps bash cut_videos.sh # Step 4. 抽取 RGB 帧未安装 denseflow 时可用 ffmpeg 脚本 bash extract_rgb_frames.sh # 或 extract_rgb_frames_ffmpeg.sh # Step 5. 获取预计算的候选框文件FAIR 提供 bash fetch_ava_proposals.sh配置中数据相关路径如下来自 ava_dataset.py 中AVADataset的约定data_root data/ava/rawframes帧图片目录帧文件命名模板为img_{:05}.jpg且 AVA 帧序号从 1 开始start_index1标注文件ava_train_v2.1.csv/ava_val_v2.1.csvv2.2 对应v2.2版本排除时间戳ava_train_excluded_timestamps_v2.1.csv/ 对应验证集文件标签文件ava_action_list_v2.1_for_activitynet_2018.pbtxtv2.2 为..._for_activitynet_2019.pbtxt候选框文件ava_dense_proposals_train.FAIR.recall_93.9.pkl/ava_dense_proposals_val.FAIR.recall_93.9.pkl。正如AVADataset的类注释所示该 pkl 以{video_id},{timestamp}为键存储每个时间戳下的候选框数组形如[x1, y1, x2, y2, score]。数据增强与预处理流水线train_pipeline [ dict(typeSampleAVAFrames, clip_len32, frame_interval2), dict(typeRawFrameDecode, **file_client_args), dict(typeRandomRescale, scale_range(256, 320)), dict(typeRandomCrop, size256), dict(typeFlip, flip_ratio0.5), dict(typeFormatShape, input_formatNCTHW, collapseTrue), dict(typePackActionInputs) ] # 测试阶段不做裁剪/翻转 val_pipeline [ dict(typeSampleAVAFrames, clip_len32, frame_interval2, test_modeTrue), dict(typeRawFrameDecode, **file_client_args), dict(typeResize, scale(-1, 256)), dict(typeFormatShape, input_formatNCTHW, collapseTrue), dict(typePackActionInputs) ]SampleAVAFrames实现见 loading.py以clip_len32、frame_interval2围绕每个标注时间戳中心采样 32 帧训练时还会在帧间隔范围内加入随机偏移skip_offsets以增强时序鲁棒性训练采用RandomRescale(256~320)RandomCrop(256) 水平翻转增强测试仅做等比缩放Resize(-1, 256)输出张量统一为NCTHW格式FormatShape供 3D 卷积与 RoI 提取使用。值得注意的是两个配置在数据读取后端上的差异AVA 2.1 配置使用本地磁盘后端file_client_args dict(io_backenddisk)AVA 2.2 配置则使用 Petrel 云存储后端并通过path_mapping将本地路径data/ava映射到远端s254:s3://openmmlab/datasets/action/ava。如果你没有配置该存储环境需要在训练前将其改回io_backenddisk并将数据放置到data/ava。训练复现 ACRN 模型tools/train.py是 MMAction2 统一的训练入口可结合 Training and Test Tutorial 查看完整说明python tools/train.py ${CONFIG_FILE} [optional arguments]以 AVA 2.1 为例使用确定性选项并周期性验证地训练 ACRN SlowFastpython tools/train.py configs/detection/acrn/slowfast-acrn_kinetics400-pretrained-r50_8xb8-8x8x1-cosine-10e_ava21-rgb.py \ --seed 0 --deterministic常用可选参数见 tools/train.py 的参数定义参数作用--seed设置随机种子保证可复现性--deterministic为 CUDNN 后端设置确定性选项消除计算不确定性--auto-scale-lr按实际 batch size 与配置基准 batch size 的比例自动缩放学习率。官方结果使用 8 张 GPU每张 batch_size8总 64若你调整 GPU 数或每卡样本数推荐开启此参数--cfg-options以keyvalue形式覆盖配置中的任意字段如--cfg-options optim_wrapper.optimizer.lr0.01--no-validate训练期间不做验证加快迭代--launcher分布式启动方式none/pytorch/slurm/mpi优化器与学习率策略param_scheduler [ dict(typeLinearLR, start_factor0.1, by_epochTrue, begin0, end2, convert_to_iter_basedTrue), dict(typeCosineAnnealingLR, T_max8, eta_min0, by_epochTrue, begin2, end10, convert_to_iter_basedTrue) ] optim_wrapper dict( optimizerdict(typeSGD, lr0.1, momentum0.9, weight_decay0.00001), clip_graddict(max_norm40, norm_type2))前 2 个 epoch 使用 LinearLR 从 10% 的学习率线性升温随后 8 个 epoch 按余弦退火衰减至 0SGD 优化器初始学习率 0.1并设置梯度裁剪最大范数 40。运行时配置日志、Checkpoint、Visualizer 等继承自 default_runtime.py每轮保存 checkpoint 并自动跟踪最优模型save_bestauto。测试推理与结果导出使用tools/test.py评测模型python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]例如在 AVA 2.1 上评测并导出结果到 pkl 文件python tools/test.py configs/detection/acrn/slowfast-acrn_kinetics400-pretrained-r50_8xb8-8x8x1-cosine-10e_ava21-rgb.py \ checkpoints/SOME_CHECKPOINT.pth --dump result.pkl--dump会将预测结果以 pickle 格式保存见 tools/test.py 中的实现仅接受.pkl/.pickle后缀便于离线评估或后续分析。评测指标由配置中的val_evaluator/test_evaluator定义val_evaluator dict( typeAVAMetric, ann_fileann_file_val, label_filelabel_file, exclude_fileexclude_file_val)即使用AVAMetric计算 AVA 官方评测指标frame-level mAP默认按 0.5 分数阈值判定动作存在。测试时batch_size1且predict阶段只接受单样本输入见 roi_head.py 中predict的断言x_shape[0] 1。实验结果与模型库ACRN 在 AVA 上的官方复现结果如下训练资源8 张 GPURGB 模态数据集帧采样策略backbone预训练mAPAVA 2.18x8x1SlowFast ResNet50Kinetics-40027.65AVA 2.28x8x1SlowFast ResNet50Kinetics-40027.71两个模型的权重与训练日志的下载地址均登记在 metafile.yml可在configs/detection/acrn/目录下找到同时该文件也记录了模型元信息ResNet50 架构、batch size 8、10 个 epoch、AVA v2.1/v2.2 训练数据等是复现与模型管理的重要参考。官方提示结果表中的gpus表示官方获得该 checkpoint 所用的 GPU 数量。如果你想使用不同的 GPU 数或每卡视频数最佳实践是在调用tools/train.py时带上--auto-scale-lr该参数会依据实际 batch size 与配置原始 batch size 的比例自动调整学习率从而在资源变化时保持训练动力学的一致性。总结与扩展ACRN 在 MMAction2 中的实现体现了检测 关系建模的模块化设计思路关系融合点清晰ACRNHead作为AVARoIHead的shared_head插入输入 RoI 特征与全局特征输出关系增强后的特征任何两阶段检测器都可复用端到端训练关系模块与检测头联合优化无需额外标注配置即文档AVA 2.1/2.2 两套配置可直接复现论文效果mAP 27.65 / 27.71也可作为骨架在此基础上替换骨干、调整采样策略或叠加更强的检测头可扩展参数stride、num_convs、in_channels/out_channels等参数见 acrn_head.py使 ACRNHead 可适配不同的骨干输出通道与空间分辨率。如果你的任务同样面临动作语义相近、需要物体/场景上下文才能区分的场景例如复杂的多人交互、人-物交互识别可以以 AVA 2.2 配置 为起点进行迁移与微调。引用复现或使用本模型时请引用原论文inproceedings{sun2018actor, title{Actor-centric relation network}, author{Sun, Chen and Shrivastava, Abhinav and Vondrick, Carl and Murphy, Kevin and Sukthankar, Rahul and Schmid, Cordelia}, booktitle{Proceedings of the European Conference on Computer Vision (ECCV)}, pages{318--334}, year{2018} }此外AVA 数据集相关引用可参见 tools/data/ava/README.md 中登记的 AVA 论文信息。赞分享人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载相关推荐MMAction2时序动作检测BMN算法在ActivityNet上的实战应用MMAction2时序动作检测BMN算法在ActivityNet上的实战应用 时序动作检测是视频理解领域的重要任务旨在从长视频中准确定位动作发生的起止时间。人工智能计算机视觉深度学习grill-me 拷问完全指南6 步把模糊想法磨成敢签字的决策grill me 拷问完全指南6 步把模糊想法磨成敢签字的决策 grill me 拷问是 Skills for Real Engineers 项目里的一款技能人工智能计算机视觉深度学习MMAction2 中 UniFormer 视频动作识别模型架构原理、配置详解与测试实战MMAction2 中 UniFormer 视频动作识别模型架构原理、配置详解与测试实战 本文以 MMAction2 仓库中 configs/recognit人工智能计算机视觉深度学习上一篇Android TV Leanback架构设计完整指南从组件化到企业级应用实践下一篇Qwen-Image-Edit-Rapid-AIO终极指南5分钟掌握专业级AI图像编辑的快速方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑