快速上手微软MMdnn

MMdnn 是微软开源的一套帮助用户在不同深度学习框架之间进行互操作的工具,包括模型转换和可视化。目前支持在 Caffe、Keras、MXNet、Tensorflow、CNTK、PyTorch 和 CoreML 等框架之间进行模型转换。

安装

通过以下命令行获取稳定版的 MMdnn:

pip install https://github.com/Microsoft/MMdnn/releases/download/0.1.3/mmdnn-0.1.3-py2.py3-none-any.whl

或者通过以下命令尝试最新版本:

pip install -U git+https://github.com/Microsoft/MMdnn.git@master

模型转换

业界和学界存在大量现有框架,适合开发者和研究者来设计模型,每个框架具备自己的网络结构定义和模型保存格式。框架之间的差距阻碍了模型的交互操作。

我们提供一个模型转换器,帮助开发者通过中间表征格式转换模型,以适合不同框架。

支持框架

每个支持的框架都有详细的 README 文档,它们可以在以下conversion件夹找到。

地址:https://github.com/Microsoft/MMdnn/tree/master/mmdnn/conversion Caffe Keras MXNet TensorFlow(实验阶段,强烈建议先阅读 README) Microsoft Cognitive Toolkit (CNTK) PyTorch CoreML(实验阶段)

测试模型

我们在部分 ImageNet 模型上对当前支持的框架间模型转换功能进行了测试。

正在测试的框架: PyTorch CNTK Caffe2 ONNX 正在测试的模型: RNN 图像风格迁移 目标检测

模型可视化

你可以使用 MMdnn 模型可视化工具(http://vis.mmdnn.com/),提交自己的 IR json 文件进行模型可视化。为了运行下面的命令行,你需要使用喜欢的包管理器安装 requests、Keras、TensorFlow。

使用 Keras inception_v3 模型作为示例。

\1. 下载预训练模型:

python -m mmdnn.conversion.examples.keras.extract_model -n inception_v3

\2. 将预训练模型文件转换成中间表征格式:

python3 -m mmdnn.conversion._.convertToIR -f keras -d keras_inception_v3 -n imagenet_inception_v3.json

\3. 打开 MMdnn 模型可视化工具地址(http://mmdnn.eastasia.cloudapp.azure.com:8080/),选择文件 keras_inception_v3.json。

社区支持

本项目仍在继续开发与探索,它需要各位读者完善中间表征与支持的框架。因此,该项目的作者表示他非常希望有开发者能提供新的运算或扩展。

中间表征:中间表征在 protobuf 二进制文件中储存网络架构,在 NumPynative 格式中储存预训练权重。此外,目前 IR 权重数据使用的是 NHWC 格式。中间表征的细节请查看 ops.txt 和 graph.proto 文件。 框架:我们正在扩展到其它框架版本和可视化工具,例如 Caffe2、PyTorch 和 CoreML 等。此外,本项目也在积极开发 RNN 相关的操作方法。

使用案例

以下是该项目实现框架转换的基本案例,其中包括官方的教程和用户提供的各种案例,机器之心简要介绍了官方 Keras 到 CNTK 的转换教程。 官方教程:

Keras “inception_v3” to CNTK 用户案例:

MXNet “resnet 152 11k” to PyTorch MXNet “resnext” to Keras Tensorflow “resnet 101” to PyTorch Tensorflow “mnist mlp model” to CNTK Tensorflow “Inception_v3” to MXNet Caffe “AlexNet” to Tensorflow Caffe “inception_v4” to Tensorflow Caffe “VGG16_SOD” to Tensorflow Caffe “Squeezenet v1.1” to CNTK

Keras「inception_v3」模型到 CNTK 的转换

1. 安装 Keras 和 CNTK

pip install keras
pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.3-cp27-cp27mu-linux_x86_64.whl

or

pip install
https://cntk.ai/PythonWheel/CPU-Only/cntk-2.3-cp35-cp35m-linux_x86_64.whl

2. 准备 Keras 模型

以下示例将首先下载预训练模型,然后使用简单的模型抽取器从 Keras 应用中获取模型,抽取器将抽取 Keras 模型架构和权重。

$ python -m mmdnn.conversion.examples.keras.extract_model -n inception_v3

Using TensorFlow backend.

Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.5/inception_v3_weights_tf_dim_ordering_tf_kernels.h5

96075776/96112376 [============================>.] - ETA: 0s

.

.

.

Network structure is saved as [imagenet_inception_v3.json].

Network weights are saved as [imagenet_inception_v3.h5].

架构文件 imagenet_inception_v3.json 和权重文件 imagenet_inception_v3.h5 会下载至当前工作目录。

3. 将预训练模型文件转换为中间表征

$ python -m mmdnn.conversion._.convertToIR -f keras -d converted -n imagenet_inception_v3.json -w imagenet_inception_v3.h5

Using TensorFlow backend.

.

.

.

Network file [imagenet_inception_v3.json] is loaded successfully.

IR network structure is saved as [converted.json].

IR network structure is saved as [converted.pb].

IR weights are saved as [converted.npy].

以上的命令会将 imagenet_inception_v3.json 作为神经网络架构的描述文件,imagenet_inception_v3.h5 作为预训练权重。然后计算出中间表征文件 converted.json 用于可视化,计算出 converted.proto 和 converted.npy 以进一步转换为其它框架。

4. 转换 IR 文件为 CNTK 模型

$ python -m mmdnn.conversion._.IRToCode -f cntk -d converted_cntk.py -n converted.pb -w converted.npy

Parse file [converted.pb] with binary format successfully.

Target network code snippet is saved as [converted_cntk.py].

你将得到文件 converted_cntk.py,包括构建 Inception V3 网络的原始 CNTK 代码。

经过这三步,你已经将预训练 Keras Inception_v3 模型转换成 CNTK 网络文件 converted_cntk.py 和权重文件 converted.npy。你可以用这两个文件调整训练或推断。

5. 转存原始 CNTK 模型

$ python -m mmdnn.conversion.examples.cntk.imagenet_test -n converted_cntk -w converted.npy --dump cntk_inception_v3.dnn

.

.

.

CNTK model file is saved as [cntk_inception_v3.dnn], generated by [converted_cntk.py] and [converted.npy].

CNTK 可直接加载文件 cntk_inception_v3.dnn。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/219466.html<

(0)
管理的头像管理
上一篇2025-04-14 03:13
下一篇 2025-04-14 03:15

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注