Object Detection From TF1 Saved Model

This demo will take you through the steps of running an “out-of-the-box” TensorFlow 1 compatible detection model on a collection of images. More specifically, in this example we will be using the Saved Model Format to load the model.

Download the test images

First we will download the images that we will use throughout this tutorial. The code snippet shown bellow will download the test images from the TensorFlow Model Garden and save them inside the data/images folder.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'    # Suppress TensorFlow logging (1)
import pathlib
import tensorflow as tf

tf.get_logger().setLevel('ERROR')           # Suppress TensorFlow logging (2)

# Enable GPU dynamic memory allocation
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)

def download_images():
    base_url = 'https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/test_images/'
    filenames = ['image1.jpg', 'image2.jpg']
    image_paths = []
    for filename in filenames:
        image_path = tf.keras.utils.get_file(fname=filename,
                                            origin=base_url + filename,
                                            untar=False)
        image_path = pathlib.Path(image_path)
        image_paths.append(str(image_path))
    return image_paths

IMAGE_PATHS = download_images()

Download the model

The code snippet shown below is used to download the pre-trained object detection model we shall use to perform inference. The particular detection algorithm we will use is the SSD MobileNet v2. More models can be found in the TensorFlow 1 Detection Model Zoo. To use a different model you will need the URL name of the specific model. This can be done as follows:

  1. Right click on the Model name of the model you would like to use;

  2. Click on Copy link address to copy the download link of the model;

  3. Paste the link in a text editor of your choice. You should observe a link similar to download.tensorflow.org/models/object_detection/XXXXXXXXX.tar.gz;

  4. Copy the XXXXXXXXX part of the link and use it to replace the value of the MODEL_NAME variable in the code shown below;

For example, the download link for the model used below is: download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# Download and extract model
def download_model(model_name):
    base_url = 'http://download.tensorflow.org/models/object_detection/'
    model_file = model_name + '.tar.gz'
    model_dir = tf.keras.utils.get_file(fname=model_name,
                                        origin=base_url + model_file,
                                        untar=True)
    return str(model_dir)

MODEL_NAME = 'ssd_mobilenet_v2_coco_2018_03_29'
PATH_TO_MODEL_DIR = download_model(MODEL_NAME)

Out:

Downloading data from http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

     8192/187925923 [..............................] - ETA: 0s
    16384/187925923 [..............................] - ETA: 41:09
    32768/187925923 [..............................] - ETA: 25:46
    49152/187925923 [..............................] - ETA: 24:11
    90112/187925923 [..............................] - ETA: 15:23
   172032/187925923 [..............................] - ETA: 8:58
   253952/187925923 [..............................] - ETA: 7:55
   286720/187925923 [..............................] - ETA: 8:43
   507904/187925923 [..............................] - ETA: 5:13
   606208/187925923 [..............................] - ETA: 5:21
   696320/187925923 [..............................] - ETA: 4:59
   950272/187925923 [..............................] - ETA: 3:49
  1105920/187925923 [..............................] - ETA: 3:27
  1286144/187925923 [..............................] - ETA: 3:05
  1318912/187925923 [..............................] - ETA: 3:24
  1589248/187925923 [..............................] - ETA: 2:55
  1654784/187925923 [..............................] - ETA: 2:56
  1818624/187925923 [..............................] - ETA: 2:46
  1998848/187925923 [..............................] - ETA: 2:35
  2121728/187925923 [..............................] - ETA: 2:36
  2310144/187925923 [..............................] - ETA: 2:28
  2498560/187925923 [..............................] - ETA: 2:25
  2605056/187925923 [..............................] - ETA: 2:23
  2777088/187925923 [..............................] - ETA: 2:17
  2965504/187925923 [..............................] - ETA: 2:17
  3112960/187925923 [..............................] - ETA: 2:13
  3358720/187925923 [..............................] - ETA: 2:06
  3497984/187925923 [..............................] - ETA: 2:04
  3768320/187925923 [..............................] - ETA: 1:57
  3964928/187925923 [..............................] - ETA: 1:54
  4145152/187925923 [..............................] - ETA: 1:51
  4308992/187925923 [..............................] - ETA: 1:50
  4628480/187925923 [..............................] - ETA: 1:44
  4841472/187925923 [..............................] - ETA: 1:41
  4980736/187925923 [..............................] - ETA: 1:42
  5079040/187925923 [..............................] - ETA: 1:42
  5234688/187925923 [..............................] - ETA: 1:40
  5398528/187925923 [..............................] - ETA: 1:40
  5439488/187925923 [..............................] - ETA: 1:41
  5652480/187925923 [..............................] - ETA: 1:40
  5693440/187925923 [..............................] - ETA: 1:42
  5890048/187925923 [..............................] - ETA: 1:40
  6062080/187925923 [..............................] - ETA: 1:38
  6103040/187925923 [..............................] - ETA: 1:40
  6275072/187925923 [>.............................] - ETA: 1:39
  6447104/187925923 [>.............................] - ETA: 1:38
  6660096/187925923 [>.............................] - ETA: 1:36
  6864896/187925923 [>.............................] - ETA: 1:35
  7069696/187925923 [>.............................] - ETA: 1:33
  7299072/187925923 [>.............................] - ETA: 1:31
  7544832/187925923 [>.............................] - ETA: 1:30
  7716864/187925923 [>.............................] - ETA: 1:29
  7987200/187925923 [>.............................] - ETA: 1:28
  8232960/187925923 [>.............................] - ETA: 1:26
  8380416/187925923 [>.............................] - ETA: 1:26
  8708096/187925923 [>.............................] - ETA: 1:23
  8814592/187925923 [>.............................] - ETA: 1:24
  9060352/187925923 [>.............................] - ETA: 1:22
  9297920/187925923 [>.............................] - ETA: 1:21
  9551872/187925923 [>.............................] - ETA: 1:20
  9797632/187925923 [>.............................] - ETA: 1:19
 10035200/187925923 [>.............................] - ETA: 1:18
 10264576/187925923 [>.............................] - ETA: 1:17
 10543104/187925923 [>.............................] - ETA: 1:16
 10797056/187925923 [>.............................] - ETA: 1:15
 11026432/187925923 [>.............................] - ETA: 1:14
 11247616/187925923 [>.............................] - ETA: 1:13
 11608064/187925923 [>.............................] - ETA: 1:12
 11714560/187925923 [>.............................] - ETA: 1:12
 11927552/187925923 [>.............................] - ETA: 1:11
 12263424/187925923 [>.............................] - ETA: 1:10
 12566528/187925923 [=>............................] - ETA: 1:09
 12640256/187925923 [=>............................] - ETA: 1:09
 12918784/187925923 [=>............................] - ETA: 1:08
 13164544/187925923 [=>............................] - ETA: 1:08
 13549568/187925923 [=>............................] - ETA: 1:06
 13787136/187925923 [=>............................] - ETA: 1:06
 14131200/187925923 [=>............................] - ETA: 1:05
 14565376/187925923 [=>............................] - ETA: 1:03
 14704640/187925923 [=>............................] - ETA: 1:03
 14934016/187925923 [=>............................] - ETA: 1:03
 15163392/187925923 [=>............................] - ETA: 1:03
 15392768/187925923 [=>............................] - ETA: 1:02
 15605760/187925923 [=>............................] - ETA: 1:02
 15704064/187925923 [=>............................] - ETA: 1:03
 16015360/187925923 [=>............................] - ETA: 1:02
 16244736/187925923 [=>............................] - ETA: 1:02
 16416768/187925923 [=>............................] - ETA: 1:02
 16637952/187925923 [=>............................] - ETA: 1:01
 16883712/187925923 [=>............................] - ETA: 1:01
 17047552/187925923 [=>............................] - ETA: 1:02
 17342464/187925923 [=>............................] - ETA: 1:01
 17678336/187925923 [=>............................] - ETA: 1:00
 17924096/187925923 [=>............................] - ETA: 1:00
 18243584/187925923 [=>............................] - ETA: 59s
 18505728/187925923 [=>............................] - ETA: 59s
 18792448/187925923 [=>............................] - ETA: 58s
 19120128/187925923 [==>...........................] - ETA: 57s
 19406848/187925923 [==>...........................] - ETA: 57s
 19488768/187925923 [==>...........................] - ETA: 57s
 19718144/187925923 [==>...........................] - ETA: 57s
 19759104/187925923 [==>...........................] - ETA: 58s
 19865600/187925923 [==>...........................] - ETA: 58s
 20004864/187925923 [==>...........................] - ETA: 58s
 20488192/187925923 [==>...........................] - ETA: 57s
 20799488/187925923 [==>...........................] - ETA: 56s
 21053440/187925923 [==>...........................] - ETA: 56s
 21168128/187925923 [==>...........................] - ETA: 56s
 21438464/187925923 [==>...........................] - ETA: 56s
 21700608/187925923 [==>...........................] - ETA: 56s
 21815296/187925923 [==>...........................] - ETA: 56s
 21970944/187925923 [==>...........................] - ETA: 56s
 22085632/187925923 [==>...........................] - ETA: 56s
 22192128/187925923 [==>...........................] - ETA: 57s
 22396928/187925923 [==>...........................] - ETA: 57s
 22667264/187925923 [==>...........................] - ETA: 57s
 22716416/187925923 [==>...........................] - ETA: 58s
 23199744/187925923 [==>...........................] - ETA: 57s
 23437312/187925923 [==>...........................] - ETA: 56s
 23666688/187925923 [==>...........................] - ETA: 56s
 23838720/187925923 [==>...........................] - ETA: 56s
 24141824/187925923 [==>...........................] - ETA: 56s
 24354816/187925923 [==>...........................] - ETA: 55s
 24608768/187925923 [==>...........................] - ETA: 55s
 24616960/187925923 [==>...........................] - ETA: 56s
 24870912/187925923 [==>...........................] - ETA: 55s
 25124864/187925923 [===>..........................] - ETA: 55s
 25370624/187925923 [===>..........................] - ETA: 55s
 25575424/187925923 [===>..........................] - ETA: 55s
 25796608/187925923 [===>..........................] - ETA: 55s
 25968640/187925923 [===>..........................] - ETA: 56s
 26198016/187925923 [===>..........................] - ETA: 55s
 26443776/187925923 [===>..........................] - ETA: 55s
 26624000/187925923 [===>..........................] - ETA: 55s
 26763264/187925923 [===>..........................] - ETA: 55s
 26918912/187925923 [===>..........................] - ETA: 55s
 27074560/187925923 [===>..........................] - ETA: 55s
 27213824/187925923 [===>..........................] - ETA: 55s
 27385856/187925923 [===>..........................] - ETA: 55s
 27615232/187925923 [===>..........................] - ETA: 54s
 27860992/187925923 [===>..........................] - ETA: 54s
 28082176/187925923 [===>..........................] - ETA: 54s
 28336128/187925923 [===>..........................] - ETA: 54s
 28655616/187925923 [===>..........................] - ETA: 53s
 28925952/187925923 [===>..........................] - ETA: 53s
 29196288/187925923 [===>..........................] - ETA: 53s
 29491200/187925923 [===>..........................] - ETA: 52s
 29818880/187925923 [===>..........................] - ETA: 52s
 30007296/187925923 [===>..........................] - ETA: 52s
 30384128/187925923 [===>..........................] - ETA: 51s
 30769152/187925923 [===>..........................] - ETA: 51s
 31105024/187925923 [===>..........................] - ETA: 50s
 31432704/187925923 [====>.........................] - ETA: 50s
 31883264/187925923 [====>.........................] - ETA: 49s
 32161792/187925923 [====>.........................] - ETA: 49s
 32555008/187925923 [====>.........................] - ETA: 49s
 32808960/187925923 [====>.........................] - ETA: 49s
 33177600/187925923 [====>.........................] - ETA: 48s
 33366016/187925923 [====>.........................] - ETA: 48s
 33718272/187925923 [====>.........................] - ETA: 48s
 34037760/187925923 [====>.........................] - ETA: 48s
 34357248/187925923 [====>.........................] - ETA: 47s
 34463744/187925923 [====>.........................] - ETA: 47s
 34791424/187925923 [====>.........................] - ETA: 47s
 34955264/187925923 [====>.........................] - ETA: 47s
 35110912/187925923 [====>.........................] - ETA: 47s
 35381248/187925923 [====>.........................] - ETA: 47s
 35586048/187925923 [====>.........................] - ETA: 47s
 35840000/187925923 [====>.........................] - ETA: 47s
 35995648/187925923 [====>.........................] - ETA: 47s
 36216832/187925923 [====>.........................] - ETA: 47s
 36503552/187925923 [====>.........................] - ETA: 46s
 36773888/187925923 [====>.........................] - ETA: 46s
 37003264/187925923 [====>.........................] - ETA: 46s
 37036032/187925923 [====>.........................] - ETA: 47s
 37412864/187925923 [====>.........................] - ETA: 46s
 37724160/187925923 [=====>........................] - ETA: 46s
 38019072/187925923 [=====>........................] - ETA: 46s
 38330368/187925923 [=====>........................] - ETA: 45s
 38608896/187925923 [=====>........................] - ETA: 45s
 38903808/187925923 [=====>........................] - ETA: 45s
 39288832/187925923 [=====>........................] - ETA: 45s
 39641088/187925923 [=====>........................] - ETA: 44s
 40058880/187925923 [=====>........................] - ETA: 44s
 40476672/187925923 [=====>........................] - ETA: 44s
 40697856/187925923 [=====>........................] - ETA: 44s
 41123840/187925923 [=====>........................] - ETA: 43s
 41476096/187925923 [=====>........................] - ETA: 43s
 41844736/187925923 [=====>........................] - ETA: 43s
 42188800/187925923 [=====>........................] - ETA: 42s
 42549248/187925923 [=====>........................] - ETA: 42s
 42696704/187925923 [=====>........................] - ETA: 42s
 42999808/187925923 [=====>........................] - ETA: 42s
 43229184/187925923 [=====>........................] - ETA: 42s
 43540480/187925923 [=====>........................] - ETA: 41s
 43794432/187925923 [=====>........................] - ETA: 41s
 44130304/187925923 [======>.......................] - ETA: 41s
 44138496/187925923 [======>.......................] - ETA: 41s
 44482560/187925923 [======>.......................] - ETA: 41s
 44900352/187925923 [======>.......................] - ETA: 41s
 45146112/187925923 [======>.......................] - ETA: 41s
 45531136/187925923 [======>.......................] - ETA: 40s
 45654016/187925923 [======>.......................] - ETA: 40s
 45940736/187925923 [======>.......................] - ETA: 40s
 46161920/187925923 [======>.......................] - ETA: 40s
 46424064/187925923 [======>.......................] - ETA: 40s
 46727168/187925923 [======>.......................] - ETA: 40s
 47177728/187925923 [======>.......................] - ETA: 39s
 47316992/187925923 [======>.......................] - ETA: 40s
 47751168/187925923 [======>.......................] - ETA: 40s
 48070656/187925923 [======>.......................] - ETA: 39s
 48160768/187925923 [======>.......................] - ETA: 39s
 48349184/187925923 [======>.......................] - ETA: 39s
 48611328/187925923 [======>.......................] - ETA: 39s
 48766976/187925923 [======>.......................] - ETA: 39s
 49070080/187925923 [======>.......................] - ETA: 39s
 49250304/187925923 [======>.......................] - ETA: 39s
 49512448/187925923 [======>.......................] - ETA: 39s
 49569792/187925923 [======>.......................] - ETA: 39s
 49864704/187925923 [======>.......................] - ETA: 39s
 50044928/187925923 [======>.......................] - ETA: 39s
 50200576/187925923 [=======>......................] - ETA: 39s
 50479104/187925923 [=======>......................] - ETA: 39s
 50790400/187925923 [=======>......................] - ETA: 39s
 51011584/187925923 [=======>......................] - ETA: 39s
 51175424/187925923 [=======>......................] - ETA: 39s
 51232768/187925923 [=======>......................] - ETA: 39s
 51421184/187925923 [=======>......................] - ETA: 39s
 51585024/187925923 [=======>......................] - ETA: 39s
 51863552/187925923 [=======>......................] - ETA: 38s
 52051968/187925923 [=======>......................] - ETA: 38s
 52248576/187925923 [=======>......................] - ETA: 38s
 52371456/187925923 [=======>......................] - ETA: 38s
 52576256/187925923 [=======>......................] - ETA: 38s
 52854784/187925923 [=======>......................] - ETA: 38s
 53018624/187925923 [=======>......................] - ETA: 38s
 53403648/187925923 [=======>......................] - ETA: 38s
 53583872/187925923 [=======>......................] - ETA: 38s
 53772288/187925923 [=======>......................] - ETA: 38s
 54026240/187925923 [=======>......................] - ETA: 38s
 54304768/187925923 [=======>......................] - ETA: 38s
 54616064/187925923 [=======>......................] - ETA: 38s
 54812672/187925923 [=======>......................] - ETA: 38s
 55025664/187925923 [=======>......................] - ETA: 37s
 55173120/187925923 [=======>......................] - ETA: 37s
 55418880/187925923 [=======>......................] - ETA: 37s
 55697408/187925923 [=======>......................] - ETA: 37s
 55918592/187925923 [=======>......................] - ETA: 37s
 56049664/187925923 [=======>......................] - ETA: 37s
 56360960/187925923 [=======>......................] - ETA: 37s
 56582144/187925923 [========>.....................] - ETA: 37s
 56770560/187925923 [========>.....................] - ETA: 37s
 56942592/187925923 [========>.....................] - ETA: 37s
 57237504/187925923 [========>.....................] - ETA: 37s
 57344000/187925923 [========>.....................] - ETA: 37s
 57393152/187925923 [========>.....................] - ETA: 37s
 57819136/187925923 [========>.....................] - ETA: 36s
 57917440/187925923 [========>.....................] - ETA: 37s
 58187776/187925923 [========>.....................] - ETA: 36s
 58359808/187925923 [========>.....................] - ETA: 36s
 58818560/187925923 [========>.....................] - ETA: 36s
 58867712/187925923 [========>.....................] - ETA: 36s
 58982400/187925923 [========>.....................] - ETA: 36s
 59097088/187925923 [========>.....................] - ETA: 36s
 59105280/187925923 [========>.....................] - ETA: 36s
 59441152/187925923 [========>.....................] - ETA: 36s
 59604992/187925923 [========>.....................] - ETA: 36s
 59785216/187925923 [========>.....................] - ETA: 36s
 60022784/187925923 [========>.....................] - ETA: 36s
 60153856/187925923 [========>.....................] - ETA: 36s
 60448768/187925923 [========>.....................] - ETA: 36s
 60743680/187925923 [========>.....................] - ETA: 36s
 60899328/187925923 [========>.....................] - ETA: 36s
 61005824/187925923 [========>.....................] - ETA: 36s
 61267968/187925923 [========>.....................] - ETA: 36s
 61497344/187925923 [========>.....................] - ETA: 36s
 61677568/187925923 [========>.....................] - ETA: 36s
 61972480/187925923 [========>.....................] - ETA: 35s
 62095360/187925923 [========>.....................] - ETA: 35s
 62283776/187925923 [========>.....................] - ETA: 36s
 62529536/187925923 [========>.....................] - ETA: 35s
 62791680/187925923 [=========>....................] - ETA: 35s
 63004672/187925923 [=========>....................] - ETA: 35s
 63373312/187925923 [=========>....................] - ETA: 35s
 63782912/187925923 [=========>....................] - ETA: 35s
 64102400/187925923 [=========>....................] - ETA: 35s
 64397312/187925923 [=========>....................] - ETA: 34s
 64634880/187925923 [=========>....................] - ETA: 34s
 64897024/187925923 [=========>....................] - ETA: 34s
 65200128/187925923 [=========>....................] - ETA: 34s
 65347584/187925923 [=========>....................] - ETA: 34s
 65568768/187925923 [=========>....................] - ETA: 34s
 65716224/187925923 [=========>....................] - ETA: 34s
 65921024/187925923 [=========>....................] - ETA: 34s
 66093056/187925923 [=========>....................] - ETA: 34s
 66281472/187925923 [=========>....................] - ETA: 34s
 66453504/187925923 [=========>....................] - ETA: 34s
 66617344/187925923 [=========>....................] - ETA: 34s
 66797568/187925923 [=========>....................] - ETA: 34s
 66936832/187925923 [=========>....................] - ETA: 34s
 67092480/187925923 [=========>....................] - ETA: 34s
 67346432/187925923 [=========>....................] - ETA: 34s
 67641344/187925923 [=========>....................] - ETA: 33s
 67870720/187925923 [=========>....................] - ETA: 33s
 68182016/187925923 [=========>....................] - ETA: 33s
 68337664/187925923 [=========>....................] - ETA: 33s
 68542464/187925923 [=========>....................] - ETA: 33s
 68780032/187925923 [=========>....................] - ETA: 33s
 68984832/187925923 [==========>...................] - ETA: 33s
 69214208/187925923 [==========>...................] - ETA: 33s
 69296128/187925923 [==========>...................] - ETA: 33s
 69541888/187925923 [==========>...................] - ETA: 33s
 69763072/187925923 [==========>...................] - ETA: 33s
 70123520/187925923 [==========>...................] - ETA: 33s
 70295552/187925923 [==========>...................] - ETA: 33s
 70631424/187925923 [==========>...................] - ETA: 33s
 70868992/187925923 [==========>...................] - ETA: 33s
 71008256/187925923 [==========>...................] - ETA: 32s
 71196672/187925923 [==========>...................] - ETA: 32s
 71360512/187925923 [==========>...................] - ETA: 32s
 71524352/187925923 [==========>...................] - ETA: 32s
 71720960/187925923 [==========>...................] - ETA: 32s
 71884800/187925923 [==========>...................] - ETA: 32s
 71999488/187925923 [==========>...................] - ETA: 32s
 72179712/187925923 [==========>...................] - ETA: 32s
 72335360/187925923 [==========>...................] - ETA: 32s
 72507392/187925923 [==========>...................] - ETA: 32s
 72687616/187925923 [==========>...................] - ETA: 32s
 73015296/187925923 [==========>...................] - ETA: 32s
 73269248/187925923 [==========>...................] - ETA: 32s
 73408512/187925923 [==========>...................] - ETA: 32s
 73875456/187925923 [==========>...................] - ETA: 32s
 74088448/187925923 [==========>...................] - ETA: 32s
 74432512/187925923 [==========>...................] - ETA: 31s
 74743808/187925923 [==========>...................] - ETA: 31s
 75038720/187925923 [==========>...................] - ETA: 31s
 75431936/187925923 [===========>..................] - ETA: 31s
 75808768/187925923 [===========>..................] - ETA: 31s
 76136448/187925923 [===========>..................] - ETA: 31s
 76431360/187925923 [===========>..................] - ETA: 31s
 76611584/187925923 [===========>..................] - ETA: 31s
 76922880/187925923 [===========>..................] - ETA: 30s
 77217792/187925923 [===========>..................] - ETA: 30s
 77455360/187925923 [===========>..................] - ETA: 30s
 77684736/187925923 [===========>..................] - ETA: 30s
 77701120/187925923 [===========>..................] - ETA: 30s
 77987840/187925923 [===========>..................] - ETA: 30s
 78299136/187925923 [===========>..................] - ETA: 30s
 78520320/187925923 [===========>..................] - ETA: 30s
 78798848/187925923 [===========>..................] - ETA: 30s
 79020032/187925923 [===========>..................] - ETA: 30s
 79192064/187925923 [===========>..................] - ETA: 30s
 79314944/187925923 [===========>..................] - ETA: 30s
 79380480/187925923 [===========>..................] - ETA: 30s
 79437824/187925923 [===========>..................] - ETA: 30s
 79749120/187925923 [===========>..................] - ETA: 30s
 80117760/187925923 [===========>..................] - ETA: 30s
 80412672/187925923 [===========>..................] - ETA: 30s
 80707584/187925923 [===========>..................] - ETA: 30s
 80986112/187925923 [===========>..................] - ETA: 29s
 81223680/187925923 [===========>..................] - ETA: 29s
 81461248/187925923 [============>.................] - ETA: 29s
 81649664/187925923 [============>.................] - ETA: 29s
 81838080/187925923 [============>.................] - ETA: 29s
 81944576/187925923 [============>.................] - ETA: 29s
 82305024/187925923 [============>.................] - ETA: 29s
 82542592/187925923 [============>.................] - ETA: 29s
 82755584/187925923 [============>.................] - ETA: 29s
 82919424/187925923 [============>.................] - ETA: 29s
 83410944/187925923 [============>.................] - ETA: 29s
 83419136/187925923 [============>.................] - ETA: 29s
 83427328/187925923 [============>.................] - ETA: 29s
 83795968/187925923 [============>.................] - ETA: 29s
 84000768/187925923 [============>.................] - ETA: 29s
 84197376/187925923 [============>.................] - ETA: 29s
 84385792/187925923 [============>.................] - ETA: 29s
 84770816/187925923 [============>.................] - ETA: 29s
 84885504/187925923 [============>.................] - ETA: 29s
 85114880/187925923 [============>.................] - ETA: 28s
 85303296/187925923 [============>.................] - ETA: 28s
 85565440/187925923 [============>.................] - ETA: 29s
 85811200/187925923 [============>.................] - ETA: 29s
 86065152/187925923 [============>.................] - ETA: 29s
 86736896/187925923 [============>.................] - ETA: 28s
 87007232/187925923 [============>.................] - ETA: 28s
 87465984/187925923 [============>.................] - ETA: 28s
 87703552/187925923 [=============>................] - ETA: 28s
 87982080/187925923 [=============>................] - ETA: 28s
 88293376/187925923 [=============>................] - ETA: 28s
 88604672/187925923 [=============>................] - ETA: 27s
 88915968/187925923 [=============>................] - ETA: 27s
 89202688/187925923 [=============>................] - ETA: 27s
 89505792/187925923 [=============>................] - ETA: 27s
 89587712/187925923 [=============>................] - ETA: 27s
 89751552/187925923 [=============>................] - ETA: 27s
 89825280/187925923 [=============>................] - ETA: 27s
 89874432/187925923 [=============>................] - ETA: 27s
 90071040/187925923 [=============>................] - ETA: 27s
 90210304/187925923 [=============>................] - ETA: 27s
 90333184/187925923 [=============>................] - ETA: 27s
 90701824/187925923 [=============>................] - ETA: 27s
 90972160/187925923 [=============>................] - ETA: 27s
 91168768/187925923 [=============>................] - ETA: 27s
 91439104/187925923 [=============>................] - ETA: 27s
 91627520/187925923 [=============>................] - ETA: 27s
 91865088/187925923 [=============>................] - ETA: 27s
 92135424/187925923 [=============>................] - ETA: 26s
 92332032/187925923 [=============>................] - ETA: 26s
 92651520/187925923 [=============>................] - ETA: 26s
 92938240/187925923 [=============>................] - ETA: 26s
 93290496/187925923 [=============>................] - ETA: 26s
 93552640/187925923 [=============>................] - ETA: 26s
 93765632/187925923 [=============>................] - ETA: 26s
 94027776/187925923 [==============>...............] - ETA: 26s
 94420992/187925923 [==============>...............] - ETA: 26s
 94674944/187925923 [==============>...............] - ETA: 26s
 95043584/187925923 [==============>...............] - ETA: 26s
 95412224/187925923 [==============>...............] - ETA: 25s
 95690752/187925923 [==============>...............] - ETA: 25s
 96018432/187925923 [==============>...............] - ETA: 25s
 96280576/187925923 [==============>...............] - ETA: 25s
 96632832/187925923 [==============>...............] - ETA: 25s
 96985088/187925923 [==============>...............] - ETA: 25s
 97304576/187925923 [==============>...............] - ETA: 25s
 97640448/187925923 [==============>...............] - ETA: 25s
 97968128/187925923 [==============>...............] - ETA: 24s
 98312192/187925923 [==============>...............] - ETA: 24s
 98566144/187925923 [==============>...............] - ETA: 24s
 98942976/187925923 [==============>...............] - ETA: 24s
 99057664/187925923 [==============>...............] - ETA: 24s
 99254272/187925923 [==============>...............] - ETA: 24s
 99532800/187925923 [==============>...............] - ETA: 24s
 99639296/187925923 [==============>...............] - ETA: 24s
 99753984/187925923 [==============>...............] - ETA: 24s
 99819520/187925923 [==============>...............] - ETA: 24s
 99901440/187925923 [==============>...............] - ETA: 24s
100048896/187925923 [==============>...............] - ETA: 24s
100237312/187925923 [===============>..............] - ETA: 24s
100343808/187925923 [===============>..............] - ETA: 24s
100548608/187925923 [===============>..............] - ETA: 24s
100720640/187925923 [===============>..............] - ETA: 24s
100843520/187925923 [===============>..............] - ETA: 24s
101064704/187925923 [===============>..............] - ETA: 24s
101277696/187925923 [===============>..............] - ETA: 24s
101466112/187925923 [===============>..............] - ETA: 24s
101629952/187925923 [===============>..............] - ETA: 24s
101842944/187925923 [===============>..............] - ETA: 24s
101974016/187925923 [===============>..............] - ETA: 24s
102187008/187925923 [===============>..............] - ETA: 23s
102375424/187925923 [===============>..............] - ETA: 23s
102563840/187925923 [===============>..............] - ETA: 23s
102785024/187925923 [===============>..............] - ETA: 23s
102957056/187925923 [===============>..............] - ETA: 23s
103096320/187925923 [===============>..............] - ETA: 23s
103137280/187925923 [===============>..............] - ETA: 23s
103145472/187925923 [===============>..............] - ETA: 23s
103268352/187925923 [===============>..............] - ETA: 23s
103424000/187925923 [===============>..............] - ETA: 23s
103497728/187925923 [===============>..............] - ETA: 23s
103620608/187925923 [===============>..............] - ETA: 23s
103809024/187925923 [===============>..............] - ETA: 23s
104071168/187925923 [===============>..............] - ETA: 23s
104202240/187925923 [===============>..............] - ETA: 23s
104407040/187925923 [===============>..............] - ETA: 23s
104554496/187925923 [===============>..............] - ETA: 23s
104644608/187925923 [===============>..............] - ETA: 23s
104808448/187925923 [===============>..............] - ETA: 23s
105013248/187925923 [===============>..............] - ETA: 23s
105193472/187925923 [===============>..............] - ETA: 23s
105259008/187925923 [===============>..............] - ETA: 23s
105406464/187925923 [===============>..............] - ETA: 23s
105627648/187925923 [===============>..............] - ETA: 23s
105807872/187925923 [===============>..............] - ETA: 23s
105963520/187925923 [===============>..............] - ETA: 23s
106094592/187925923 [===============>..............] - ETA: 23s
106242048/187925923 [===============>..............] - ETA: 23s
106471424/187925923 [===============>..............] - ETA: 23s
106651648/187925923 [================>.............] - ETA: 23s
106856448/187925923 [================>.............] - ETA: 23s
107044864/187925923 [================>.............] - ETA: 23s
107175936/187925923 [================>.............] - ETA: 23s
107470848/187925923 [================>.............] - ETA: 23s
107487232/187925923 [================>.............] - ETA: 23s
107544576/187925923 [================>.............] - ETA: 23s
107626496/187925923 [================>.............] - ETA: 23s
107757568/187925923 [================>.............] - ETA: 23s
108142592/187925923 [================>.............] - ETA: 23s
108445696/187925923 [================>.............] - ETA: 23s
108535808/187925923 [================>.............] - ETA: 23s
108781568/187925923 [================>.............] - ETA: 23s
109125632/187925923 [================>.............] - ETA: 22s
109387776/187925923 [================>.............] - ETA: 22s
109764608/187925923 [================>.............] - ETA: 22s
109969408/187925923 [================>.............] - ETA: 22s
110182400/187925923 [================>.............] - ETA: 22s
110469120/187925923 [================>.............] - ETA: 22s
110772224/187925923 [================>.............] - ETA: 22s
111083520/187925923 [================>.............] - ETA: 22s
111321088/187925923 [================>.............] - ETA: 22s
111624192/187925923 [================>.............] - ETA: 22s
111919104/187925923 [================>.............] - ETA: 22s
112115712/187925923 [================>.............] - ETA: 22s
112402432/187925923 [================>.............] - ETA: 21s
112467968/187925923 [================>.............] - ETA: 21s
112869376/187925923 [=================>............] - ETA: 21s
113139712/187925923 [=================>............] - ETA: 21s
113295360/187925923 [=================>............] - ETA: 21s
113557504/187925923 [=================>............] - ETA: 21s
113786880/187925923 [=================>............] - ETA: 21s
114065408/187925923 [=================>............] - ETA: 21s
114212864/187925923 [=================>............] - ETA: 21s
114475008/187925923 [=================>............] - ETA: 21s
114696192/187925923 [=================>............] - ETA: 21s
114868224/187925923 [=================>............] - ETA: 21s
114974720/187925923 [=================>............] - ETA: 21s
115081216/187925923 [=================>............] - ETA: 21s
115187712/187925923 [=================>............] - ETA: 21s
115195904/187925923 [=================>............] - ETA: 21s
115490816/187925923 [=================>............] - ETA: 21s
115621888/187925923 [=================>............] - ETA: 21s
115736576/187925923 [=================>............] - ETA: 21s
115900416/187925923 [=================>............] - ETA: 21s
116039680/187925923 [=================>............] - ETA: 21s
116178944/187925923 [=================>............] - ETA: 21s
116391936/187925923 [=================>............] - ETA: 20s
116523008/187925923 [=================>............] - ETA: 20s
116670464/187925923 [=================>............] - ETA: 20s
116736000/187925923 [=================>............] - ETA: 20s
116957184/187925923 [=================>............] - ETA: 20s
117145600/187925923 [=================>............] - ETA: 20s
117366784/187925923 [=================>............] - ETA: 20s
117579776/187925923 [=================>............] - ETA: 20s
117833728/187925923 [=================>............] - ETA: 20s
118071296/187925923 [=================>............] - ETA: 20s
118349824/187925923 [=================>............] - ETA: 20s
118661120/187925923 [=================>............] - ETA: 20s
119021568/187925923 [==================>...........] - ETA: 20s
119234560/187925923 [==================>...........] - ETA: 20s
119619584/187925923 [==================>...........] - ETA: 19s
119857152/187925923 [==================>...........] - ETA: 19s
120143872/187925923 [==================>...........] - ETA: 19s
120471552/187925923 [==================>...........] - ETA: 19s
120766464/187925923 [==================>...........] - ETA: 19s
121102336/187925923 [==================>...........] - ETA: 19s
121397248/187925923 [==================>...........] - ETA: 19s
121716736/187925923 [==================>...........] - ETA: 19s
122052608/187925923 [==================>...........] - ETA: 19s
122380288/187925923 [==================>...........] - ETA: 18s
122560512/187925923 [==================>...........] - ETA: 18s
123002880/187925923 [==================>...........] - ETA: 18s
123248640/187925923 [==================>...........] - ETA: 18s
123592704/187925923 [==================>...........] - ETA: 18s
123928576/187925923 [==================>...........] - ETA: 18s
124207104/187925923 [==================>...........] - ETA: 18s
124510208/187925923 [==================>...........] - ETA: 18s
124903424/187925923 [==================>...........] - ETA: 18s
125075456/187925923 [==================>...........] - ETA: 18s
125321216/187925923 [===================>..........] - ETA: 17s
125583360/187925923 [===================>..........] - ETA: 17s
125902848/187925923 [===================>..........] - ETA: 17s
126222336/187925923 [===================>..........] - ETA: 17s
126590976/187925923 [===================>..........] - ETA: 17s
126779392/187925923 [===================>..........] - ETA: 17s
126976000/187925923 [===================>..........] - ETA: 17s
127180800/187925923 [===================>..........] - ETA: 17s
127418368/187925923 [===================>..........] - ETA: 17s
127688704/187925923 [===================>..........] - ETA: 17s
127942656/187925923 [===================>..........] - ETA: 17s
128065536/187925923 [===================>..........] - ETA: 17s
128393216/187925923 [===================>..........] - ETA: 16s
128630784/187925923 [===================>..........] - ETA: 16s
128843776/187925923 [===================>..........] - ETA: 16s
129056768/187925923 [===================>..........] - ETA: 16s
129138688/187925923 [===================>..........] - ETA: 16s
129384448/187925923 [===================>..........] - ETA: 16s
129613824/187925923 [===================>..........] - ETA: 16s
129785856/187925923 [===================>..........] - ETA: 16s
130260992/187925923 [===================>..........] - ETA: 16s
130482176/187925923 [===================>..........] - ETA: 16s
130703360/187925923 [===================>..........] - ETA: 16s
130867200/187925923 [===================>..........] - ETA: 16s
131072000/187925923 [===================>..........] - ETA: 16s
131334144/187925923 [===================>..........] - ETA: 16s
131571712/187925923 [====================>.........] - ETA: 16s
131768320/187925923 [====================>.........] - ETA: 16s
131817472/187925923 [====================>.........] - ETA: 16s
131915776/187925923 [====================>.........] - ETA: 16s
132161536/187925923 [====================>.........] - ETA: 15s
132333568/187925923 [====================>.........] - ETA: 15s
132571136/187925923 [====================>.........] - ETA: 15s
132792320/187925923 [====================>.........] - ETA: 15s
133070848/187925923 [====================>.........] - ETA: 15s
133300224/187925923 [====================>.........] - ETA: 15s
133562368/187925923 [====================>.........] - ETA: 15s
133898240/187925923 [====================>.........] - ETA: 15s
134144000/187925923 [====================>.........] - ETA: 15s
134381568/187925923 [====================>.........] - ETA: 15s
134709248/187925923 [====================>.........] - ETA: 15s
135020544/187925923 [====================>.........] - ETA: 15s
135315456/187925923 [====================>.........] - ETA: 14s
135651328/187925923 [====================>.........] - ETA: 14s
135880704/187925923 [====================>.........] - ETA: 14s
136224768/187925923 [====================>.........] - ETA: 14s
136421376/187925923 [====================>.........] - ETA: 14s
136650752/187925923 [====================>.........] - ETA: 14s
136970240/187925923 [====================>.........] - ETA: 14s
137109504/187925923 [====================>.........] - ETA: 14s
137355264/187925923 [====================>.........] - ETA: 14s
137609216/187925923 [====================>.........] - ETA: 14s
137666560/187925923 [====================>.........] - ETA: 14s
137781248/187925923 [====================>.........] - ETA: 14s
137895936/187925923 [=====================>........] - ETA: 14s
138092544/187925923 [=====================>........] - ETA: 14s
138346496/187925923 [=====================>........] - ETA: 14s
138649600/187925923 [=====================>........] - ETA: 14s
138895360/187925923 [=====================>........] - ETA: 13s
139157504/187925923 [=====================>........] - ETA: 13s
139501568/187925923 [=====================>........] - ETA: 13s
139739136/187925923 [=====================>........] - ETA: 13s
140091392/187925923 [=====================>........] - ETA: 13s
140361728/187925923 [=====================>........] - ETA: 13s
140632064/187925923 [=====================>........] - ETA: 13s
140935168/187925923 [=====================>........] - ETA: 13s
141164544/187925923 [=====================>........] - ETA: 13s
141508608/187925923 [=====================>........] - ETA: 13s
141852672/187925923 [=====================>........] - ETA: 13s
141991936/187925923 [=====================>........] - ETA: 13s
142065664/187925923 [=====================>........] - ETA: 13s
142229504/187925923 [=====================>........] - ETA: 13s
142491648/187925923 [=====================>........] - ETA: 12s
142647296/187925923 [=====================>........] - ETA: 12s
142770176/187925923 [=====================>........] - ETA: 12s
142983168/187925923 [=====================>........] - ETA: 12s
143179776/187925923 [=====================>........] - ETA: 12s
143507456/187925923 [=====================>........] - ETA: 12s
143736832/187925923 [=====================>........] - ETA: 12s
144080896/187925923 [======================>.......] - ETA: 12s
144269312/187925923 [======================>.......] - ETA: 12s
144564224/187925923 [======================>.......] - ETA: 12s
144744448/187925923 [======================>.......] - ETA: 12s
144982016/187925923 [======================>.......] - ETA: 12s
145235968/187925923 [======================>.......] - ETA: 12s
145612800/187925923 [======================>.......] - ETA: 11s
145702912/187925923 [======================>.......] - ETA: 11s
145891328/187925923 [======================>.......] - ETA: 11s
146104320/187925923 [======================>.......] - ETA: 11s
146112512/187925923 [======================>.......] - ETA: 11s
146235392/187925923 [======================>.......] - ETA: 11s
146546688/187925923 [======================>.......] - ETA: 11s
146743296/187925923 [======================>.......] - ETA: 11s
146972672/187925923 [======================>.......] - ETA: 11s
147234816/187925923 [======================>.......] - ETA: 11s
147472384/187925923 [======================>.......] - ETA: 11s
147775488/187925923 [======================>.......] - ETA: 11s
147963904/187925923 [======================>.......] - ETA: 11s
148201472/187925923 [======================>.......] - ETA: 11s
148422656/187925923 [======================>.......] - ETA: 11s
148594688/187925923 [======================>.......] - ETA: 11s
148758528/187925923 [======================>.......] - ETA: 11s
148987904/187925923 [======================>.......] - ETA: 11s
149069824/187925923 [======================>.......] - ETA: 11s
149225472/187925923 [======================>.......] - ETA: 11s
149512192/187925923 [======================>.......] - ETA: 10s
149749760/187925923 [======================>.......] - ETA: 10s
149790720/187925923 [======================>.......] - ETA: 10s
150044672/187925923 [======================>.......] - ETA: 10s
150290432/187925923 [======================>.......] - ETA: 10s
150364160/187925923 [=======================>......] - ETA: 10s
150601728/187925923 [=======================>......] - ETA: 10s
150683648/187925923 [=======================>......] - ETA: 10s
150822912/187925923 [=======================>......] - ETA: 10s
151248896/187925923 [=======================>......] - ETA: 10s
151527424/187925923 [=======================>......] - ETA: 10s
151797760/187925923 [=======================>......] - ETA: 10s
152109056/187925923 [=======================>......] - ETA: 10s
152535040/187925923 [=======================>......] - ETA: 10s
152649728/187925923 [=======================>......] - ETA: 10s
152911872/187925923 [=======================>......] - ETA: 10s
153288704/187925923 [=======================>......] - ETA: 9s
153468928/187925923 [=======================>......] - ETA: 9s
153763840/187925923 [=======================>......] - ETA: 9s
154025984/187925923 [=======================>......] - ETA: 9s
154247168/187925923 [=======================>......] - ETA: 9s
154583040/187925923 [=======================>......] - ETA: 9s
154812416/187925923 [=======================>......] - ETA: 9s
155131904/187925923 [=======================>......] - ETA: 9s
155385856/187925923 [=======================>......] - ETA: 9s
155533312/187925923 [=======================>......] - ETA: 9s
155705344/187925923 [=======================>......] - ETA: 9s
155885568/187925923 [=======================>......] - ETA: 9s
156049408/187925923 [=======================>......] - ETA: 9s
156254208/187925923 [=======================>......] - ETA: 9s
156532736/187925923 [=======================>......] - ETA: 8s
156786688/187925923 [========================>.....] - ETA: 8s
157073408/187925923 [========================>.....] - ETA: 8s
157450240/187925923 [========================>.....] - ETA: 8s
157655040/187925923 [========================>.....] - ETA: 8s
157958144/187925923 [========================>.....] - ETA: 8s
158089216/187925923 [========================>.....] - ETA: 8s
158384128/187925923 [========================>.....] - ETA: 8s
158662656/187925923 [========================>.....] - ETA: 8s
158851072/187925923 [========================>.....] - ETA: 8s
159350784/187925923 [========================>.....] - ETA: 8s
159588352/187925923 [========================>.....] - ETA: 8s
159956992/187925923 [========================>.....] - ETA: 7s
160342016/187925923 [========================>.....] - ETA: 7s
160669696/187925923 [========================>.....] - ETA: 7s
160980992/187925923 [========================>.....] - ETA: 7s
161292288/187925923 [========================>.....] - ETA: 7s
161611776/187925923 [========================>.....] - ETA: 7s
161898496/187925923 [========================>.....] - ETA: 7s
162308096/187925923 [========================>.....] - ETA: 7s
162603008/187925923 [========================>.....] - ETA: 7s
162963456/187925923 [=========================>....] - ETA: 7s
163323904/187925923 [=========================>....] - ETA: 6s
163512320/187925923 [=========================>....] - ETA: 6s
163897344/187925923 [=========================>....] - ETA: 6s
164323328/187925923 [=========================>....] - ETA: 6s
164487168/187925923 [=========================>....] - ETA: 6s
164552704/187925923 [=========================>....] - ETA: 6s
164806656/187925923 [=========================>....] - ETA: 6s
165052416/187925923 [=========================>....] - ETA: 6s
165289984/187925923 [=========================>....] - ETA: 6s
165511168/187925923 [=========================>....] - ETA: 6s
165732352/187925923 [=========================>....] - ETA: 6s
165838848/187925923 [=========================>....] - ETA: 6s
166150144/187925923 [=========================>....] - ETA: 6s
166338560/187925923 [=========================>....] - ETA: 6s
166518784/187925923 [=========================>....] - ETA: 6s
166838272/187925923 [=========================>....] - ETA: 5s
167141376/187925923 [=========================>....] - ETA: 5s
167518208/187925923 [=========================>....] - ETA: 5s
167723008/187925923 [=========================>....] - ETA: 5s
168026112/187925923 [=========================>....] - ETA: 5s
168140800/187925923 [=========================>....] - ETA: 5s
168419328/187925923 [=========================>....] - ETA: 5s
168583168/187925923 [=========================>....] - ETA: 5s
168910848/187925923 [=========================>....] - ETA: 5s
169172992/187925923 [==========================>...] - ETA: 5s
169263104/187925923 [==========================>...] - ETA: 5s
169689088/187925923 [==========================>...] - ETA: 5s
169910272/187925923 [==========================>...] - ETA: 5s
170090496/187925923 [==========================>...] - ETA: 5s
170262528/187925923 [==========================>...] - ETA: 4s
170590208/187925923 [==========================>...] - ETA: 4s
170835968/187925923 [==========================>...] - ETA: 4s
171220992/187925923 [==========================>...] - ETA: 4s
171229184/187925923 [==========================>...] - ETA: 4s
171360256/187925923 [==========================>...] - ETA: 4s
171466752/187925923 [==========================>...] - ETA: 4s
171540480/187925923 [==========================>...] - ETA: 4s
171646976/187925923 [==========================>...] - ETA: 4s
172032000/187925923 [==========================>...] - ETA: 4s
172253184/187925923 [==========================>...] - ETA: 4s
172441600/187925923 [==========================>...] - ETA: 4s
172662784/187925923 [==========================>...] - ETA: 4s
172752896/187925923 [==========================>...] - ETA: 4s
172990464/187925923 [==========================>...] - ETA: 4s
173268992/187925923 [==========================>...] - ETA: 4s
173383680/187925923 [==========================>...] - ETA: 4s
173637632/187925923 [==========================>...] - ETA: 4s
173899776/187925923 [==========================>...] - ETA: 3s
173998080/187925923 [==========================>...] - ETA: 3s
174120960/187925923 [==========================>...] - ETA: 3s
174391296/187925923 [==========================>...] - ETA: 3s
174587904/187925923 [==========================>...] - ETA: 3s
174841856/187925923 [==========================>...] - ETA: 3s
175071232/187925923 [==========================>...] - ETA: 3s
175325184/187925923 [==========================>...] - ETA: 3s
175538176/187925923 [===========================>..] - ETA: 3s
175775744/187925923 [===========================>..] - ETA: 3s
176037888/187925923 [===========================>..] - ETA: 3s
176291840/187925923 [===========================>..] - ETA: 3s
176513024/187925923 [===========================>..] - ETA: 3s
176807936/187925923 [===========================>..] - ETA: 3s
177152000/187925923 [===========================>..] - ETA: 3s
177389568/187925923 [===========================>..] - ETA: 2s
177586176/187925923 [===========================>..] - ETA: 2s
178069504/187925923 [===========================>..] - ETA: 2s
178176000/187925923 [===========================>..] - ETA: 2s
178438144/187925923 [===========================>..] - ETA: 2s
178700288/187925923 [===========================>..] - ETA: 2s
178978816/187925923 [===========================>..] - ETA: 2s
179281920/187925923 [===========================>..] - ETA: 2s
179470336/187925923 [===========================>..] - ETA: 2s
179740672/187925923 [===========================>..] - ETA: 2s
179961856/187925923 [===========================>..] - ETA: 2s
180305920/187925923 [===========================>..] - ETA: 2s
180633600/187925923 [===========================>..] - ETA: 2s
180985856/187925923 [===========================>..] - ETA: 1s
181239808/187925923 [===========================>..] - ETA: 1s
181444608/187925923 [===========================>..] - ETA: 1s
181575680/187925923 [===========================>..] - ETA: 1s
181895168/187925923 [============================>.] - ETA: 1s
182198272/187925923 [============================>.] - ETA: 1s
182403072/187925923 [============================>.] - ETA: 1s
182779904/187925923 [============================>.] - ETA: 1s
182910976/187925923 [============================>.] - ETA: 1s
183230464/187925923 [============================>.] - ETA: 1s
183492608/187925923 [============================>.] - ETA: 1s
183853056/187925923 [============================>.] - ETA: 1s
184205312/187925923 [============================>.] - ETA: 1s
184467456/187925923 [============================>.] - ETA: 0s
184745984/187925923 [============================>.] - ETA: 0s
185065472/187925923 [============================>.] - ETA: 0s
185344000/187925923 [============================>.] - ETA: 0s
185769984/187925923 [============================>.] - ETA: 0s
186040320/187925923 [============================>.] - ETA: 0s
186327040/187925923 [============================>.] - ETA: 0s
186646528/187925923 [============================>.] - ETA: 0s
187088896/187925923 [============================>.] - ETA: 0s
187203584/187925923 [============================>.] - ETA: 0s
187465728/187925923 [============================>.] - ETA: 0s
187867136/187925923 [============================>.] - ETA: 0s
187932672/187925923 [==============================] - 52s 0us/step

Download the labels

The coode snippet shown below is used to download the labels file (.pbtxt) which contains a list of strings used to add the correct label to each detection (e.g. person). Since the pre-trained model we will use has been trained on the COCO dataset, we will need to download the labels file corresponding to this dataset, named mscoco_label_map.pbtxt. A full list of the labels files included in the TensorFlow Models Garden can be found here.

# Download labels file
def download_labels(filename):
    base_url = 'https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/data/'
    label_dir = tf.keras.utils.get_file(fname=filename,
                                        origin=base_url + filename,
                                        untar=False)
    label_dir = pathlib.Path(label_dir)
    return str(label_dir)

LABEL_FILENAME = 'mscoco_label_map.pbtxt'
PATH_TO_LABELS = download_labels(LABEL_FILENAME)

Out:

Downloading data from https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/data/mscoco_label_map.pbtxt

8192/5056 [================================================] - 0s 0us/step

Load the model

Next we load the downloaded model

import time
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as viz_utils

PATH_TO_SAVED_MODEL = PATH_TO_MODEL_DIR + "/saved_model"

print('Loading model...', end='')
start_time = time.time()

# Load saved model and build the detection function
model = tf.saved_model.load(PATH_TO_SAVED_MODEL)
detect_fn = model.signatures['serving_default']

end_time = time.time()
elapsed_time = end_time - start_time
print('Done! Took {} seconds'.format(elapsed_time))

Out:

Loading model...Done! Took 17.68789768218994 seconds

Load label map data (for plotting)

Label maps correspond index numbers 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.

category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS,
                                                                    use_display_name=True)

Putting everything together

The code shown below loads an image, runs it through the detection model and visualizes the detection results, including the keypoints.

Note that this will take a long time (several minutes) the first time you run this code due to tf.function’s trace-compilation — on subsequent runs (e.g. on new images), things will be faster.

Here are some simple things to try out if you are curious:

  • Modify some of the input images and see if detection still works. Some simple things to try out here (just uncomment the relevant portions of code) include flipping the image horizontally, or converting to grayscale (note that we still expect the input image to have 3 channels).

  • Print out detections[‘detection_boxes’] and try to match the box locations to the boxes in the image. Notice that coordinates are given in normalized form (i.e., in the interval [0, 1]).

  • Set min_score_thresh to other values (between 0 and 1) to allow more detections in or to filter out more detections.

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings

def load_image_into_numpy_array(path):
    """Load an image from file into a numpy array.

    Puts image into numpy array to feed into tensorflow graph.
    Note that by convention we put it into a numpy array with shape
    (height, width, channels), where channels=3 for RGB.

    Args:
      path: the file path to the image

    Returns:
      uint8 numpy array with shape (img_height, img_width, 3)
    """
    return np.array(Image.open(path))


for image_path in IMAGE_PATHS:

    print('Running inference for {}... '.format(image_path), end='')

    image_np = load_image_into_numpy_array(image_path)

    # Things to try:
    # Flip horizontally
    # image_np = np.fliplr(image_np).copy()

    # Convert image to grayscale
    # image_np = np.tile(
    #     np.mean(image_np, 2, keepdims=True), (1, 1, 3)).astype(np.uint8)

    # The input needs to be a tensor, convert it using `tf.convert_to_tensor`.
    input_tensor = tf.convert_to_tensor(image_np)
    # The model expects a batch of images, so add an axis with `tf.newaxis`.
    input_tensor = input_tensor[tf.newaxis, ...]

    detections = detect_fn(input_tensor)

    # All outputs are batches tensors.
    # Convert to numpy arrays, and take index [0] to remove the batch dimension.
    # We're only interested in the first num_detections.
    num_detections = int(detections.pop('num_detections'))
    detections = {key: value[0, :num_detections].numpy()
                  for key, value in detections.items()}
    detections['num_detections'] = num_detections

    # detection_classes should be ints.
    detections['detection_classes'] = detections['detection_classes'].astype(np.int64)

    image_np_with_detections = image_np.copy()

    viz_utils.visualize_boxes_and_labels_on_image_array(
          image_np_with_detections,
          detections['detection_boxes'],
          detections['detection_classes'],
          detections['detection_scores'],
          category_index,
          use_normalized_coordinates=True,
          max_boxes_to_draw=200,
          min_score_thresh=.30,
          agnostic_mode=False)

    plt.figure()
    plt.imshow(image_np_with_detections)
    print('Done')
plt.show()

# sphinx_gallery_thumbnail_number = 2
  • plot object detection saved model tf1
  • plot object detection saved model tf1

Out:

Running inference for C:\Users\sglvladi\.keras\datasets\image1.jpg... Done
Running inference for C:\Users\sglvladi\.keras\datasets\image2.jpg... Done

Total running time of the script: ( 1 minutes 29.283 seconds)

Gallery generated by Sphinx-Gallery