.. _sphx_glr_build_examples_detection_demo_ssd.py: 1. Predict with pre-trained SSD models ========================================== This article shows how to play with pre-trained SSD models with only a few lines of code. First let's import some necessary libraries: .. code-block:: python from gluoncv import model_zoo, data, utils from matplotlib import pyplot as plt Load a pretrained model ------------------------- Let's get an SSD model trained with 512x512 images on Pascal VOC dataset with ResNet-50 V1 as the base model. By specifying ``pretrained=True``, it will automatically download the model from the model zoo if necessary. For more pretrained models, please refer to :doc:`../../model_zoo/index`. .. code-block:: python net = model_zoo.get_model('ssd_512_resnet50_v1_voc', pretrained=True) Pre-process an image -------------------- Next we download an image, and pre-process with preset data transforms. Here we specify that we resize the short edge of the image to 512 px. But you can feed an arbitrarily sized image. You can provide a list of image file names, such as ``[im_fname1, im_fname2, ...]`` to :py:func:`gluoncv.data.transforms.presets.ssd.load_test` if you want to load multiple image together. This function returns two results. The first is a NDArray with shape `(batch_size, RGB_channels, height, width)`. It can be fed into the model directly. The second one contains the images in numpy format to easy to be plotted. Since we only loaded a single image, the first dimension of `x` is 1. .. code-block:: python im_fname = utils.download('https://github.com/dmlc/web-data/blob/master/' + 'gluoncv/detection/street_small.jpg?raw=true') x, img = data.transforms.presets.ssd.load_test(im_fname, short=512) print('Shape of pre-processed image:', x.shape) .. rst-class:: sphx-glr-script-out Out:: Shape of pre-processed image: (1, 3, 512, 512) Inference and display --------------------- The forward function will return all detected bounding boxes, and the corresponding predicted class IDs and confidence scores. Their shapes are `(batch_size, num_bboxes, 1)`, `(batch_size, num_bboxes, 1)`, and `(batch_size, num_bboxes, 4)`, respectively. We can use :py:func:`gluoncv.utils.viz.plot_bbox` to visualize the results. We slice the results for the first image and feed them into `plot_bbox`: .. code-block:: python class_IDs, scores, bounding_boxs = net(x) ax = utils.viz.plot_bbox(img, bounding_boxs[0], scores[0], class_IDs[0], class_names=net.classes) plt.show() .. image:: /build/examples_detection/images/sphx_glr_demo_ssd_001.png :align: center **Total running time of the script:** ( 0 minutes 5.180 seconds) .. only :: html .. container:: sphx-glr-footer .. container:: sphx-glr-download :download:`Download Python source code: demo_ssd.py ` .. container:: sphx-glr-download :download:`Download Jupyter notebook: demo_ssd.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_