CNTK/Examples/Image/Detection
..
FastRCNN
FasterRCNN
utils
DetectionDemo.py
README.md
__init__.py

README.md

CNTK Examples: Image/Detection/DetectionDemo

Overview

This folder contains an end-to-end demo to try different object detectors, base models and data sets. The script DetectionDemo.py will do the following:

  • Train a detector on a specified training set
  • Compute average precision per class and mAP on the test set
  • Detect objects in a single image (without using a reader)
  • Filter the detected objects using NMS (non maximum suppression) and display the boxes on the image

Running the example

Setup

To run the object detection demo you need a CNTK Python environment. Install the following additional packages:

pip install opencv-python easydict pyyaml future

The code uses prebuild Cython modules for parts of the region proposal network (see Examples/Image/Detection/utils/cython_modules). These binaries are contained in the repository for Python 3.5 under Windows and Python 3.5/3.6 under Linux. For some systems you might need to rename the corresponding module (e.g., rename cython_bbox.cpython-35m.so to cython_bbox.so for Python 3.5) in order for things to work. If you require other versions please follow the instructions at https://github.com/rbgirshick/py-faster-rcnn.

If you want to use the debug output you need to run pip install pydot_ng (website) and install graphviz to be able to plot the CNTK graphs (the GraphViz executable has to be in the systems PATH).

Getting the data and AlexNet model

We use a toy dataset of images captured from a refrigerator to demonstrate object detection with CNTK. Both the dataset and the pre-trained AlexNet model can be downloaded by running the following Python command from the Examples/Image/Detection/FastRCNN folder:

python install_data_and_model.py

After running the script, the toy dataset will be installed under the Image/DataSets/Grocery folder. The AlexNet model will be downloaded to the Image/PretrainedModels folder. We recommend you to keep the downloaded data in the respective folder while downloading, as the configuration files assume that by default.

To download the Pascal data and create the annotation file for Pascal in CNTK format run the following scripts:

python Examples/Image/DataSets/Pascal/install_pascalvoc.py
python Examples/Image/DataSets/Pascal/mappings/create_mappings.py

Running the demo

To train and evaluate a detector run

python DetectionDemo.py

Changing the detector

Currently the demo supports 'FastRCNN' and 'FasterRCNN' detectors. Pass the name of the desired detector to the get_configuration() method from main:

    # Currently supported detectors: 'FastRCNN', 'FasterRCNN'
    cfg = get_configuration('FastRCNN')

Changing the data set

Change the dataset_cfg in the get_configuration() method:

    # for Pascal VOC 2007 data set use: from utils.configs.Pascal_config import cfg as dataset_cfg
    # for the Grocery data set use:     from utils.configs.Grocery_config import cfg as dataset_cfg
    from utils.configs.Grocery_config import cfg as dataset_cfg

Changing the base model

Change the network_cfg in the get_configuration() method:

    # for VGG16 base model use:         from utils.configs.VGG16_config import cfg as network_cfg
    # for AlexNet base model use:       from utils.configs.AlexNet_config import cfg as network_cfg
    from utils.configs.AlexNet_config import cfg as network_cfg