的架构解析、配置详解与训练测试实战指南)
人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载本篇以 configs/recognition/tin/README.md 为主体系统讲解 mmaction2 对视频理解算法 TINTemporal Interlacing Network时间交织网络的支持从“用可学习的交织算子替代重型时序模型”的核心思想到 ResNetTIN 骨干网络的源码实现、三个官方训练配置SthV1 / SthV2 / Kinetics-400的关键参数再到训练、测试的完整命令与确定性训练技巧。读完本文你可以理解 TIN 相对 TSM 的结构差异并能够基于仓库自带配置在三个数据集上复现或微调 TIN 模型。一、算法概述用“时间交织”替代重型时序模型TIN 出自 AAAI 2020 论文《Temporal Interlacing Network》作者 Hao Shao, Shengju Qian, Yu Liu。官方 README 给出的 Abstract 概括了其动机与结论动机长期来看视觉社区倾向于把 CNN 与各类时序模型马尔可夫链族、光流、RNN、时序卷积组合来学习时空表示但这种“空间-时间交替学习”的流程消耗大量算力。一个自然的问题是能否把时序信息直接嵌入空间特征中让两个域的信息一次性联合学习做法TIN 提出一个简单而强力的算子——temporal interlacing时间交织。它不显式学习时序特征而是把“过去到未来”的空间表征进行交织interlace并把时序域的交织过程交由一个**可微的交织目标differentiable interlacing target**来学习控制从而用简单交织算子替换重型时序模型。理论与实践结论作者理论上证明带有可学习交织目标的 TIN 与正则化时序卷积网络r-TCN等价但在 6 个具有挑战性的基准上取得约 4% 的精度增益、约 6 倍更低的时延集成模型还获得了 ICCV19 Multi Moments in Time 挑战赛第一名。在 mmaction2 中TIN 以骨干网络ResNetTIN的形式提供注册于 MODELS 注册表属于识别recognition任务下基于Recognizer2D的 RGB 模型族。二、模型库与结果Results and Models官方 README 给出了三个数据集的复现结果帧采样策略均为1x1x8即 8 个单帧片段、测试协议 8 clips x 1 crop训练资源 32 GPUs即 8 卡 x 4 视频/卡Something-Something V1frame samplingresolutiongpusbackbonepretraintop1 acctop5 accreference top1reference top5testing protocolgpu_mem(M)config1x1x8height 1008x4ResNet50ImageNet39.6868.5544.0472.728 clips x 1 crop6181configSomething-Something V2frame samplingresolutiongpusbackbonepretraintop1 acctop5 accreference top1reference top5testing protocolgpu_mem(M)config1x1x8height 2408x4ResNet50ImageNet54.7882.1856.4883.458 clips x 1 crop6185configKinetics-400frame samplingresolutiongpusbackbonepretraintop1 acctop5 acctesting protocolgpu_mem(M)config1x1x8short-side 2568x4ResNet50TSM-Kinetics40071.8690.448 clips x 1 crop6185config这里用finetune表示先在 Kinetics-400 上训练得到 TSM 模型再用该 TSM 模型作为load_from在 Kinetics-400 上微调 TIN 模型该微调配置见 k400 配置文件 第 102 行的load_from字段。需要说明的是README 结果表中 Kinetics-400 一行的 config 链接实际指向的是 SthV2 配置文件从仓库文件看K400 微调对应的真实配置为 tin_kinetics400-pretrained-tsm-r50_1x1x8-50e_kinetics400-rgb.py。预训练模型权重与训练日志.pth/.log的下载地址集中记录在 metafile.yml 各模型的Weights与Training Log字段中其中还给出了模型规模信息例如 SthV1/SthV2 模型的 FLOPs 约为 32.96G、参数量约 23.90MK400 微调模型参数量约 24.36M因类别数为 400。README 的四点重要说明Notereference topk acc是在官方原版 TIN 仓库上训练得到的结果且修复了原版仓库中AverageMeter的统计缺陷该 issue 会导致指标统计不正确修复后运行才得到表中 reference 列数值gpus指得到 checkpoint 时使用的 GPU 数量。注意仓库提供的配置默认按 8 卡编写。根据 Linear Scaling Rule如果改变 GPU 数或每卡视频数可把学习率与 batch size 成比例调整例如 4 GPUs x 2 video/gpu 用lr0.0116 GPUs x 4 video/gpu 用lr0.08“reference”列数值是在原版仓库上以相同模型设置训练得到的结果使用的 Kinetics400 验证集共 19796 个视频README 同时提供了对应的数据列表文件每行格式为video_id, num_frames, label_index与类别索引映射文件的下载入口。数据集准备TIN 复现涉及的三个数据集其下载、切帧与文件列表构建流程请参考Kinetics 数据准备Something-Something V1 数据准备Something-Something V2 数据准备三、TIN 骨干网络的源码实现TIN 的 mmaction2 实现集中在 mmaction/models/backbones/resnet_tin.py共 4 个核心构件linear_sampler、WeightNet、OffsetNet、TemporalInterlace以及最终注册到MODELS的ResNetTIN。3.1 linear_sampler可微的时间方向采样linear_sampler 实现“可微的时序帧采样”本质是沿时间维的线性插值输入被切分成若干组groups每组沿时间维按不同offset平移再沿时间维做加权和具体做法取offset0 floor(offset)、offset1 offset0 1通过 mmcv 的tin_shift算子from mmcv.ops import tin_shift导入失败会抛出ImportError提示无法使用 TIN分别取两个整偏移处的特征再以weight0 1 - (offset - offset0)、weight1 1 - weight0做线性插值得到亚帧级的可微“平移”结果由于该算子全程可微offset本身可以由网络学习得到——这正是“可学习的交织目标”的落地方式。3.2 WeightNet 与 OffsetNet控制交织过程的两个子网络WeightNetL97-L148由一个nn.Conv1d(in_channels, groups, 3, padding1)加 sigmoid 组成输出经2 * sigmoid(x)缩放到(0, 2)区间卷积 bias 初始化为 0使得初始输出恰为 1.0即不改变特征幅值。OffsetNetL151-L214由一个Conv1dkernel 3、padding 1硬编码对齐原版仓库 两个全连接层fc1、fc2间夹 ReLU sigmoid 组成最终经4 * (sigmoid(x) - 0.5)把输出压缩到(-4, 4)区间即最多平移 ±4 个帧位置对num_segments8的片段而言是安全范围fc2的 bias 初始化为0.5108使 post-sigmoid 初始输出从 1 附近开始。3.3 TemporalInterlace交织算子本体TemporalInterlace 将上述部件组合前向流程可以概括为输入解析输入x形状为[num_batches * num_segments, C, H, W]其中C shift_div * num_folds。代码取前num_folds个通道作为待交织的x_descriptor形状整理为[num_batches, num_segments, num_folds, H, W]统计描述子对x_descriptor沿 H、W 做平均池化得到只保留时间与通道信息的x_pooled: [num_batches, num_folds, num_segments]预测交织参数x_offset offset_net(x_pooled)得到每个组的平移量并拼接其相反数torch.cat([x_offset, -x_offset], 1)——即同时对“过去的方向”和“未来的方向”对称交织对应论文中 past-to-future 与 future-to-past 的双向交织x_weight weight_net(x_pooled)得到对应权重可微采样与加权linear_sampler(x_descriptor, x_offset)执行亚帧插值平移再乘上x_weight得到交织后的特征拼回原通道输出张量的前num_folds个通道替换为交织结果其余3/4通道shift_div4时原样透传x_out[:, num_folds:, :] x[:, num_folds:, :]。也就是说 TIN 每次只改动 1/4 的通道其余通道保留原始空间表征。另外两个结构性细节deform_groups硬编码为 2对齐原版仓库TemporalInterlace与 ResNet 卷积层的组合由 CombineNet 完成——x先过net1TemporalInterlace再过net2原卷积层形状均为[num_batches * num_segments, C, H, W]。3.4 ResNetTIN把交织插进 ResNet 的每个 BlockResNetTIN 继承自ResNetTSMTSM 骨干关键差异在init_structure当is_tinTrue默认时调用make_temporal_interlace()对 layer1~layer4 的每个 Block执行blocks[i].conv1.conv CombineNet(tds, blocks[i].conv1.conv)即用TemporalInterlace(in_channelsb.conv1.in_channels, num_segments, shift_div)包装每个 Block 的第一个卷积conv1.conv。结合基类 ResNetTSM 的默认参数num_segments8、shift_div8TIN 配置中把shift_div显式设为 4。测试用例 test_resnet_tin.py 验证了这些结构性事实num_segments-1会触发断言错误正常构建后每个 block 的conv1.conv均为CombineNet且net1是TemporalInterlace(8, 3, 64, 64)的输入前向输出为(8, 2048, 2, 2)同时验证了partial_bnTrue时前 2 个 BN 正常更新、其余冻结的行为。四、配置体系与关键参数详解4.1 模型基础配置三个数据集配置均继承base/models/tin_r50.py核心内容model dict( typeRecognizer2D, backbonedict( typeResNetTIN, pretrainedtorchvision://resnet50, # ImageNet 2D 预训练权重 depth50, norm_evalFalse, shift_div4), # 通道被分为 4 份仅 1 份参与交织 cls_headdict( typeTSMHead, num_classes400, in_channels2048, spatial_typeavg, consensusdict(typeAvgConsensus, dim1), # 8 帧片段在时间维平均池化 dropout_ratio0.5, init_std0.001, is_shiftFalse, # 关键TIN 骨干自带交织关闭 TSM 式 shift average_clipsprob), data_preprocessordict(typeActionDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], format_shapeNCHW))参数要点参数位置说明backbone.shift_divtin_r50.py通道分组数交织只作用于前C/shift_div通道TIN 默认 4TSM 的shift_div默认是 8见 ResNetTIN 文档串backbone.is_tinResNetTIN是否插入时间交织默认Truebackbone.num_segmentsResNetTSM片段数默认 8对应采样策略1x1x8cls_head.is_shiftTSMHead基础配置中为False因为交织已在骨干的conv1处完成无需再走 TSM 的 shift 分支TSMHead 中is_shiftTrue时才会在 head 内做时序池化/移位consensusTSMHeadAvgConsensus(dim1)将 8 个片段特征在时间维平均norm_evalFalsebackbone验证时 BN 保持训练态统计与 TSM 基础配置 对比可见两者共享Recognizer2D TSMHead的骨架差异仅在骨干类型ResNetTINvsResNetTSM、shift_div4 vs 8和is_shiftFalse vs True——TIN 把“时间算子”从 TSM 的固定移位换成了可学习的交织。4.2 三个训练配置(1) SthV1tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv1-rgb.py数据集RawframeDataset基于预抽帧的 rawframesfilename_tmpl{:05}.jpg174 类num_classes174、dropout_ratio0.8预处理训练管线为SampleFrames(clip_len1, num_clips8) → RawFrameDecode → Resize(-1, 256) → MultiScaleCrop(input_size224, scales(1, 0.875, 0.75, 0.66)) → Resize(224, 224)验证/测试为Resize(-1, 256) → CenterCrop(224)训练循环EpochBasedTrainLoop, max_epochs40, val_begin1, val_interval1每轮验证一次优化器SGD, lr0.01, momentum0.9, weight_decay0.0005构造器为TSMOptimWrapperConstructor且paramwise_cfgdict(fc_lr5True)梯度裁剪max_norm20学习率策略第 0 轮LinearLR线性热身start_factor0.1第 1~40 轮CosineAnnealingLR(T_max39, eta_min0)。(2) SthV2tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv2-rgb.py结构与 SthV1 一致分辨率高度 240两处差异clip_grad的max_norm40更宽松以及val_interval2每 2 轮验证一次。(3) Kinetics-400TSM 微调tin_kinetics400-pretrained-tsm-r50_1x1x8-50e_kinetics400-rgb.py数据集换成VideoDatasetDecordInit/DecordDecode直接读视频训练/验证列表分别为kinetics400_train_list_videos.txt/kinetics400_val_list_videos.txt训练管线额外含Flip(flip_ratio0.5)model dict(cls_headdict(is_shiftTrue))微调时开启 TSMHead 的 shift 分支以对齐 TSM 权重中的 head 结构继承 sgd_50e.pymax_epochs50、MultiStepLR(milestones[20, 40], gamma0.1)、SGDlr0.01, weight_decay0.0001、clip_grad max_norm40load_from指向 TSM ResNet50 在 K400 上训练的权重50 epoch实现“TSM 预训练 → TIN 微调”。关于TSMOptimWrapperConstructor的分组学习策略其实现tsm_optim_wrapper_constructor.py对参数分组第一个卷积用基础lr/wdBN 参数零权重衰减各 bias 为2x lr且零衰减开启fc_lr5True时cls_head 最后一个 FC 层权重为5x lr、bias 为10x lr且零衰减。五、训练Train通用命令python tools/train.py ${CONFIG_FILE} [optional arguments]官方示例以确定性模式训练 SthV1 上的 TIN 模型并开启周期验证randomness.seed0固定随机种子randomness.deterministicTrue使 CUDNN 走确定性路径python tools/train.py configs/recognition/tin/tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv1-rgb.py \ --work-dir work_dirs/tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv1-rgb randomness.seed0 randomness.deterministicTrue补充说明从当前仓库的 tools/train.py 源码看覆盖配置项的参数是--cfg-optionsDictAction类型接受keyvalue形式同时提供--work-dir、--resume、--amp、--no-validate、--seed、--deterministic、--launcher等选项上例中的randomness.seed0 randomness.deterministicTrue属于配置覆盖写法实际执行时通过--cfg-options randomness.seed0 randomness.deterministicTrue传入或等价地改用命令行参数--seed 0 --deterministic。多卡分布式训练可使用 tools/dist_train.sh。更多训练细节工作目录结构、断点续训、验证策略见训练与测试教程的 Training 章节。六、测试Test通用命令python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]官方示例在 SthV1 上测试 TIN 模型并把结果转储为 JSONpython tools/test.py configs/recognition/tin/tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv1-rgb.py \ checkpoints/SOME_CHECKPOINT.pth --dump result.json其中 checkpoint 文件名形如tin_imagenet-pretrained-r50_8xb6-1x1x8-40e_sthv1-rgb_20220913-9b7804d6.pth完整下载 URL 见 metafile.yml 对应模型的Weights字段。测试评估器为AccMetric输出 top-1 / top-5 准确率。测试的更多细节--out、--format-only、--eval等同样参见训练与测试教程的 Test 章节。七、引用如果使用了本仓库的 TIN 实现请按论文信息引用article{shao2020temporal, title{Temporal Interlacing Network}, author{Hao Shao and Shengju Qian and Yu Liu}, year{2020}, journal{AAAI}, }八、小结TIN 的核心是TemporalInterlace算子由OffsetNet预测对称的 ±offset、WeightNet预测 (0,2) 区间权重经可微linear_sampler完成亚帧交织且每次只重写 1/4 的通道ResNetTIN继承ResNetTSM在四个 stage 的每个 Block 的conv1前插入CombineNet(TemporalInterlace, 原卷积)配置层面用shift_div4、cls_head.is_shiftFalse与 TSM 区分仓库提供 SthV1、SthV2ImageNet 预训练40 epochCosine 调度与 Kinetics-400TSM 权重微调50 epochMultiStepLR 调度三套可直接复现的配置并给出官方 checkpoint、训练日志与结果表的对照配合确定性训练参数可完整复现表格中的精度。赞分享人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载相关推荐MMAction2 中 Omnisource 图文联合训练详解RecognizerOmni、OmniResNet 与 K400 上的训练测试实战MMAction2 中 Omnisource 图文联合训练详解RecognizerOmni、OmniResNet 与 K400 上的训练测试实战 本文围绕 M人工智能计算机视觉深度学习MMAction2 中 Video Swin Transformer 的完整实战模型库、配置详解与训练测试流程MMAction2 中 Video Swin Transformer 的完整实战模型库、配置详解与训练测试流程 本文以 MMAction2 中 Video S人工智能计算机视觉深度学习MMAction2 中 SlowOnly 视频识别模型的配置、训练与评测实战详解MMAction2 中 SlowOnly 视频识别模型的配置、训练与评测实战详解 SlowOnly 是 MMAction2 支持的经典慢路径视频识别架构它仅使人工智能计算机视觉深度学习上一篇3步解锁电视盒子新生命从闲置设备到全能Linux服务器下一篇iOS 7.1.1滚动元素无法滚动到头Mars中的scrollfix实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考