2019-02-13 21:15:30 +00:00
< table style = "width:100%" >
< tr >
2019-04-15 12:45:43 +00:00
< td >
2019-07-21 12:28:02 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/61591130-f7beea00-abc2-11e9-9dc0-d6abcf41d713.jpg" >
2019-04-15 12:45:43 +00:00
< / td >
< td align = "center" >
< a href = "https://www.ultralytics.com" target = "_blank" >
2019-07-28 13:57:01 +00:00
< img src = "https://storage.googleapis.com/ultralytics/logo/logoname1000.png" width = "160" > < / a >
2019-07-21 12:28:02 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/61591093-2b4d4480-abc2-11e9-8b46-d88eb1dabba1.jpg" >
< a href = "https://itunes.apple.com/app/id1452689527" target = "_blank" >
2019-04-15 12:45:43 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/50044365-9b22ac00-0082-11e9-862f-e77aee7aa7b0.png" width = "180" > < / a >
< / td >
< td >
2019-07-21 12:28:02 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/61591100-55066b80-abc2-11e9-9647-52c0e045b288.jpg" >
2019-04-15 12:45:43 +00:00
< / td >
2019-02-13 21:15:30 +00:00
< / tr >
< / table >
2019-02-13 21:01:58 +00:00
2019-04-26 10:01:43 +00:00
# Introduction
2019-08-19 12:52:53 +00:00
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.
2019-04-26 10:01:43 +00:00
2018-08-26 08:51:39 +00:00
# Description
2019-03-28 12:46:23 +00:00
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/.
2018-08-26 08:51:39 +00:00
# Requirements
2018-11-27 17:14:48 +00:00
Python 3.7 or later with the following `pip3 install -U -r requirements.txt` packages:
2018-08-26 08:51:39 +00:00
- `numpy`
2019-05-29 00:02:41 +00:00
- `torch >= 1.1.0`
2018-08-26 08:51:39 +00:00
- `opencv-python`
2019-03-25 13:59:38 +00:00
- `tqdm`
2018-08-26 08:51:39 +00:00
2019-03-05 15:23:33 +00:00
# Tutorials
2019-03-30 17:45:04 +00:00
* [GCP Quickstart ](https://github.com/ultralytics/yolov3/wiki/GCP-Quickstart )
2019-03-05 15:23:33 +00:00
* [Transfer Learning ](https://github.com/ultralytics/yolov3/wiki/Example:-Transfer-Learning )
* [Train Single Image ](https://github.com/ultralytics/yolov3/wiki/Example:-Train-Single-Image )
* [Train Single Class ](https://github.com/ultralytics/yolov3/wiki/Example:-Train-Single-Class )
* [Train Custom Data ](https://github.com/ultralytics/yolov3/wiki/Train-Custom-Data )
2019-05-28 14:14:37 +00:00
# Jupyter Notebook
2019-07-26 17:13:40 +00:00
Our Jupyter [notebook ](https://colab.research.google.com/github/ultralytics/yolov3/blob/master/examples.ipynb ) provides quick training, inference and testing examples.
2019-05-28 14:14:37 +00:00
2018-08-26 09:05:13 +00:00
# Training
2018-08-26 08:51:39 +00:00
2019-08-01 20:40:18 +00:00
**Start Training:** `python3 train.py` to begin training after downloading COCO data with `data/get_coco_dataset.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.
2018-09-01 16:35:28 +00:00
2019-07-15 15:54:31 +00:00
**Resume Training:** `python3 train.py --resume` to resume training from `weights/last.pt` .
2018-09-01 16:35:28 +00:00
2019-08-01 20:40:18 +00:00
**Plot Training:** `from utils import utils; utils.plot_results()` plots training results from `coco_16img.data` , `coco_64img.data` , 2 example datasets available in the `data/` folder, which train and test on the first 16 and 64 images of the COCO2014-trainval dataset.
2019-09-09 19:33:54 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/63258271-fe9d5300-c27b-11e9-9a15-95038daf4438.png" width = "900" >
2018-09-01 11:34:05 +00:00
2018-09-01 11:43:07 +00:00
## Image Augmentation
2018-09-01 11:34:05 +00:00
2018-09-01 16:57:18 +00:00
`datasets.py` applies random OpenCV-powered (https://opencv.org/) augmentation to the input images in accordance with the following specifications. Augmentation is applied **only** during training, not during inference. Bounding boxes are automatically tracked and updated with the images. 416 x 416 examples pictured below.
2018-09-01 11:41:34 +00:00
Augmentation | Description
--- | ---
2018-12-28 18:23:35 +00:00
Translation | +/- 10% (vertical and horizontal)
2018-09-01 12:04:42 +00:00
Rotation | +/- 5 degrees
2018-12-28 18:23:35 +00:00
Shear | +/- 2 degrees (vertical and horizontal)
Scale | +/- 10%
2018-09-01 12:10:06 +00:00
Reflection | 50% probability (horizontal-only)
2018-09-01 12:04:42 +00:00
H**S**V Saturation | +/- 50%
HS**V** Intensity | +/- 50%
2018-09-01 11:34:05 +00:00
2019-10-15 23:32:07 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/66699231-27beea80-ece5-11e9-9cad-bdf9d82c500a.jpg" width = "900" >
2018-08-26 08:51:39 +00:00
2019-03-20 11:35:39 +00:00
## Speed
https://cloud.google.com/deep-learning-vm/
2019-12-09 03:26:03 +00:00
**Machine type:** preemptible [n1-standard-16 ](https://cloud.google.com/compute/docs/machine-types ) (16 vCPUs, 60 GB memory)
2019-03-20 11:35:39 +00:00
**CPU platform:** Intel Skylake
2019-08-05 00:55:03 +00:00
**GPUs:** K80 ($0.20/hr), T4 ($0.35/hr), V100 ($0.83/hr) CUDA with [Nvidia Apex ](https://github.com/NVIDIA/apex ) FP16/32
2019-12-09 02:30:36 +00:00
**HDD:** 1 TB SSD
2019-11-30 23:32:39 +00:00
**Dataset:** COCO train 2014 (117,263 images)
2019-12-09 02:30:36 +00:00
**Model:** `yolov3-spp.cfg`
**Command:** `python3 train.py --img 416 --batch 32 --accum 2`
2019-03-25 13:59:38 +00:00
2019-12-09 03:22:33 +00:00
GPU |n| `--batch --accum` | img/s | epoch< br > time | epoch< br > cost
--- |--- |--- |--- |--- |---
K80 |1| 32 x 2 | 11 | 175 min | $0.58
T4 |1< br > 2| 32 x 2< br > 64 x 1 | 41< br > 61 | 48 min< br > 32 min | $0.28< br > $0.36
V100 |1< br > 2| 32 x 2< br > 64 x 1 | 122< br > **178** | 16 min< br > **11 min** | ** $0.23**< br > $0.31
2080Ti |1< br > 2| 32 x 2< br > 64 x 1 | 81< br > 140 | 24 min< br > 14 min | -< br > -
2019-03-20 11:35:39 +00:00
2018-08-26 09:05:13 +00:00
# Inference
2019-02-11 13:13:27 +00:00
2019-08-31 18:34:14 +00:00
`detect.py` runs inference on any sources:
```bash
python3 detect.py --source ...
```
2019-08-31 18:35:21 +00:00
- Image: `--source file.jpg`
- Video: `--source file.mp4`
2019-08-31 18:34:14 +00:00
- 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`
To run a specific models:
2018-12-22 12:05:52 +00:00
2019-11-30 23:33:10 +00:00
**YOLOv3:** `python3 detect.py --cfg cfg/yolov3.cfg --weights yolov3.weights`
2019-08-31 18:40:27 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/64067835-51d5b500-cc2f-11e9-982e-843f7f9a6ea2.jpg" width = "500" >
2018-12-22 12:05:52 +00:00
2019-11-30 23:33:10 +00:00
**YOLOv3-tiny:** `python3 detect.py --cfg cfg/yolov3-tiny.cfg --weights yolov3-tiny.weights`
2019-08-31 18:40:27 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/64067834-51d5b500-cc2f-11e9-9357-c485b159a20b.jpg" width = "500" >
2019-03-21 11:00:24 +00:00
2019-11-30 23:33:10 +00:00
**YOLOv3-SPP:** `python3 detect.py --cfg cfg/yolov3-spp.cfg --weights yolov3-spp.weights`
2019-08-31 18:40:27 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/64067833-51d5b500-cc2f-11e9-8208-6fe197809131.jpg" width = "500" >
2019-02-11 13:11:24 +00:00
2018-12-22 11:49:55 +00:00
# Pretrained Weights
2018-12-22 11:58:59 +00:00
2019-11-23 00:06:16 +00:00
Download from: [https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0 ](https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0 )
2018-09-01 16:48:53 +00:00
2019-04-23 15:05:42 +00:00
## Darknet Conversion
```bash
2019-10-15 23:32:07 +00:00
$ git clone https://github.com/ultralytics/yolov3 & & cd yolov3
2019-04-23 15:05:42 +00:00
# convert darknet cfg/weights to pytorch model
2019-10-15 23:32:07 +00:00
$ python3 -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.weights')"
2019-04-23 15:05:42 +00:00
Success: converted 'weights/yolov3-spp.weights' to 'converted.pt'
# convert cfg/pytorch model to darknet weights
2019-10-15 23:32:07 +00:00
$ python3 -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.pt')"
2019-04-23 15:05:42 +00:00
Success: converted 'weights/yolov3-spp.pt' to 'converted.weights'
```
2019-03-20 11:26:46 +00:00
# mAP
2019-12-11 19:53:23 +00:00
```bash
python3 test.py --weights ... --cfg ...
```
2019-12-26 20:52:25 +00:00
- mAP@0.5 run at `--iou-thr 0.5` , mAP@0.5...0.95 run at `--iou-thr 0.7`
2019-12-11 19:53:23 +00:00
- YOLOv3-SPP ultralytics is `ultralytics68.pt` with `yolov3-spp.cfg`
- Darknet results: https://arxiv.org/abs/1804.02767
2019-03-30 17:45:04 +00:00
2019-11-30 23:34:57 +00:00
< i > < / i > |Size |COCO mAP< br > @0.5...0.95 |COCO mAP< br > @0.5
2019-11-26 22:59:13 +00:00
--- | --- | --- | ---
2019-12-26 20:31:30 +00:00
YOLOv3-tiny< br > YOLOv3< br > YOLOv3-SPP< br > **YOLOv3-SPP ultralytics** |320 |14.0< br > 28.7< br > 30.5< br > **35.5** |29.1< br > 51.8< br > 52.3< br > **55.4**
YOLOv3-tiny< br > YOLOv3< br > YOLOv3-SPP< br > **YOLOv3-SPP ultralytics** |416 |16.0< br > 31.2< br > 33.9< br > **39.2** |33.0< br > 55.4< br > 56.9< br > **59.9**
YOLOv3-tiny< br > YOLOv3< br > YOLOv3-SPP< br > **YOLOv3-SPP ultralytics** |512 |16.6< br > 32.7< br > 35.6< br > **40.5** |34.9< br > 57.7< br > 59.5< br > **61.4**
YOLOv3-tiny< br > YOLOv3< br > YOLOv3-SPP< br > **YOLOv3-SPP ultralytics** |608 |16.6< br > 33.1< br > 37.0< br > **41.1** |35.4< br > 58.2< br > 60.7< br > **61.5**
2019-08-31 18:34:14 +00:00
```bash
2019-12-27 19:30:27 +00:00
$ python3 test.py --img-size 608 --iou-thr 0.6 --weights ultralytics68.pt --cfg yolov3-spp.cfg
2019-12-26 20:52:25 +00:00
2019-12-27 19:30:27 +00:00
Namespace(batch_size=32, cfg='yolov3-spp.cfg', conf_thres=0.001, data='data/coco2014.data', device='', img_size=608, iou_thres=0.6, save_json=True, task='test', weights='ultralytics68.pt')
Using CUDA device0 _CudaDeviceProperties(name='Tesla V100-SXM2-16GB', total_memory=16130MB)
Class Images Targets P R mAP@0.5 F1: 100% 157/157 [03:30< 00:00 , 1 . 16it / s ]
all 5e+03 3.51e+04 0.0353 0.891 0.606 0.0673
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.409
2019-12-26 20:52:25 +00:00
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.615
2019-12-27 19:30:27 +00:00
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.437
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.242
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.448
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.519
2019-12-26 20:52:25 +00:00
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.337
2019-12-27 19:30:27 +00:00
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.557
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.612
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.438
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.658
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.746
2019-03-20 11:26:46 +00:00
```
2018-08-26 08:51:39 +00:00
2019-12-11 21:21:39 +00:00
# Reproduce Our Results
2019-12-11 21:30:54 +00:00
This command trains `yolov3-spp.cfg` from scratch to our mAP above. Training takes about one week on a 2080Ti.
2019-12-11 21:21:39 +00:00
```bash
$ python3 train.py --weights '' --cfg yolov3-spp.cfg --epochs 273 --batch 16 --accum 4 --multi --pre
```
2019-12-11 21:25:35 +00:00
< img src = "https://user-images.githubusercontent.com/26833433/70661588-76bbca00-1c19-11ea-86f9-23350d8c3193.png" width = "900" >
2019-12-11 21:21:39 +00:00
2019-12-11 21:40:11 +00:00
# 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 ](https://github.com/ultralytics/yolov3/wiki/GCP-Quickstart )
- **Google Colab Notebook** with 12 hours of free GPU time: [Google Colab Notebook ](https://colab.research.google.com/drive/1G8T-VFxQkjDe4idzN8F-hbIBqkkkQnxw )
- **Docker Image** from https://hub.docker.com/r/ultralytics/yolov3. See [Docker Quickstart Guide ](https://github.com/ultralytics/yolov3/wiki/Docker-Quickstart )
2019-04-03 10:42:40 +00:00
# Citation
[![DOI ](https://zenodo.org/badge/146165888.svg )](https://zenodo.org/badge/latestdoi/146165888)
2018-08-26 08:51:39 +00:00
# Contact
2019-12-03 20:52:19 +00:00
**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.