Microsoft/MMdnn:深度学习框架随心切换
2018-01-14

学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学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 install https://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. 下载预先训练的模型


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


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项目的引用。