能在不同的深度学习框架之间转换模型?微软的MMdnn做到了

Microsoft/MMdnn:深度学习框架随心切换

学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的Saumitro Dasgupta就做过一个把Caffe模型转换到TensorFlow的工具caffe-tensorflow。

不过,两种框架可远远不够。

为此,微软就做了一套能在不同的深度学习框架之间进行交互式操作的工具集——MMdnn,它是一个综合性的跨框架解决方案,能够用于深度神经网络模型的转换,可视化及诊断等操作,可在Caffe,Keras,MXNet,Tensorflow,CNTK和PyTorch等框架之间实现模型的转换。

这里是它的GitHub链接:https://github.com/Microsoft/MMdnn

其中,“MM”代表模型管理,“dnn”代表深度神经网络的缩写。本质上,它就是把一个框架训练的多个DNN模型转换成其他框架下的模型,主要功能如下:

模型文件转换器:在不同框架之间转换DNN模型

模型代码片段生成器:为不同框架生成训练或推理代码片段

模型可视化工具:可视化不同框架下DNN模型的网络架构和参数

模型兼容性测试(正在完善中)

安装

对于稳定版本的MMdnn,你可以通过如下命令获得:

pip installhttps://github.com/Microsoft/MMdnn/releases/download/0.1.2/mmdnn-0.1.2-py2.py3-none-any.whl

对于最新的版本,你可以用这个命令安装:

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

功能

模型转换

从学术界到产业界,存在各种各样的深度学习框架来供开发人员、研究人员设计模型,然而,对于神经网络的结构,每种框架都有它自己的定义,并为模型设定它自己的保存格式,诸如此类的框架差异妨碍了模型之间的交互性操作。

为此,我们提供了一个这样的模型转换器,来帮助开发人员通过中间表示格式在不同框架之间实现模型的转换。

支持框架

Caffe

Keras

MXNet

Tensorflow(实验研究性的)

Microsoft Cognitive Toolkit(CNTK)(生产性的)

PyTorch(生产性的)

CoreML(实验研究性的、生产性的)

模型测试

在一些当前框架所支持的ImageNet模型上测试模型的转换功能。

正在完善的框架

Pytorch

CNTK

Caffe2

模型可视化

提交模型的IR json文件,使用MMdnn的模型可视化器来可视化模型结构及参数。

再次以Keras框架的“inception_v3”模型为例。

1. 下载预先训练的模型

2. 预先训练的模型文件转换为中间表示

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

3. 打开MMdnn模型可视化器并选择文件keras_inception_v3.json

例子

1.Keras "inception_v3" to CNTK及相关问题

https://github.com/Microsoft/MMdnn/blob/master/docs/keras2cntk.md

2.MXNet "resnet 152 11k" 到 PyTorch

https://github.com/Microsoft/MMdnn/issues/6

3.Tensorflow "resnet 101" 到 PyTorch

https://github.com/Microsoft/MMdnn/issues/22

4.Tensorflow "mnist mlp model" 到 CNTK

https://github.com/Microsoft/MMdnn/issues/11

5.Tensorflow "Inception_v3" 到 MXNet

https://github.com/Microsoft/MMdnn/issues/30

6.Caffe "AlexNet" 到 Tensorflow

https://github.com/Microsoft/MMdnn/issues/10

7.Caffe "inception_v4" 到 Tensorflow

https://github.com/Microsoft/MMdnn/issues/26

8.Caffe "VGG16_SOD" 到 Tensorflow

https://github.com/Microsoft/MMdnn/issues/27

贡献

中间表示

中间表示将网络体系结构存储在protobuf二进制文件中,并以NumPy本地的格式储存预训练的模型权重。

注意!当前的IR权重数据是NHWC(最后通道)格式。

详细信息在ops.txt和graph.proto中。欢迎提出新操作及任何意见。

构架

我们正在开发其他的框架模型转换及可视化功能,如Caffe2,PyTorch,CoreML等框架。更多有关RNN的相关操作正在研究中。欢迎提出任何贡献和建议!

授权许可

大多数情况下需要你同意参与者许可协议(CLA),声明你有权并授予我们使用你的贡献的权利。更多有关的详细信息,请访问https://cla.microsoft.com。

当你提交pull请求时,CLA机器人将自动确定你是否需要提供CLA并适当地装饰PR(例如标签、注释等)。你只需要按照机器人提供的说明,使用我们的CLA,在整个回购期间完成一次即可。

致谢

感谢Saumitro Dasgupta的caffe初始代码 - > IR转换是对他的caffe-tensorflow项目的引用。

本文来自企鹅号 - AI科技大本营媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

TensorFlow 深度学习概述

作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者。 TensorFlow深度学习框架 Google不仅是大数据和云计算的领导者,在机...

4049
来自专栏AI科技大本营的专栏

能在不同的深度学习框架之间转换模型?微软的MMdnn做到了

Microsoft/MMdnn:深度学习框架随心切换 学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的...

41411
来自专栏机器学习算法与理论

调用Dlib库进行人脸关键点标记

       昨天调试了人脸识别(classifier_webcam)这个程序,效果不错,响应速度也挺快。按照http://blog.csdn.net/u011...

4519
来自专栏机器之心

业界 | MXNet开放支持Keras,高效实现CNN与RNN的分布式训练

1833
来自专栏人工智能LeadAI

TensorFlow从0到1丨 第五篇:TensorFlow轻松搞定线性回归

上一篇 第一个机器学习问题 其实是一个线性回归问题(line regression),呈现了用数据来训练模型的具体方式。本篇从平行世界返回,利用TensorFl...

3577
来自专栏ATYUN订阅号

基于计算机视觉和OpenCV:创建一个能够计算道路交通流量的应用

本文将介绍如何在不需要大量的深度学习算法的情况下,基于计算机视觉来计算道路交通流量。本教程只使用Python和OpenCV,在背景差分算法的帮助下,实现非常简单...

2976
来自专栏人工智能头条

详解TensorBoard如何调参

993
来自专栏奇点大数据

阿里巴巴最新实践:TVM+TensorFlow优化GPU上的神经机器翻译

本文是阿里巴巴 PAI-Blade 团队发表于 TVM 的最新博文,文中阐述了如何将 TVM 引入 TensorFlow,使 TensorFlow 中的 bat...

5275
来自专栏人工智能

TensorFlow实战——图像分类神经网络模型

Learn how to classify images with TensorFlow 使用TensorFlow创建一个简单而强大的图像分类神经网络模型 by...

4096
来自专栏人工智能

使用10几行Python代码,快速建立视觉模型识别图像

视觉 进化的作用,让人类对图像的处理非常高效。 这里,我给你展示一张照片。 ? 如果我这样问你: 你能否分辨出图片中哪个是猫,哪个是狗? 你可能立即会觉得自己遭...

3769

扫码关注云+社区

领取腾讯云代金券