{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Converting efficientnet-edgetpu from Tensorflow to ONNX" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setup some environment, download model source and pre-trained model:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "HOME = os.getcwd()\n", "MODEL = \"efficientnet-edgetpu-L\"\n", "os.environ['PYTHONPATH'] = os.path.join(HOME, \"tpu\")\n", "os.environ['MODEL'] = MODEL\n", "os.environ['CUDA_VISIBLE_DEVICES'] = \"\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!git clone https://github.com/tensorflow/tpu" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/gs/edge/tpu/models/official/efficientnet\n" ] } ], "source": [ "%cd {HOME}/tpu/models/official/efficientnet" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!wget https://storage.googleapis.com/cloud-tpu-checkpoints/efficientnet/$MODEL.tar.gz\n", "!tar zxf $MODEL.tar.gz\n", "!wget https://upload.wikimedia.org/wikipedia/commons/f/fe/Giant_Panda_in_Beijing_Zoo_1.JPG -O panda.jpg\n", "!wget https://storage.googleapis.com/cloud-tpu-checkpoints/efficientnet/eval_data/labels_map.txt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run a evaluation on tensorflow/cpu:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " -> top_0 (87.89%): giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca \n", " -> top_1 (0.89%): ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus \n", " -> top_2 (0.45%): American black bear, black bear, Ursus americanus, Euarctos americanus \n", " -> top_3 (0.34%): brown bear, bruin, Ursus arctos \n", " -> top_4 (0.18%): white wolf, Arctic wolf, Canis lupus tundrarum \n" ] } ], "source": [ "!python eval_ckpt_main.py --model_name=$MODEL --ckpt_dir=$MODEL --example_img=panda.jpg --labels_map_file=labels_map.txt --include_background_label" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets take a look at the pre-trained model:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The given SavedModel SignatureDef contains the following input(s):\r\n", " inputs['input'] tensor_info:\r\n", " dtype: DT_FLOAT\r\n", " shape: (1, 300, 300, 3)\r\n", " name: images:0\r\n", "The given SavedModel SignatureDef contains the following output(s):\r\n", " outputs['output'] tensor_info:\r\n", " dtype: DT_FLOAT\r\n", " shape: (1, 1001)\r\n", " name: Softmax:0\r\n", "Method name is: tensorflow/serving/predict\r\n" ] } ], "source": [ "!saved_model_cli show --dir $MODEL/saved_model/ --tag_set serve --signature_def serving_default" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Install and run tf2onnx directly on the saved_model:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install -U tf2onnx" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020-01-22 12:52:13,681 - WARNING - From /home/gs/tensorflow-onnx/tf2onnx/verbose_logging.py:72: The name tf.logging.set_verbosity is deprecated. Please use tf.compat.v1.logging.set_verbosity instead.\n", "\n", "2020-01-22 12:52:14.948374: E tensorflow/stream_executor/cuda/cuda_driver.cc:318] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected\n", "2020-01-22 12:52:17,258 - INFO - Using tensorflow=1.15.0, onnx=1.6.0, tf2onnx=1.6.0/342270\n", "2020-01-22 12:52:17,258 - INFO - Using opset \n", "2020-01-22 12:52:17,912 - INFO - Optimizing ONNX model\n", "2020-01-22 12:52:19,343 - INFO - After optimization: Add -72 (93->21), Const -17 (163->146), Identity -3 (3->0), Reshape -16 (16->0), Transpose -158 (160->2)\n", "2020-01-22 12:52:19,357 - INFO - \n", "2020-01-22 12:52:19,357 - INFO - Successfully converted TensorFlow model efficientnet-edgetpu-L/saved_model to ONNX\n", "2020-01-22 12:52:19,475 - INFO - ONNX model is saved at efficientnet-edgetpu-L.onnx\n" ] } ], "source": [ "!python -m tf2onnx.convert --opset 11 --fold_const --saved-model $MODEL/saved_model --output $MODEL.onnx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have the ONNX model we can write a quick demo using onnxruntime:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install onnxruntime" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import math\n", "import matplotlib.pyplot as plt\n", "import onnxruntime as rt\n", "import cv2\n", "import json\n", "\n", "labels = json.load(open(\"labels_map.txt\", \"r\"))\n", "\n", "\n", "def img_stats(a, name={}):\n", " return {\n", " \"name\": name,\n", " \"size\": a.shape,\n", " \"mean\": \"{:.2f}\".format(a.mean()),\n", " \"std\": \"{:.2f}\".format(a.std()),\n", " \"max\": a.max(),\n", " \"min\": a.min(),\n", " \"median\": \"{:.2f}\".format(np.median(a)),\n", " }\n", "\n", "\n", "def center_crop(img, out_height, out_width):\n", " height, width, _ = img.shape\n", " left = int((width - out_width) / 2)\n", " right = int((width + out_width) / 2)\n", " top = int((height - out_height) / 2)\n", " bottom = int((height + out_height) / 2)\n", " img = img[top:bottom, left:right]\n", " return img\n", "\n", "\n", "def resize_with_aspectratio(img, out_height, out_width, scale=87.5, inter_pol=cv2.INTER_LINEAR):\n", " height, width, _ = img.shape\n", " new_height = int(100. * out_height / scale)\n", " new_width = int(100. * out_width / scale)\n", " if height > width:\n", " w = new_width\n", " h = int(new_height * height / width)\n", " else:\n", " h = new_height\n", " w = int(new_width * width / height)\n", " img = cv2.resize(img, (w, h), interpolation=inter_pol)\n", " return img\n", "\n", "\n", "def pre_process_mobilenet(img, dims):\n", " output_height, output_width, _ = dims\n", " img = resize_with_aspectratio(img, output_height, output_width, inter_pol=cv2.INTER_LINEAR)\n", " img = center_crop(img, output_height, output_width)\n", " img = np.asarray(img, dtype='float32')\n", "\n", " img /= 255.0\n", " img -= 0.5\n", " img *= 2\n", " return img\n", "\n", "def pre_process_edgetpu(img, dims):\n", " output_height, output_width, _ = dims\n", " img = resize_with_aspectratio(img, output_height, output_width, inter_pol=cv2.INTER_LINEAR)\n", " img = center_crop(img, output_height, output_width)\n", " img = np.asarray(img, dtype='float32')\n", " img -= [127.0, 127.0, 127.0]\n", " img /= [128.0, 128.0, 128.0]\n", " return img\n", "\n", "\n", "# read the image\n", "fname = \"panda.jpg\"\n", "img = cv2.imread(fname)\n", "img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n", "\n", "# pre-process the image like mobilenet and resize it to 300x300\n", "img = pre_process_edgetpu(img, (300, 300, 3))\n", "plt.axis('off')\n", "plt.imshow(img)\n", "plt.show()\n", "\n", "# create a batch of 1 (that batch size is buned into the saved_model)\n", "img_batch = np.expand_dims(img, axis=0)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# load the model\n", "sess = rt.InferenceSession(MODEL + \".onnx\")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "389 giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca 0.9173779\n", "297 ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus 0.005915898\n", "296 American black bear, black bear, Ursus americanus, Euarctos americanus 0.0036560348\n", "295 brown bear, bruin, Ursus arctos 0.0026371442\n", "388 lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens 0.001314711\n" ] } ], "source": [ "# run inference and print results\n", "results = sess.run([\"Softmax:0\"], {\"images:0\": img_batch})[0]\n", "result = reversed(results[0].argsort()[-5:])\n", "# result = np.argmax(results, axis=1)\n", "for r in result:\n", " print(r, labels[str(r-1)], results[0][r])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }