在推理中将 CNTK 与 ONNX 模型配合使用 - 深度学习 AMI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在推理中将 CNTK 与 ONNX 模型配合使用

注意

从 v28 版本开始, Amazon Deep Learning AMI 中将不再包含 CNTK、Caffe、Caffe2 和 Theano Conda 环境。包含这些环境 Amazon Deep Learning AMI 的先前版本将继续可用。但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新。

注意

本教程中使用的 VGG-16 模型会占用大量内存。选择您的 Amazon Deep Learning AMI 实例时,您可能需要一个 RAM 超过 30 GB 的实例。

如何在推理中将 ONNX 模型与 CNTK 配合使用
    • (适用于 Python 3 的选项)- 激活 Python 3 CNTK 环境:

      $ source activate cntk_p36
    • (适用于 Python 2 的选项)- 激活 Python 2 CNTK 环境:

      $ source activate cntk_p27
  1. 其余步骤假定您使用的是 cntk_p36 环境。

  2. 使用文本编辑器创建一个新文件,并在脚本中使用以下程序以在 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 将加载模型。

  3. 您还可以尝试使用 CNTK 运行推理。首先,下载一张哈士奇的照片。

    $ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg
  4. 接下来,下载将使用此模型的类的列表。

    $ curl -O https://gist.githubusercontent.com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.pkl
  5. 编辑先前创建的脚本以包含以下内容。此新版本将使用哈士奇的图片,得到一个预测结果,然后在类文件中查找,返回一个预测结果。

    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])
  6. 然后运行脚本,您应看到一个如下所示的结果:

    248 Eskimo dog, husky