{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## pytorch -> caffe2模型的转换" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "import re\n", "\n", "import onnx\n", "import torch\n", "from torch.autograd import Variable\n", "from onnx import onnx_pb\n", "from model.DHS_vgg import Vgg\n", "import numpy as np\n", "\n", "import caffe2.python.onnx.backend as onnx_caffe2_backend\n", "# Now import the caffe2 mobile exporter\n", "from caffe2.python.predictor import mobile_exporter\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pytorch -> onnx" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "IMG_SIZE = 224\n", "\n", "TMP_ONNX = 'cache/onnx/DHSNet.onnx'\n", "MODEL_PATH = 'cache/opti/total-opti-current.pth'\n", "\n", "# Convert to ONNX once\n", "model = torch.load(MODEL_PATH).cuda()\n", "model.train(False)\n", "\n", "x = Variable(torch.randn(1, 3, 224, 224), requires_grad=True).cuda()\n", "torch_out = torch.onnx._export(model, x, TMP_ONNX, export_params=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## onnx -> caffe2" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1, 224, 224)\n", "Exported model has been executed on Caffe2 backend, and the result looks good!\n" ] } ], "source": [ "# Print out ONNX model to confirm the number of output layer\n", "onnx_model = onnx.load(TMP_ONNX)\n", "# print(onnx_model)\n", "# Check that the IR is well formed\n", "onnx.checker.check_model(onnx_model)\n", "# Print a human readable representation of the graph\n", "# print(onnx.helper.printable_graph(onnx_model.graph))\n", "\n", "# prepare the caffe2 backend for executing the model this converts the ONNX model into a\n", "# Caffe2 NetDef that can execute it. Other ONNX backends, like one for CNTK will be\n", "# availiable soon.\n", "prepared_backend = onnx_caffe2_backend.prepare(onnx_model)\n", "\n", "# run the model in Caffe2\n", "\n", "# Construct a map from input names to Tensor data.\n", "# The graph of the model itself contains inputs for all weight parameters, after the input image.\n", "# Since the weights are already embedded, we just need to pass the input image.\n", "# Set the first input.\n", "W = {onnx_model.graph.input[0].name: x.cpu().data.numpy()}\n", "\n", "# Run the Caffe2 net:\n", "c2_out = prepared_backend.run(W)[4]\n", "\n", "print(torch_out[4].cpu().detach().numpy().shape)\n", "# Verify the numerical correctness upto 3 decimal places\n", "np.testing.assert_almost_equal(torch_out[4].cpu().detach().numpy(), c2_out, decimal=3)\n", "\n", "print(\"Exported model has been executed on Caffe2 backend, and the result looks good!\")" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "over...\n" ] } ], "source": [ "# extract the workspace and the model proto from the internal representation\n", "c2_workspace = prepared_backend.workspace\n", "c2_model = prepared_backend.predict_net\n", "\n", "# call the Export to get the predict_net, init_net. These nets are needed for running things on mobile\n", "init_net, predict_net = mobile_exporter.Export(c2_workspace, c2_model, c2_model.external_input)\n", "\n", "# Let's also save the init_net and predict_net to a file that we will later use for running them on mobile\n", "with open('./cache/model_mobile/init_net.pb', \"wb\") as fopen:\n", " fopen.write(init_net.SerializeToString())\n", "with open('./cache/model_mobile/predict_net.pb', \"wb\") as fopen:\n", " fopen.write(predict_net.SerializeToString())\n", "\n", "print(\"over...\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 对纯caffe2后端的网络进行测试" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "# Some standard imports\n", "from caffe2.proto import caffe2_pb2\n", "from caffe2.python import core, net_drawer, net_printer, visualize, workspace, utils\n", "\n", "import numpy as np\n", "import os\n", "import subprocess\n", "from PIL import Image\n", "import matplotlib.pyplot as plt\n", "from skimage import io, transform" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.\n", " warn(\"The default mode, 'constant', will be changed to 'reflect' in \"\n", "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.\n", " warn(\"Anti-aliasing will be enabled by default in skimage 0.15 to \"\n", "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8\n", " .format(dtypeobj_in, dtypeobj_out))\n" ] } ], "source": [ "# load the image\n", "img_in = io.imread(\"./data/DUTS/train/images/ILSVRC2012_test_00000004.jpg\")\n", "\n", "# resize the image to dimensions 224x224\n", "img = transform.resize(img_in, [224, 224])\n", "\n", "# save this resized image to be used as input to the model\n", "io.imsave(\"./data/ILSVRC2012_test_00000004_224x224.jpg\", img)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "# load the resized image and convert it to Ybr format\n", "mean = np.array([0.485, 0.456, 0.406])\n", "std = np.array([0.229, 0.224, 0.225])\n", "img = Image.open(\"./data/ILSVRC2012_test_00000004_224x224.jpg\")\n", "img = np.array(img)\n", "img = img.astype(np.float64) / 255\n", "img -= mean\n", "img /= std\n", "img = img.transpose(2, 0, 1)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch-jit-export_predict = core.Net('torch-jit-export_predict')\n", "torch-jit-export_predict.Conv(['0', '1', '2'], ['152'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['152', '3', '4', '5', '6'], ['153'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['153'], ['154'])\n", "torch-jit-export_predict.Conv(['154', '8', '9'], ['155'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['155', '10', '11', '12', '13'], ['156'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['156'], ['157'])\n", "torch-jit-export_predict.MaxPool(['157'], ['158'], strides=[2, 2], pads=[0, 0, 0, 0], kernels=[2, 2])\n", "torch-jit-export_predict.Conv(['158', '15', '16'], ['159'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['159', '17', '18', '19', '20'], ['160'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['160'], ['161'])\n", "torch-jit-export_predict.Conv(['161', '22', '23'], ['162'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['162', '24', '25', '26', '27'], ['163'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['163'], ['164'])\n", "torch-jit-export_predict.MaxPool(['164'], ['165'], strides=[2, 2], pads=[0, 0, 0, 0], kernels=[2, 2])\n", "torch-jit-export_predict.Conv(['165', '29', '30'], ['166'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['166', '31', '32', '33', '34'], ['167'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['167'], ['168'])\n", "torch-jit-export_predict.Conv(['168', '36', '37'], ['169'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['169', '38', '39', '40', '41'], ['170'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['170'], ['171'])\n", "torch-jit-export_predict.Conv(['171', '43', '44'], ['172'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['172', '45', '46', '47', '48'], ['173'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['173'], ['174'])\n", "torch-jit-export_predict.MaxPool(['174'], ['175'], strides=[2, 2], pads=[0, 0, 0, 0], kernels=[2, 2])\n", "torch-jit-export_predict.Conv(['175', '50', '51'], ['176'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['176', '52', '53', '54', '55'], ['177'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['177'], ['178'])\n", "torch-jit-export_predict.Conv(['178', '57', '58'], ['179'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['179', '59', '60', '61', '62'], ['180'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['180'], ['181'])\n", "torch-jit-export_predict.Conv(['181', '64', '65'], ['182'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['182', '66', '67', '68', '69'], ['183'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['183'], ['184'])\n", "torch-jit-export_predict.MaxPool(['184'], ['185'], strides=[2, 2], pads=[0, 0, 0, 0], kernels=[2, 2])\n", "torch-jit-export_predict.Conv(['185', '71', '72'], ['186'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['186', '73', '74', '75', '76'], ['187'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['187'], ['188'])\n", "torch-jit-export_predict.Conv(['188', '78', '79'], ['189'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['189', '80', '81', '82', '83'], ['190'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['190'], ['191'])\n", "torch-jit-export_predict.Conv(['191', '85', '86'], ['192'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.SpatialBN(['192', '87', '88', '89', '90'], ['193'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Relu(['193'], ['194'])\n", "torch-jit-export_predict.Shape(['194'], ['196'])\n", "torch-jit-export_predict.Gather(['196', '195'], ['197'])\n", "torch-jit-export_predict.ExpandDims(['197'], ['199'], dims=[0])\n", "torch-jit-export_predict.Concat(['199', '200'], ['201', 'OC2_DUMMY_0'], axis=0)\n", "torch-jit-export_predict.Reshape(['194', '201'], ['202', 'OC2_DUMMY_1'])\n", "torch-jit-export_predict.FC(['202', '92', '93'], ['203'])\n", "torch-jit-export_predict.ExpandDims(['197'], ['207'], dims=[0])\n", "torch-jit-export_predict.Concat(['207', '208', '209', '210'], ['211', 'OC2_DUMMY_2'], axis=0)\n", "torch-jit-export_predict.Reshape(['203', '211'], ['212', 'OC2_DUMMY_3'])\n", "torch-jit-export_predict.Conv(['184', '94', '95'], ['213'], strides=[1, 1], pads=[0, 0, 0, 0], kernels=[1, 1], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['213'], ['214'])\n", "torch-jit-export_predict.Sigmoid(['212'], ['215'])\n", "torch-jit-export_predict.Concat(['214', '215'], ['216', 'OC2_DUMMY_4'], axis=1)\n", "torch-jit-export_predict.Conv(['216', '96', '97'], ['217'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Relu(['217'], ['218'])\n", "torch-jit-export_predict.SpatialBN(['218', '98', '99', '100', '101'], ['219'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['219', '103', '104'], ['220'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['220', '219'], ['221'])\n", "torch-jit-export_predict.Relu(['221'], ['222'])\n", "torch-jit-export_predict.SpatialBN(['222', '98', '99', '100', '101'], ['223'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['223', '103', '104'], ['224'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['224', '219'], ['225'])\n", "torch-jit-export_predict.Relu(['225'], ['226'])\n", "torch-jit-export_predict.SpatialBN(['226', '98', '99', '100', '101'], ['227'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['227', '103', '104'], ['228'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['228', '219'], ['229'])\n", "torch-jit-export_predict.Relu(['229'], ['230'])\n", "torch-jit-export_predict.SpatialBN(['230', '98', '99', '100', '101'], ['231'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['231', '105', '106'], ['232'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['232'], ['233'])\n", "torch-jit-export_predict.ConvTranspose(['233', '146', '147'], ['234'], dilations=[1, 1], group=1, kernels=[4, 4], pads=[1, 1, 1, 1], strides=[2, 2])\n", "torch-jit-export_predict.Conv(['174', '107', '108'], ['235'], strides=[1, 1], pads=[0, 0, 0, 0], kernels=[1, 1], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['235'], ['236'])\n", "torch-jit-export_predict.Sigmoid(['234'], ['237'])\n", "torch-jit-export_predict.Concat(['236', '237'], ['238', 'OC2_DUMMY_5'], axis=1)\n", "torch-jit-export_predict.Conv(['238', '109', '110'], ['239'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Relu(['239'], ['240'])\n", "torch-jit-export_predict.SpatialBN(['240', '111', '112', '113', '114'], ['241'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['241', '116', '117'], ['242'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['242', '241'], ['243'])\n", "torch-jit-export_predict.Relu(['243'], ['244'])\n", "torch-jit-export_predict.SpatialBN(['244', '111', '112', '113', '114'], ['245'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['245', '116', '117'], ['246'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['246', '241'], ['247'])\n", "torch-jit-export_predict.Relu(['247'], ['248'])\n", "torch-jit-export_predict.SpatialBN(['248', '111', '112', '113', '114'], ['249'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['249', '116', '117'], ['250'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['250', '241'], ['251'])\n", "torch-jit-export_predict.Relu(['251'], ['252'])\n", "torch-jit-export_predict.SpatialBN(['252', '111', '112', '113', '114'], ['253'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['253', '118', '119'], ['254'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['254'], ['255'])\n", "torch-jit-export_predict.ConvTranspose(['255', '148', '149'], ['256'], dilations=[1, 1], group=1, kernels=[4, 4], pads=[1, 1, 1, 1], strides=[2, 2])\n", "torch-jit-export_predict.Conv(['164', '120', '121'], ['257'], strides=[1, 1], pads=[0, 0, 0, 0], kernels=[1, 1], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['257'], ['258'])\n", "torch-jit-export_predict.Sigmoid(['256'], ['259'])\n", "torch-jit-export_predict.Concat(['258', '259'], ['260', 'OC2_DUMMY_6'], axis=1)\n", "torch-jit-export_predict.Conv(['260', '122', '123'], ['261'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Relu(['261'], ['262'])\n", "torch-jit-export_predict.SpatialBN(['262', '124', '125', '126', '127'], ['263'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['263', '129', '130'], ['264'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['264', '263'], ['265'])\n", "torch-jit-export_predict.Relu(['265'], ['266'])\n", "torch-jit-export_predict.SpatialBN(['266', '124', '125', '126', '127'], ['267'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['267', '129', '130'], ['268'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['268', '263'], ['269'])\n", "torch-jit-export_predict.Relu(['269'], ['270'])\n", "torch-jit-export_predict.SpatialBN(['270', '124', '125', '126', '127'], ['271'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['271', '129', '130'], ['272'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['272', '263'], ['273'])\n", "torch-jit-export_predict.Relu(['273'], ['274'])\n", "torch-jit-export_predict.SpatialBN(['274', '124', '125', '126', '127'], ['275'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['275', '131', '132'], ['276'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['276'], ['277'])\n", "torch-jit-export_predict.ConvTranspose(['277', '150', '151'], ['278'], dilations=[1, 1], group=1, kernels=[4, 4], pads=[1, 1, 1, 1], strides=[2, 2])\n", "torch-jit-export_predict.Conv(['157', '133', '134'], ['279'], strides=[1, 1], pads=[0, 0, 0, 0], kernels=[1, 1], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['279'], ['280'])\n", "torch-jit-export_predict.Sigmoid(['278'], ['281'])\n", "torch-jit-export_predict.Concat(['280', '281'], ['282', 'OC2_DUMMY_7'], axis=1)\n", "torch-jit-export_predict.Conv(['282', '135', '136'], ['283'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Relu(['283'], ['284'])\n", "torch-jit-export_predict.SpatialBN(['284', '137', '138', '139', '140'], ['285'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['285', '142', '143'], ['286'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['286', '285'], ['287'])\n", "torch-jit-export_predict.Relu(['287'], ['288'])\n", "torch-jit-export_predict.SpatialBN(['288', '137', '138', '139', '140'], ['289'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['289', '142', '143'], ['290'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['290', '285'], ['291'])\n", "torch-jit-export_predict.Relu(['291'], ['292'])\n", "torch-jit-export_predict.SpatialBN(['292', '137', '138', '139', '140'], ['293'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['293', '142', '143'], ['294'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Add(['294', '285'], ['295'])\n", "torch-jit-export_predict.Relu(['295'], ['296'])\n", "torch-jit-export_predict.SpatialBN(['296', '137', '138', '139', '140'], ['297'], momentum=1.0, epsilon=9.999999747378752e-06, is_test=1)\n", "torch-jit-export_predict.Conv(['297', '144', '145'], ['298'], strides=[1, 1], pads=[1, 1, 1, 1], kernels=[3, 3], group=1, dilations=[1, 1])\n", "torch-jit-export_predict.Sigmoid(['298'], ['299'])\n", "torch-jit-export_predict.Sigmoid(['212'], ['300'])\n", "torch-jit-export_predict.Sigmoid(['233'], ['301'])\n", "torch-jit-export_predict.Sigmoid(['255'], ['302'])\n", "torch-jit-export_predict.Sigmoid(['277'], ['303'])\n", "torch-jit-export_predict.Sigmoid(['299'], ['304'])\n", "Input blob: 0\n", "Output blob: 304\n" ] } ], "source": [ "# Let's run the mobile nets that we generated above so that caffe2 workspace is properly initialized\n", "workspace.RunNetOnce(init_net)\n", "workspace.RunNetOnce(predict_net)\n", "\n", "# Caffe2 has a nice net_printer to be able to inspect what the net looks like and identify\n", "# what our input and output blob names are.\n", "print(net_printer.to_string(predict_net))\n", "\n", "model_input_blob = predict_net.external_input[0]\n", "model_output_blob = predict_net.external_output[-1]\n", "print('Input blob: ', model_input_blob)\n", "print('Output blob: ', model_output_blob)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "# Now, let's also pass in the resized cat image for processing by the model.\n", "workspace.FeedBlob(model_input_blob, np.array(img)[np.newaxis, :, :, :].astype(np.float32))\n", "\n", "# run the predict_net to get the model output\n", "workspace.RunNetOnce(predict_net)\n", "\n", "# Now let's get the model output blob\n", "img_out = workspace.FetchBlob(model_output_blob)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(img_out[0, 0], cmap='gray')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }