将 PyTorch 训练出的 PySlowFast(.pyth)模型转换为 ONNX 格式

发布时间:2026/10/20 2:08:33

将 PyTorch 训练出的 PySlowFast(.pyth)模型转换为 ONNX 格式 将 PyTorch 训练出的 PySlowFast.pyth模型转换为 ONNX 格式的关键在于模型是双路径Dual-Pathway输入。因此在导出 ONNX 时我们需要构建一个包含两个 TensorSlow 路径和 Fast 路径的元组作为 dummy input虚拟输入。以下是完整的转换代码脚本importtorchimportnumpyasnp# 1. 定义与训练时完全一致的模型结构以标准的 SlowFast R50 为例defload_slowfast_model(checkpoint_path,num_classes10):# 使用 pytorchvideo 快速构建符合 SlowFast 架构的网络modeltorch.hub.load(facebookresearch/pytorchvideo,slowfast_r50,pretrainedFalse)# 修改分类头model.blocks[6].projtorch.nn.Linear(model.blocks[6].proj.in_features,num_classes)# 加载权重checkpointtorch.load(checkpoint_path,map_locationcpu)ifmodel_stateincheckpoint:model.load_state_dict(checkpoint[model_state])else:model.load_state_dict(checkpoint)model.eval()returnmodel# 2. 初始化模型CHECKPOINT_PATHcheckpoints/checkpoint_epoch_00050.pythNUM_CLASSES10# 替换为你的分类数modelload_slowfast_model(CHECKPOINT_PATH,num_classesNUM_CLASSES)# 3. 构造虚拟输入 (Dummy Input)# 假设输入视频为 32 帧采样率/结构对应# Slow 路径: 4 帧, 尺寸 256x256 (BatchSize1, 通道3)# Fast 路径: 32 帧, 尺寸 256x256 (BatchSize1, 通道3)batch_size1channels3height,width256,256dummy_slow_inputtorch.randn(batch_size,channels,4,height,width)dummy_fast_inputtorch.randn(batch_size,channels,32,height,width)# SlowFast 期望的输入是一个包含两个路经 Tensor 的列表或元组dummy_inputs(dummy_slow_input,dummy_fast_input)# 4. 执行 ONNX 导出onnx_output_pathslowfast_model.onnxprint(f正在转换模型并保存至:{onnx_output_path}...)torch.onnx.export(model,argsdummy_inputs,# 传入双路径虚拟输入fonnx_output_path,# 输出的 ONNX 文件路径export_paramsTrue,# 导出训练后的权重参数opset_version12,# 建议使用 opset 11 或 12对视频 3D 算子支持较好do_constant_foldingTrue,# 是否执行常量折叠优化input_names[slow_input,fast_input],# 指定输入节点的名称output_names[output],# 指定输出节点的名称dynamic_axes{# 支持动态 BatchSize可选slow_input:{0:batch_size},fast_input:{0:batch_size},output:{0:batch_size}})print(ONNX 模型转换成功)# 5. 验证 ONNX 模型有效性importonnx onnx_modelonnx.load(onnx_output_path)onnx.checker.check_model(onnx_model)print(ONNX 模型结构检查完毕未发现异常。) 关键踩坑与避雷指南3D 算子不兼容问题SlowFast 内部大量使用了 3D 卷积Conv3d和 3D 池化MaxPool3d。部分旧版本的 ONNX Opset 对其支持不佳。如果导出报错请尝试将opset_version提升至12、13或14。PyTorchVideo 依赖兼容性如果您在导出时遇到类似TracerWarning导致导出失败可以尝试使用官方的原版 PySlowFast 代码库中的slowfast/models/build.py来构建model而非pytorchvideo。推理时如何传参以 ONNX Runtime 为例在后续部署时由于设置了两个输入节点你需要将处理好的 Slow 路径和 Fast 路径 Tensor 分别作为字典的 Key 传给推理器importonnxruntimeasort ort_sessionort.InferenceSession(slowfast_model.onnx)# 准备好你的两个经过预处理的 numpy 数组outputsort_session.run([output],{slow_input:slow_tensor_np,fast_input:fast_tensor_np})
延伸阅读

更多相关文章

2026/10/20 13:32:24

协议之DASH介绍

DASH:Dynamic Adaptive Streaming over HTTP,基于 HTTP 的动态自适应码流标准,标准号 ISO/IEC 23009-1,由 MPEG 制定,2012 年正式发布。 与 HLS 类似,核心思想是将媒体内容切分为多个小的媒体片段&#xff…

2026/10/16 21:41:49

如何高效使用BiliDownloader:新手快速上手指南

如何高效使用BiliDownloader:新手快速上手指南 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader BiliDownloader是一款专为B站用户打造…

2026/10/20 13:29:01

人工势场法避障实战:从仿真到实车的参数整定与避坑指南

简介:这份资源面向无人车路径规划方向的学习者与开发者,聚焦基于人工势场法(APF)的避障路径规划实现,适合已具备一定MATLAB基础、希望理解算法落地细节的中高级读者。压缩包共4个文件,均为m脚本文件&#x…

2026/10/20 13:29:01

Webpack 实战:基于 Dev Server 搭建本地 Mock 服务

1. 本地 mock 的开发价值与方案选型1.1 为什么前端要折腾本地 mock这些年我先后参与过几个中后台项目,有一个共通的痛点非常典型:后端接口永远比前端页面晚一步。你也别指望后端能按时交付,因为需求本身就在不断调整。如果前端老老实实等接口…

2026/10/20 13:29:01

AI校服识别算法实战:从成本拆解到项目落地的完整指南

1. 校服识别要解决的根本问题,不只是一个"穿没穿"的判断前阵子接触了一类校园管理需求:在出入口自动判断学生有没有穿校服,以及有没有校外人员穿着校服混进校内。这类项目通常被叫成"AI校服识别算法",听起来好…

2026/10/20 13:29:01

LTC681X工业级AFE驱动:菊花链通信、CRC自修复与多芯片同步采样

简介:本资源为ADI公司LTC681X系列高精度电池管理芯片的官方驱动源码实现,面向嵌入式工程师、BMS系统开发者及新能源领域硬件软件协同设计人员,解决多节串联电池电压采集、寄存器配置、SPI通信与CRC校验等核心开发难题,适用于电动汽…

2026/10/20 13:29:01

从零实现轻量响应式系统:依赖收集、批量更新与数组处理实战

1. 从“rea”这个标题说起:一个极简缩写背后的完整项目拆解第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率是个缩写,而且是一个被作者刻意压缩到极致的缩写。在技术社区混久了你会发现一个规律:越是名字…

2026/10/20 13:24:00

基于51单片机的霍尔自行车码表:速度、里程与超速报警实现

简介:这是一套面向电子类专业学生与单片机初学者的自行车码表设计资料,基于STC89C52单片机,整合DS1302时钟、霍尔测速、电机调速、蜂鸣器报警、按键与LCD1602显示等模块,可用于课程设计、毕业设计或电子竞赛的完整方案参考。资源包…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑