|  | ||
|---|---|---|
| .github | ||
| cfg | ||
| data | ||
| utils | ||
| weights | ||
| .dockerignore | ||
| .gitignore | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
| detect.py | ||
| examples.ipynb | ||
| models.py | ||
| requirements.txt | ||
| test.py | ||
| train.py | ||
		
			
				
				README.md
			
		
		
			
			
		
	
	|   |       |   | 
Introduction
This directory contains PyTorch YOLOv3 software developed by Ultralytics LLC, and is freely available for redistribution under the GPL-3.0 license. For more information please visit https://www.ultralytics.com.
Description
The https://github.com/ultralytics/yolov3 repo contains inference and training code for YOLOv3 in PyTorch. The code works on Linux, MacOS and Windows. Training is done on the COCO dataset by default: https://cocodataset.org/#home. Credit to Joseph Redmon for YOLO: https://pjreddie.com/darknet/yolo/.
Requirements
Python 3.7 or later with all of the pip install -U -r requirements.txt packages including:
- torch >= 1.4
- opencv-python
- Pillow
All dependencies are included in the associated docker images. Docker requirements are:
- Nvidia Driver >= 440.44
- Docker Engine - CE >= 19.03
Tutorials
- Train Custom Data < highly recommended!!
- Train Single Class
- Google Colab Notebook with quick training, inference and testing examples
- GCP Quickstart
- Docker Quickstart Guide
Training
Start Training: python3 train.py to begin training after downloading COCO data with data/get_coco2017.sh. Each epoch trains on 117,263 images from the train and validate COCO sets, and tests on 5000 images from the COCO validate set.
Resume Training: python3 train.py --resume to resume training from weights/last.pt.
Plot Training: from utils import utils; utils.plot_results()
 
Image Augmentation
datasets.py applies OpenCV-powered (https://opencv.org/) augmentation to the input image. We use a mosaic dataloader (pictured below) to increase image variability during training.
 
Speed
https://cloud.google.com/deep-learning-vm/
Machine type: preemptible n1-standard-16 (16 vCPUs, 60 GB memory)
CPU platform: Intel Skylake
GPUs: K80 ($0.20/hr), T4 ($0.35/hr), V100 ($0.83/hr) CUDA with Nvidia Apex FP16/32
HDD: 1 TB SSD
Dataset: COCO train 2014 (117,263 images)
Model: yolov3-spp.cfg
Command:  python3 train.py --img 416 --batch 32 --accum 2
| GPU | n | --batch --accum | img/s | epoch time | epoch cost | 
|---|---|---|---|---|---|
| K80 | 1 | 32 x 2 | 11 | 175 min | $0.58 | 
| T4 | 1 2 | 32 x 2 64 x 1 | 41 61 | 48 min 32 min | $0.28 $0.36 | 
| V100 | 1 2 | 32 x 2 64 x 1 | 122 178 | 16 min 11 min | $0.23 $0.31 | 
| 2080Ti | 1 2 | 32 x 2 64 x 1 | 81 140 | 24 min 14 min | - - | 
Inference
python3 detect.py --source ...
- Image:  --source file.jpg
- Video:  --source file.mp4
- Directory:  --source dir/
- Webcam:  --source 0
- RTSP stream:  --source rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa
- HTTP stream:  --source http://wmccpinetop.axiscam.net/mjpg/video.mjpg
YOLOv3: python3 detect.py --cfg cfg/yolov3.cfg --weights yolov3.pt

YOLOv3-tiny: python3 detect.py --cfg cfg/yolov3-tiny.cfg --weights yolov3-tiny.pt

YOLOv3-SPP: python3 detect.py --cfg cfg/yolov3-spp.cfg --weights yolov3-spp.pt

Pretrained Weights
Download from: https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0
Darknet Conversion
$ git clone https://github.com/ultralytics/yolov3 && cd yolov3
# convert darknet cfg/weights to pytorch model
$ python3  -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.weights')"
Success: converted 'weights/yolov3-spp.weights' to 'converted.pt'
# convert cfg/pytorch model to darknet weights
$ python3  -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.pt')"
Success: converted 'weights/yolov3-spp.pt' to 'converted.weights'
mAP
| Size | COCO mAP @0.5...0.95 | COCO mAP @0.5 | |
|---|---|---|---|
| YOLOv3-tiny YOLOv3 YOLOv3-SPP YOLOv3-SPP-ultralytics | 320 | 14.0 28.7 30.5 37.6 | 29.1 51.8 52.3 56.8 | 
| YOLOv3-tiny YOLOv3 YOLOv3-SPP YOLOv3-SPP-ultralytics | 416 | 16.0 31.2 33.9 41.1 | 33.0 55.4 56.9 60.7 | 
| YOLOv3-tiny YOLOv3 YOLOv3-SPP YOLOv3-SPP-ultralytics | 512 | 16.6 32.7 35.6 42.7 | 34.9 57.7 59.5 62.6 | 
| YOLOv3-tiny YOLOv3 YOLOv3-SPP YOLOv3-SPP-ultralytics | 608 | 16.6 33.1 37.0 42.9 | 35.4 58.2 60.7 62.6 | 
- mAP@0.5 run at --iou-thr 0.5, mAP@0.5...0.95 run at--iou-thr 0.7
- Darknet results: https://arxiv.org/abs/1804.02767
$ python3 test.py --cfg yolov3-spp.cfg --weights yolov3-spp-ultralytics.pt --img 640 --augment
Namespace(augment=True, batch_size=16, cfg='cfg/yolov3-spp.cfg', conf_thres=0.001, data='coco2014.data', device='', img_size=640, iou_thres=0.6, save_json=True, single_cls=False, task='test', weights='weight
Using CUDA device0 _CudaDeviceProperties(name='Tesla V100-SXM2-16GB', total_memory=16130MB)
               Class    Images   Targets         P         R   mAP@0.5        F1: 100%|█████████| 313/313 [03:00<00:00,  1.74it/s]
                 all     5e+03  3.51e+04     0.373     0.744     0.637     0.491
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.454
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.644
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.497
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.270
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.504
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.577
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.363
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.599
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.502
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.724
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.805
Speed: 21.3/3.0/24.4 ms inference/NMS/total per 640x640 image at batch-size 16
Reproduce Our Results
This command trains yolov3-spp.cfg from scratch to our mAP above. Training takes about one week on a 2080Ti.
$ python3 train.py --weights '' --cfg yolov3-spp.cfg --epochs 300 --batch 16 --accum 4 --multi
 
Reproduce Our Environment
To access an up-to-date working environment (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled), consider a:
- GCP Deep Learning VM with $300 free credit offer: See our GCP Quickstart Guide
- Google Colab Notebook with 12 hours of free GPU time: Google Colab Notebook
- Docker Image from https://hub.docker.com/r/ultralytics/yolov3. See Docker Quickstart Guide
Citation
Contact
Issues should be raised directly in the repository. For additional questions or comments please email Glenn Jocher at glenn.jocher@ultralytics.com or visit us at https://contact.ultralytics.com.