+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"mask_rcnn_eval.ipynb","version":"0.3.2","provenance":[],"private_outputs":true,"collapsed_sections":[]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"V8-yl-s-WKMG","colab_type":"text"},"cell_type":"markdown","source":["# UE ROLL Blue speaker detection\n","A model trained to detect Blue UE roll blutooth speaker.\n","Only 16 images has been used for current training. Performace could be increased using more images."]},{"metadata":{"id":"1Z_8-XxaPLNX","colab_type":"text"},"cell_type":"markdown","source":["#Environment Setup"]},{"metadata":{"id":"ZT31NO9WGpRD","colab_type":"code","colab":{}},"cell_type":"code","source":["!apt-get install protobuf-compiler python-pil python-lxml python-tk\n","!pip install Cython\n","!pip install jupyter\n","!pip install matplotlib\n","\n","!git clone https://github.com/tensorflow/models.git\n","\n","%cd /content/models/research\n","\n","!protoc object_detection/protos/*.proto --python_out=.\n","\n","%set_env PYTHONPATH=/content/models/research:/content/models/research/slim\n","\n","!python object_detection/builders/model_builder_test.py"],"execution_count":0,"outputs":[]},{"metadata":{"id":"kFSqkTCdWKMI","colab_type":"text"},"cell_type":"markdown","source":["# Imports"]},{"metadata":{"id":"hV4P5gyTWKMI","colab_type":"code","colab":{}},"cell_type":"code","source":["import numpy as np\n","import os\n","import six.moves.urllib as urllib\n","import sys\n","import tarfile\n","import tensorflow as tf\n","import zipfile\n","\n","from collections import defaultdict\n","from io import StringIO\n","from matplotlib import pyplot as plt\n","from PIL import Image\n","\n","# This is needed since the notebook is stored in the object_detection folder.\n","sys.path.append(\"..\")\n","from object_detection.utils import ops as utils_ops\n","from object_detection.utils import label_map_util\n","from object_detection.utils import visualization_utils as vis_util\n","\n","# This is needed to display the images.\n","%matplotlib inline\n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"cfn_tRFOWKMO","colab_type":"text"},"cell_type":"markdown","source":["# Model preparation "]},{"metadata":{"id":"X_sEBLpVWKMQ","colab_type":"text"},"cell_type":"markdown","source":["## Variables\n","\n","Any model exported using the `export_inference_graph.py` tool can be loaded here simply by changing `PATH_TO_FROZEN_GRAPH` to point to a new .pb file. \n","\n","By default we use an \"SSD with Mobilenet\" model here. See the [detection model zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) for a list of other models that can be run out-of-the-box with varying speeds and accuracies."]},{"metadata":{"id":"VyPz_t8WWKMQ","colab_type":"code","colab":{}},"cell_type":"code","source":["\n","\n","# Path to frozen detection graph. This is the actual model that is used for the object detection.\n","PATH_TO_FROZEN_GRAPH = '/content/drive/learning/DL/projects/object_detection/multiple_object_mask/IG/frozen_inference_graph.pb'\n","\n","# List of the strings that is used to add correct label for each box.\n","PATH_TO_LABELS = '/content/drive/learning/DL/projects/object_detection/multiple_object_mask/dataset/label.pbtxt'\n","\n","#Number of classes\n","NUM_CLASSES = 2"],"execution_count":0,"outputs":[]},{"metadata":{"id":"YBcB9QHLWKMU","colab_type":"text"},"cell_type":"markdown","source":["## Load a (frozen) Tensorflow model into memory."]},{"metadata":{"id":"KezjCRVvWKMV","colab_type":"code","colab":{}},"cell_type":"code","source":["detection_graph = tf.Graph()\n","with detection_graph.as_default():\n"," od_graph_def = tf.GraphDef()\n"," with tf.gfile.GFile(PATH_TO_FROZEN_GRAPH, 'rb') as fid:\n"," serialized_graph = fid.read()\n"," od_graph_def.ParseFromString(serialized_graph)\n"," tf.import_graph_def(od_graph_def, name='')"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_1MVVTcLWKMW","colab_type":"text"},"cell_type":"markdown","source":["## Loading label map\n","Label maps map indices to category names, so that when our convolution network predicts `5`, we know that this corresponds to `airplane`. Here we use internal utility functions, but anything that returns a dictionary mapping integers to appropriate string labels would be fine"]},{"metadata":{"id":"hDbpHkiWWKMX","colab_type":"code","colab":{}},"cell_type":"code","source":["label_map = label_map_util.load_labelmap(PATH_TO_LABELS)\n","categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)\n","category_index = label_map_util.create_category_index(categories)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"EFsoUHvbWKMZ","colab_type":"text"},"cell_type":"markdown","source":["## Helper code"]},{"metadata":{"id":"aSlYc3JkWKMa","colab_type":"code","colab":{}},"cell_type":"code","source":["def load_image_into_numpy_array(image):\n"," (im_width, im_height) = image.size\n"," return np.array(image.getdata()).reshape(\n"," (im_height, im_width, 3)).astype(np.uint8)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"H0_1AGhrWKMc","colab_type":"text"},"cell_type":"markdown","source":["# Detection"]},{"metadata":{"id":"jG-zn5ykWKMd","colab_type":"code","colab":{}},"cell_type":"code","source":["# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.\n","PATH_TO_TEST_IMAGES_DIR = '/content/drive/learning/DL/projects/object_detection/multiple_object_mask/dataset/testImages'\n","TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 7) ]\n","\n","# Size, in inches, of the output images.\n","IMAGE_SIZE = (12, 8)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"92BHxzcNWKMf","colab_type":"code","colab":{}},"cell_type":"code","source":["def run_inference_for_single_image(image, graph):\n"," with graph.as_default():\n"," with tf.Session() as sess:\n"," # Get handles to input and output tensors\n"," ops = tf.get_default_graph().get_operations()\n"," all_tensor_names = {output.name for op in ops for output in op.outputs}\n"," tensor_dict = {}\n"," for key in [\n"," 'num_detections', 'detection_boxes', 'detection_scores',\n"," 'detection_classes', 'detection_masks'\n"," ]:\n"," tensor_name = key + ':0'\n"," if tensor_name in all_tensor_names:\n"," tensor_dict[key] = tf.get_default_graph().get_tensor_by_name(\n"," tensor_name)\n"," if 'detection_masks' in tensor_dict:\n"," # The following processing is only for single image\n"," detection_boxes = tf.squeeze(tensor_dict['detection_boxes'], [0])\n"," detection_masks = tf.squeeze(tensor_dict['detection_masks'], [0])\n"," # Reframe is required to translate mask from box coordinates to image coordinates and fit the image size.\n"," real_num_detection = tf.cast(tensor_dict['num_detections'][0], tf.int32)\n"," detection_boxes = tf.slice(detection_boxes, [0, 0], [real_num_detection, -1])\n"," detection_masks = tf.slice(detection_masks, [0, 0, 0], [real_num_detection, -1, -1])\n"," detection_masks_reframed = utils_ops.reframe_box_masks_to_image_masks(\n"," detection_masks, detection_boxes, image.shape[0], image.shape[1])\n"," detection_masks_reframed = tf.cast(\n"," tf.greater(detection_masks_reframed, 0.5), tf.uint8)\n"," # Follow the convention by adding back the batch dimension\n"," tensor_dict['detection_masks'] = tf.expand_dims(\n"," detection_masks_reframed, 0)\n"," image_tensor = tf.get_default_graph().get_tensor_by_name('image_tensor:0')\n","\n"," # Run inference\n"," output_dict = sess.run(tensor_dict,\n"," feed_dict={image_tensor: np.expand_dims(image, 0)})\n","\n"," # all outputs are float32 numpy arrays, so convert types as appropriate\n"," output_dict['num_detections'] = int(output_dict['num_detections'][0])\n"," output_dict['detection_classes'] = output_dict[\n"," 'detection_classes'][0].astype(np.uint8)\n"," output_dict['detection_boxes'] = output_dict['detection_boxes'][0]\n"," output_dict['detection_scores'] = output_dict['detection_scores'][0]\n"," if 'detection_masks' in output_dict:\n"," output_dict['detection_masks'] = output_dict['detection_masks'][0]\n"," return output_dict"],"execution_count":0,"outputs":[]},{"metadata":{"id":"3a5wMHN8WKMh","colab_type":"code","colab":{}},"cell_type":"code","source":["for image_path in TEST_IMAGE_PATHS:\n"," image = Image.open(image_path)\n"," # the array based representation of the image will be used later in order to prepare the\n"," # result image with boxes and labels on it.\n"," image_np = load_image_into_numpy_array(image)\n"," # Expand dimensions since the model expects images to have shape: [1, None, None, 3]\n"," image_np_expanded = np.expand_dims(image_np, axis=0)\n"," # Actual detection.\n"," output_dict = run_inference_for_single_image(image_np, detection_graph)\n"," # Visualization of the results of a detection.\n"," vis_util.visualize_boxes_and_labels_on_image_array(\n"," image_np,\n"," output_dict['detection_boxes'],\n"," output_dict['detection_classes'],\n"," output_dict['detection_scores'],\n"," category_index,\n"," instance_masks=output_dict.get('detection_masks'),\n"," use_normalized_coordinates=True,\n"," line_thickness=8)\n"," fig = plt.figure(figsize=IMAGE_SIZE)\n"," ax = fig.gca()\n"," ax.grid(False)\n"," plt.imshow(image_np)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"HycEbEKkztwM","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}
0 commit comments