项目作者: havardthom

项目描述 :
Unified Detection System for Automatic, Real-Time, Accurate Animal Detection in Camera Trap Images from the Arctic Tundra - Master's thesis 2017
高级语言: C++
项目地址: git://github.com/havardthom/unified-image-detection-system.git


README

Master’s thesis 15.01.2017 - 01.06.2017

Publication link: http://hdl.handle.net/10037/11218

Unified Detection System for Automatic, Real-Time, Accurate Animal Detection in Camera Trap Images from the Arctic Tundra

$ROOT refers to the unified-detection-system root directory.

$baitcam refers to baitcam dataset directory.

Install frameworks:

  1. Refer to $ROOT/INSTALL.md

Dataset preparation:

  1. Any dataset used with the Unified Detection System should follow the initial structure of Baitcam from the thesis:

    1. $baitcam/images # Contains images
    2. $baitcam/pascal_Annotations # Contains .xml annotations (pascal format)
    3. $baitcam/pascal_Imagesets # Contains train.txt and val.txt imagesets (pascal format)
    4. $baitcam/baitcam_labelmap.prototxt # Contains labels and class names
  2. Convert to SSD data format:

    1. cd $ROOT/data/data_utils
    2. python convert_pascal_2_ssd.py -h # To see arguments
    3. python convert_pascal_2_ssd.py 'dataset_dir' 'labelmap'
    4. # example: python convert_pascal_2_ssd.py ~/datasets/baitcam ~/datasets/baitcam/baitcam_labelmap.prototxt --resize-width 300 --resize-height 300
  3. This should create:

    1. $baitcam/ssd_ImageSets # Contains train.txt, val.txt, val_name_size.txt imagesets (SSD format)
    2. $baitcam/train_lmdb # Contains .mdb files
    3. $baitcam/val_lmdb # Contains .mdb files
  4. Convert to YOLOv2 data format:

    1. cd $ROOT/data/data_utils
    2. python convert_pascal_2_yolov2.py -h # To see arguments
    3. python convert_pascal_2_yolov2.py 'dataset_dir' 'labelmap'
    4. # example: python convert_pascal_2_ssd.py ~/datasets/baitcam ~/datasets/baitcam/baitcam_labelmap.prototxt
  5. This should create:

    1. $baitcam/yolov2_ImageSets # Contains train.txt and val.txt imagesets (YOLO format)
    2. $baitcam/yolov2_Annotations # Contains .txt annotations (YOLO format)
  6. Create custom anchor boxes for dataset (optional):

    1. cd $ROOT/data/data_utils
    2. python k_means_anchor_boxes.py -h # To see arguments
    3. python k_means_anchor_boxes.py 'dataset_dir'
    4. # example: python convert_pascal_2_ssd.py ~/datasets/baitcam --k 5 --info
  7. This should create:

    1. $baitcam/custom_anchor_boxes/5_anchor_boxes.txt

Train a model:

  1. Download pretrained weights, link in $ROOT/imagenet_models/download.txt
  2. Run unified detection system:

    1. cd $ROOT
    2. python run.py -h # To see arguments
    3. python run.py --dataset 'dataset_name' --method 'method_name' --model 'model_name'
    4. # example: python run.py --dataset baitcam --method ssd --model VGG16_reduced
  3. This should create output directory:

    1. $ROOT/output/baitcam/ssd/VGG16_reduced # Contains model weights, logfile, config etc.

Evaluate a model:

  1. Run unified detection system:

    1. cd $ROOT
    2. python run.py -h # To see arguments
    3. python run.py --eval --output_dir 'output_dir'
    4. # example: python run.py --eval --output_dir /output/baitcam/ssd/VGG16_reduced
  2. This should create results directory:

    1. $ROOT/output/baitcam/ssd/VGG16_reduced/results # Contains result files and Precision-recall curve

Detect with a model:

  1. Run unified detection system:

    1. cd $ROOT
    2. python run.py -h # To see arguments
    3. python run.py --detect --output_dir 'output_dir' --image_dir 'image_dir'
    4. # example: python run.py --detect --output_dir /output/baitcam/ssd/VGG16_reduced --image_dir ~/baitcam_test_images
  2. This should create detections file:

    1. ~/baitcam_test_images_detections.txt

Visualize detection results:

  1. Run visualization script:

    1. cd $ROOT
    2. python visualize_detections.py -h # To see arguments
    3. python visualize_detections.py 'detection_file'
    4. # example: python visualize_detections.py ~/baitcam_test_images_detections.txt --labelmap ~/datasets/baitcam/baitcam_labelmap.prototxt --vis_thresh 0.5