MMdnn is a comprehensive and cross-framework tool to convert, visualize and diagnose deep learning (DL) models. The "MM" stands for model management, and "dnn" is the acronym of deep neural network.
Major features include:
Model Conversion
Model Retraining
Model Search & Visualization
Model Deployment
We provide some guidelines to help you deploy DL models to another hardware platform.
We provide a guide to help you accelerate inference with TensorRT.
Targeting at openness and advancing state-of-art technology, Microsoft Research (MSR) and Microsoft Software Technology Center (STC) had also released few other open source projects:
We encourage researchers, developers and students to leverage these projects to boost their AI / Deep Learning productivity.
You can get a stable version of MMdnn by
pip install mmdnnAnd make sure to have Python installed or you can try the newest version by
pip install -U git+https://github.com/Microsoft/MMdnn.git@masterMMdnn provides a docker image, which packages MMdnn and Deep Learning frameworks that we support as well as other dependencies. You can easily try the image with the following steps:
Install Docker Community Edition(CE)
Learn more about how to install docker
Pull MMdnn docker image
docker pull mmdnn/mmdnn:cpu.smallRun image in an interactive mode
docker run -it mmdnn/mmdnn:cpu.smallAcross the industry and academia, there are a number of existing frameworks available for developers and researchers to design a model, where each framework has its own network structure definition and saving model format. The gaps between frameworks impede the inter-operation of the models.
We provide a model converter to help developers convert models between frameworks through an intermediate representation format.
[Note] You can click the links to get detailed README of each framework.
The model conversion between currently supported frameworks is tested on some ImageNet models.
| Models | Caffe | Keras | TensorFlow | CNTK | MXNet | PyTorch | CoreML | ONNX |
|---|---|---|---|---|---|---|---|---|
| VGG 19 | √ | √ | √ | √ | √ | √ | √ | √ |
| Inception V1 | √ | √ | √ | √ | √ | √ | √ | √ |
| Inception V3 | √ | √ | √ | √ | √ | √ | √ | √ |
| Inception V4 | √ | √ | √ | o | √ | √ | √ | √ |
| ResNet V1 | × | √ | √ | o | √ | √ | √ | √ |
| ResNet V2 | √ | √ | √ | √ | √ | √ | √ | √ |
| MobileNet V1 | × | √ | √ | o | √ | √ | √ | √ |
| MobileNet V2 | × | √ | √ | o | √ | √ | √ | √ |
| Xception | √ | √ | √ | o | × | √ | √ | √ |
| SqueezeNet | √ | √ | √ | √ | √ | √ | √ | √ |
| DenseNet | √ | √ | √ | √ | √ | √ | √ | √ |
| NASNet | x | √ | √ | o | √ | √ | √ | x |
| ResNext | √ | √ | √ | √ | √ | √ | √ | √ |
| voc FCN | √ | √ | ||||||
| Yolo3 | √ | √ |
One command to achieve the conversion. Using TensorFlow ResNet V2 152 to PyTorch as our example.
$ mmdownload -f tensorflow -n resnet_v2_152 -o ./
$ mmconvert -sf tensorflow -in imagenet_resnet_v2_152.ckpt.meta -iw imagenet_resnet_v2_152.ckpt --dstNodeName MMdnn_Output -df pytorch -om tf_resnet_to_pth.pthDone.
We provide a local visualizer to display the network architecture of a deep learning model. Please refer to the instruction.
Keras "inception V3" to CNTK and related issue
TensorFlow slim model "ResNet V2 152" to PyTorch
Mxnet model "LResNet50E-IR" to TensorFlow and related issue
MXNet "ResNet-152-11k" to PyTorch
Another Example of 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 "voc-fcn" to TensorFlow
Caffe "AlexNet" to TensorFlow
Caffe "inception_v4" to TensorFlow
Caffe "VGG16_SOD" to TensorFlow
Caffe "SqueezeNet v1.1" to CNTK
Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.
The intermediate representation stores the network architecture in protobuf binary and pre-trained weights in NumPy native format.
[Note!] Currently the IR weights data is in NHWC (channel last) format.
Details are in ops.txt and graph.proto. New operators and any comments are welcome.
We are working on other frameworks conversion and visualization, such as PyTorch, CoreML and so on. We're investigating more RNN related operators. Any contributions and suggestions are welcome! Details in Contribution Guideline.
Yu Liu (Peking University): Project Developer & Maintainer
Cheng CHEN (Microsoft Research Asia): Caffe, CNTK, CoreML Emitter, Keras, MXNet, TensorFlow
Jiahao YAO (Peking University): CoreML, MXNet Emitter, PyTorch Parser; HomePage
Ru ZHANG (Chinese Academy of Sciences): CoreML Emitter, DarkNet Parser, Keras, TensorFlow frozen graph Parser; Yolo and SSD models; Tests
Yuhao ZHOU (Shanghai Jiao Tong University): MXNet
Tingting QIN (Microsoft Research Asia): Caffe Emitter
Tong ZHAN (Microsoft): ONNX Emitter
Qianwen WANG (Hong Kong University of Science and Technology): Visualization
Thanks to Saumitro Dasgupta, the initial code of caffe -> IR converting is references to his project caffe-tensorflow.
Licensed under the MIT license.