本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在推理中将 CNTK 与 ONNX 模型配合使用
注意
从 v28 版本开始,Amazon Deep Learning AMI 中将不再包含 CNTK、Caffe、Caffe2 和 Theano Conda 环境。包含这些环境的先前版本的 Amazon Deep Learning AMI 将继续可用。但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新。
注意
本教程中使用的 VGG-16 模型会占用大量内存。选择 Amazon Deep Learning AMI 实例时,您可能需要选择具有超过 30 GB RAM 的实例。
如何在推理中将 ONNX 模型与 CNTK 配合使用
-
(适用于 Python 3 的选项)- 激活 Python 3 CNTK 环境:
$
source activate cntk_p36 -
(适用于 Python 2 的选项)- 激活 Python 2 CNTK 环境:
$
source activate cntk_p27
-
-
其余步骤假定您使用的是
cntk_p36
环境。 -
使用文本编辑器创建一个新文件,并在脚本中使用以下程序以在 CNTK 中打开 ONNX 格式文件。
import cntk as C # Import the Chainer model into CNTK via the CNTK import API z = C.Function.load("vgg16.onnx", device=C.device.cpu(), format=C.ModelFormat.ONNX) print("Loaded vgg16.onnx!")
在运行此脚本后,CNTK 将加载模型。
-
您还可以尝试使用 CNTK 运行推理。首先,下载一张哈士奇的照片。
$
curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg -
接下来,下载将使用此模型的类的列表。
$
curl -O https://gist.githubusercontent.com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.pkl -
编辑先前创建的脚本以包含以下内容。此新版本将使用哈士奇的图片,得到一个预测结果,然后在类文件中查找,返回一个预测结果。
import cntk as C import numpy as np from PIL import Image from IPython.core.display import display import pickle # Import the model into CNTK via the CNTK import API z = C.Function.load("vgg16.onnx", device=C.device.cpu(), format=C.ModelFormat.ONNX) print("Loaded vgg16.onnx!") img = Image.open("Siberian_Husky_bi-eyed_Flickr.jpg") img = img.resize((224,224)) rgb_img = np.asarray(img, dtype=np.float32) - 128 bgr_img = rgb_img[..., [2,1,0]] img_data = np.ascontiguousarray(np.rollaxis(bgr_img,2)) predictions = np.squeeze(z.eval({z.arguments[0]:[img_data]})) top_class = np.argmax(predictions) print(top_class) labels_dict = pickle.load(open("imagenet1000_clsid_to_human.pkl", "rb")) print(labels_dict[top_class])
-
然后运行脚本,您应看到一个如下所示的结果:
248 Eskimo dog, husky