Table of Content
- Overview
- PyTorch + Caffe2
- torchvision (optional)
- ONNX (optional)
- MMdnn (optional)
Overview
服务器环境:Ubuntu 16.04 Linux media50 4.10.0-30-generic Wed Aug 2 02:13:56 UTC 2017 x86_64 GNU/Linux
所用版本:(PyTorch + Caffe2) 1.0.0 + torchvision 0.2.1 + ONNX 1.3.0 + MMdnn 0.2.3
PyTorch + Caffe2
PyTorch:动态/灵活/简洁的神经网络/深度学习框架
Caffe2:多平台部署的轻量化深度学习框架
安装
安装 Python,OpenCV,numpy,具体步骤可参见 Google
安装其他附加依赖项:
sudo apt-get update
sudo apt-get install --no-install-recommends \
build-essential \
git \
libgoogle-glog-dev \
libgtest-dev \
libiomp-dev \
libleveldb-dev \
liblmdb-dev \
libopenmpi-dev \
libsnappy-dev \
libprotobuf-dev \
openmpi-bin \
openmpi-doc \
protobuf-compiler \
python-pip
sudo pip install \
future \
protobuf \
typing \
hypothesis
# for Ubuntu 14.04
sudo apt-get install --no-install-recommends \
libgflags2 \
cmake3
# for Ubuntu 16.04
sudo apt-get install --no-install-recommends \
libgflags-dev \
cmake
安装 CUDA 和 cuDNN,另 NCCL 可选,具体步骤可参见 Google 或 CUDA-cuDNN-NCCL-OpenCV-Caffe_setup
注意:如果 CUDA 版本为 8.0,则需要 cuDNN 6.0,否则编译过程中会报错
编译安装 PyTorch + Caffe2:
git clone https://github.com/pytorch/pytorch.git
cd pytorch
git submodule update --init --recursive
# 复制文件至系统目录需要 sudo 权限
sudo python setup.py install
测试
测试是否安装成功:
cd ~ && python -c 'import pytorch' 2>/dev/null && echo "Success" || echo "Failure"
cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
或
cd ~
python
>> import pytorch
>> from caffe2.python import core
注意:
切换目录是必要操作,因为源代码路径下已存在 caffe2 路径
@ Ref[2]
Don’t set PYTHONPATH to your build folder
Don’t run python from the pytorch/build directory, or from the pytorch root directory, or from the upper directory
Since you have Anaconda you should use ./scripts/build_anaconda.sh , which correctly installs Caffe2 into Anaconda’s python
@ Ref[3]
测试 GPU support:
cd $PYTORCH_ROOT
cd caffe2/python/operator_test/
python activation_ops_test.py
如有问题,运行后会在顶部提示 [使用 CPU 而非 GPU]、[缺失一些必要的库] 等警告
其他常见问题另可参见:FAQ / Troubleshooting Help | Caffe2
torchvision
torchvision:自身独立但主要服务于 PyTorch 深度学习框架,用于生成图片、视频数据集,同时提供一些流行的模型类和预训练模型
- torchvision on GitHub
Datasets, Transforms and Models specific to Computer Vision
安装
sudo pip install torchvision
测试
cd ~
python
>> import torchvision
ONNX
Open Neural Network Exchange (ONNX) format
ONNX 作为一种共享模型文件格式,为 AI models 提供了一种开源格式
在不同的框架之间实现模型交互,并简化从研究到产品化的过程,以提高人工智能社区的创新速度
Caffe2, PyTorch, Microsoft Cognitive Toolkit, Apache MXNet 和其他一些框架都已支持 ONNX
安装
sudo apt-get install protobuf-compiler libprotoc-dev
sudo pip install onnx onnx-caffe2
测试
cd ~
python
>> import onnx
转换 ONNX 模型到 Caffe2 模型
onnx-caffe2 绑定了一个 shell 命令 convert-onnx-to-caffe2,用于将 ONNX 模型转换为 Caffe2 模型:
$ convert-onnx-to-caffe2 model.onnx --output predict_net.pb --init-net-output init_net.pb
注意:
在 ONNX 格式中,参数和网络结构存储于同一个模型文件
在 Caffe2 中,通常存储于独立的两个文件 init_net.pb (参数) 和 predict_net.pb (网络结构)
MMdnn
MMdnn:一套能让用户在不同深度学习框架间做相互操作的工具,如模型的转换和可视化,可转换的模型格式包括 Caffe、Keras、MXNet、Tensorflow、CNTK、PyTorch、ONNX 和 CoreML
MMdnn is a set of tools to help users inter-operate among different deep learning frameworks, e.g. model conversion and visualization. Convert models between Caffe, Keras, MXNet, Tensorflow, CNTK, PyTorch, ONNX and CoreML.
- MMdnn on GitHub
安装
# Stable version
sudo pip install mmdnn
# Latest version
sudo pip install -U git+https://github.com/Microsoft/MMdnn.git@master
测试
cd ~
python
>> import mmdnn
简单使用示例
mmdownload -h # 显示帮助信息
mmdownload -f tensorflow -n resnet_v2_152 -o ./
mmconvert -h # 显示帮助信息
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.pth
- usage:
mmconvert [-h]
[--srcFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch}]
[--inputWeight INPUTWEIGHT]
[--inputNetwork INPUTNETWORK]
--dstFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx}
--outputModel OUTPUTMODEL
[--dump_tag {SERVING,TRAINING}]
- optional arguments:
-h, --help show this help message and exit
--srcFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch}, -sf {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch} Source toolkit name of the model to be converted.
--inputWeight INPUTWEIGHT, -iw INPUTWEIGHT Path to the model weights file of the external tool (e.g caffe weights proto binary, keras h5 binary
--inputNetwork INPUTNETWORK, -in INPUTNETWORK Path to the model network file of the external tool (e.g caffe prototxt, keras json
--dstFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx}, -df {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx} Format of model at srcModelPath (default is to auto-detect).
--outputModel OUTPUTMODEL, -om OUTPUTMODEL Path to save the destination model
--dump_tag {SERVING,TRAINING} Tensorflow model dump type
注意:
在转换 Caffe 模型至其他格式时,一般需要额外指定 --inputShape,如 --inputShape 224,224,3,否则容易转换失败
If you want to assume a fixed input shape, you can use “–inputShape” like “–inputShape 224,224,3”
希望能够对大家有所帮助 ~ 转载请注明出处 ~
References
[1] Caffe2 and PyTorch join forces to create a Research + Production platform PyTorch 1.0
[2] FAQ / Troubleshooting Help | Caffe2
[3] [Caffe2] CRITICAL:root:Cannot load caffe2.python
[4] GitHub - ysh329/deep-learning-model-convertor
[5] MMdnn Visualizer
[6] tutorials/OnnxCaffe2Import.ipynb at master · onnx/tutorials · GitHub