Detect drones from input image, video or real-time feed.
- 
Refer to requirement.txt for environment specifications. 
- 
Download the pre-trained YOLOv3 weights from here. 
- 
Download an image of a dog to test object detection. $ python yolo3_one_file_to_detect_them_all.py -w yolo3.weights -i dog.jpg 
- 
Download pretrained weights for backend from here. This weight must be put in the root folder of the repository. 
YOLOv3 training requires images with .xml files in PASCAL-VOC format.
Click [here] to Download Drone Dataset with .xml files in PASCAL-VOC format.
Alternatively, if you want to create your own dataset, follow these steps:
- Collect images from Kaggle Dataset or Google Images.
- Download LabelImg(a graphical image annotation tool) from this GitHub Repo.
- Setup LabelImg and draw a box around the object of interest in each image using the tool to generate XML files.
- Place all your dataset images in the images folder and the xml files in the annots folder.
- Specify path of the images and annots folder in the "train_image_folder"and"train_annot_folder"fields.
- The "labels"setting lists the labels to be trained on. Only images, which has labels being listed, are fed to the network.
{
    "model" : {
        "min_input_size":       288,
        "max_input_size":       448,
        "anchors":              [17,18, 28,24, 36,34, 42,44, 56,51, 72,66, 90,95, 92,154, 139,281],
        "labels":               ["drone"]
    },
    "train": {
        "train_image_folder":   "F:/Drone/Drone_mira_dataset/images/", 
        "train_annot_folder":   "F:/Drone/Drone_mira_dataset/annots/",
        "cache_name":           "drone_train.pkl",
        "train_times":          8,     # the no. of times to cycle through the training set
        "pretrained_weights":   "",    # specify path of pretrained weights,but it's fine to start from scratch       
        "batch_size":           2,     # the no. of images to read in each batch
        "learning_rate":        1e-4,  # the base learning rate of the default Adam rate scheduler
        "nb_epochs":            50,    # no. of epoches
        "warmup_epochs":        3,       
        "ignore_thresh":        0.5,
        "gpus":                 "0,1",
        "grid_scales":          [1,1,1],
        "obj_scale":            5,
        "noobj_scale":          1,
        "xywh_scale":           1,
        "class_scale":          1,
        "tensorboard_dir":      "logs",
        "saved_weights_name":   "drone.h5", # name of model file to which our trained model is saved
        "debug":                true    # turn on/off the line to print current confidence,position,size,class losses,recall
    },
    "valid": {
        "valid_image_folder":   "C:/drone/valid_image_folder/",
        "valid_annot_folder":   "C:/drone/valid_annot_folder/",
        "cache_name":           "drone_valid.pkl",
        "valid_times":          1
    }
}$ python gen_anchors.py -c config.json
Copy the generated anchors printed on the terminal to the anchors setting in config.json.
$ python train.py -c config.json
By the end of this process, the code will write the weights of the best model to file drone.h5 (or whatever name specified in the setting "saved_weights_name" in the config.json file). The training process stops when the loss on the validation set is not improved in 3 consecutive epoches.
$ python predict.py -c config.json -i /path/to/image/or/video/or/cam
- For an image use : $ python predict.py -c config.json -i test.jpg
- For a video  use : $ python predict.py -c config.json -i test.mp4
- For a real-time feed use : $ python predict.py -c config.json -i webcam
It carries out detection on the image and write the image with detected bounding boxes to the output folder.
Compute the mAP performance of the model defined in saved_weights_name on the validation dataset defined in "valid_image_folder" and "valid_annot_folder"
$ python evaluate.py -c config.json
Demo:
- Download the sample output for drone detection in a video.
