Skip to main content

PyTorch-YOLOv3

A minimal PyTorch implementation of YOLOv3, with support for training, inference and evaluation.

Build Status codecov CodeFactor


Installation

Clone and install requirements

git clone {this-repository}
cd PyTorch-YOLOv3/
pip3 install -r requirements.txt --user

Download pre-trained weights

cd weights
bash download_weights.sh

Download COCO

cd data
bash get_coco_dataset.sh

Test

Evaluates the model on COCO test.

python3 scripts/run_eval.py --weights_path weights/yolov3.weights
Model mAP (min. 50 IoU)
YOLOv3 608 (paper) 57.9
YOLOv3 608 (this impl.) 57.3
YOLOv3 416 (paper) 55.3
YOLOv3 416 (this impl.) 55.5

Inference

Uses pretrained weights to make predictions on images. Below table displays the inference times when using as inputs images scaled to 256x256. The ResNet backbone measurements are taken from the YOLOv3 paper. The Darknet-53 measurement marked shows the inference time of this implementation on my 1080ti card.

Backbone GPU FPS
ResNet-101 Titan X 53
ResNet-152 Titan X 37
Darknet-53 (paper) Titan X 76
Darknet-53 (this impl.) 1080ti 74
python3 scripts/run_detect.py --image_folder data/samples

Train

train.py [-h] [--epochs EPOCHS] [--batch_size BATCH_SIZE]
              [--gradient_accumulations GRADIENT_ACCUMULATIONS]
              [--model_def MODEL_DEF] [--data_config DATA_CONFIG]
              [--pretrained_weights PRETRAINED_WEIGHTS] [--nb_cpu NB_CPU]
              [--img_size IMG_SIZE]
              [--checkpoint_interval CHECKPOINT_INTERVAL]
              [--evaluation_interval EVALUATION_INTERVAL]
              [--compute_map COMPUTE_MAP]
              [--multiscale_training MULTISCALE_TRAINING]

Example (COCO)

To train on COCO using a Darknet-53 backend pretrained on ImageNet run:

python3 scripts/run_train.py --data_config config/coco.data  --pretrained_weights weights/darknet53.conv.74

Training log

---- [Epoch 7/100, Batch 7300/14658] ----
+------------+--------------+--------------+--------------+
| Metrics    | YOLO Layer 0 | YOLO Layer 1 | YOLO Layer 2 |
+------------+--------------+--------------+--------------+
| grid_size  | 16           | 32           | 64           |
| loss       | 1.554926     | 1.446884     | 1.427585     |
| x          | 0.028157     | 0.044483     | 0.051159     |
| y          | 0.040524     | 0.035687     | 0.046307     |
| w          | 0.078980     | 0.066310     | 0.027984     |
| h          | 0.133414     | 0.094540     | 0.037121     |
| conf       | 1.234448     | 1.165665     | 1.223495     |
| cls        | 0.039402     | 0.040198     | 0.041520     |
| cls_acc    | 44.44%       | 43.59%       | 32.50%       |
| recall50   | 0.361111     | 0.384615     | 0.300000     |
| recall75   | 0.222222     | 0.282051     | 0.300000     |
| precision  | 0.520000     | 0.300000     | 0.070175     |
| conf_obj   | 0.599058     | 0.622685     | 0.651472     |
| conf_noobj | 0.003778     | 0.004039     | 0.004044     |
+------------+--------------+--------------+--------------+
Total Loss 4.429395
---- ETA 0:35:48.821929

Tensorboard

Track training progress in Tensorboard:

  • Initialize training
  • Run the command below
  • Go to http://localhost:6006/
tensorboard --logdir='logs' --port=6006

Train on Custom Dataset

Custom model

Run the commands below to create a custom model definition, replacing <num-classes> with the number of classes in your dataset.

cd config                                  # Navigate to config dir
bash create_custom_model.sh <num-classes>  # Will create custom model 'yolov3-custom.cfg'

Classes

Add class names to data/custom/classes.names. This file should have one row per class name.

Image Folder

Move the images of your dataset to data/custom/images/.

Annotation Folder

Move your annotations to data/custom/labels/. The dataloader expects that the annotation file corresponding to the image data/custom/images/train.jpg has the path data/custom/labels/train.txt. Each row in the annotation file should define one bounding box, using the syntax label_idx x_center y_center width height. The coordinates should be scaled [0, 1], and the label_idx should be zero-indexed and correspond to the row number of the class name in data/custom/classes.names.

Define Train and Validation Sets

In data/custom/train.txt and data/custom/valid.txt, add paths to images that will be used as train and validation data respectively.

Train

To train on the custom dataset run:

python3 scripts/run_train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data

Add --pretrained_weights weights/darknet53.conv.74 to train using a backend pretrained on ImageNet.

Credit

YOLOv3: An Incremental Improvement

Joseph Redmon, Ali Farhadi

We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that’s pretty swell. It’s a little bigger than last time but more accurate. It’s still fast hough, don’t worry. At 320 × 320 YOLOv3 runs in 22 ms at 28.2 mAP, as accurate as SSD but three times faster. When we look at the old .5 IOU mAP detection metric YOLOv3 is quite good. It achieves 57.9 AP50 in 51 ms on a Titan X, compared to 57.5 AP50 in 198 ms by RetinaNet, similar performance but 3.8× faster. As always, all the code is online at https://pjreddie.com/yolo/.

[Paper] [Project Webpage] [Authors' Implementation]

@article{yolov3,
  title={YOLOv3: An Incremental Improvement},
  author={Redmon, Joseph and Farhadi, Ali},
  journal = {arXiv},
  year={2018}
}

Metadata

Release files for torch-yolo3 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for torch-yolo3 0.1.1
File Size Uploaded
torch_yolo3-0.1.1.tar.gz 219.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for torch-yolo3 0.1.1
File Interpreter ABI Platform
torch_yolo3-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 251.7 kB

Release files / torch_yolo3-0.1.1.tar.gz

Download URL torch_yolo3-0.1.1.tar.gz
Size 219.9 kB
Tags Source
SHA-256 checksum
How to use checksums
97a4444c02048c2ca5c00e4ff941a6177be012affbfcae0b281a040d7898bbde
BLAKE2b-256 checksum
How to use checksums
fbac44316b5ffafbc16840deb9bc583fd817570919079732350c1bd9bae75bf4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.3.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.9

Release files / torch_yolo3-0.1.1-py3-none-any.whl

Download URL torch_yolo3-0.1.1-py3-none-any.whl
Size 31.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4c56da74df52e7cd6e4193ebcda66da9691d5d6ea9d69b10fe00d63fe092c418
BLAKE2b-256 checksum
How to use checksums
22942aa845eca81b8d6c6579c459e9eca434bc67ad6efc95665f80805cd89bed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.3.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.9

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page