forked from ultralytics/yolov5
-
Notifications
You must be signed in to change notification settings - Fork 73
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into tf-only-export
- Loading branch information
Showing
46 changed files
with
1,586 additions
and
774 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# These are supported funding model platforms | ||
|
||
github: glenn-jocher | ||
patreon: ultralytics | ||
open_collective: ultralytics |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,64 @@ | ||
<a href="https://apps.apple.com/app/id1452689527" target="_blank"> | ||
<img src="https://user-images.githubusercontent.com/26833433/98699617-a1595a00-2377-11eb-8145-fc674eb9b1a7.jpg" width="1000"></a> | ||
<a align="left" href="https://apps.apple.com/app/id1452689527" target="_blank"> | ||
<img width="800" src="https://user-images.githubusercontent.com/26833433/98699617-a1595a00-2377-11eb-8145-fc674eb9b1a7.jpg"></a> | ||
  | ||
|
||
<a href="https://github.com/ultralytics/yolov5/actions"><img src="https://github.com/ultralytics/yolov5/workflows/CI%20CPU%20testing/badge.svg" alt="CI CPU testing"></a> | ||
|
||
This repository represents Ultralytics open-source research into future object detection methods, and incorporates lessons learned and best practices evolved over thousands of hours of training and evolution on anonymized client datasets. **All code and models are under active development, and are subject to modification or deletion without notice.** Use at your own risk. | ||
|
||
<img src="https://user-images.githubusercontent.com/26833433/103594689-455e0e00-4eae-11eb-9cdf-7d753e2ceeeb.png" width="1000">** GPU Speed measures end-to-end time per image averaged over 5000 COCO val2017 images using a V100 GPU with batch size 32, and includes image preprocessing, PyTorch FP16 inference, postprocessing and NMS. EfficientDet data from [google/automl](https://github.com/google/automl) at batch size 8. | ||
|
||
- **January 5, 2021**: [v4.0 release](https://github.com/ultralytics/yolov5/releases/tag/v4.0): nn.SiLU() activations, [Weights & Biases](https://wandb.ai/) logging, [PyTorch Hub](https://pytorch.org/hub/ultralytics_yolov5/) integration. | ||
<p align="left"><img width="800" src="https://user-images.githubusercontent.com/26833433/114313216-f0a5e100-9af5-11eb-8445-c682b60da2e3.png"></p> | ||
<details> | ||
<summary>YOLOv5-P5 640 Figure (click to expand)</summary> | ||
|
||
<p align="left"><img width="800" src="https://user-images.githubusercontent.com/26833433/114313219-f1d70e00-9af5-11eb-9973-52b1f98d321a.png"></p> | ||
</details> | ||
<details> | ||
<summary>Figure Notes (click to expand)</summary> | ||
|
||
* GPU Speed measures end-to-end time per image averaged over 5000 COCO val2017 images using a V100 GPU with batch size 32, and includes image preprocessing, PyTorch FP16 inference, postprocessing and NMS. | ||
* EfficientDet data from [google/automl](https://github.com/google/automl) at batch size 8. | ||
* **Reproduce** by `python test.py --task study --data coco.yaml --iou 0.7 --weights yolov5s6.pt yolov5m6.pt yolov5l6.pt yolov5x6.pt` | ||
</details> | ||
|
||
- **April 11, 2021**: [v5.0 release](https://github.com/ultralytics/yolov5/releases/tag/v5.0): YOLOv5-P6 1280 models, [AWS](https://github.com/ultralytics/yolov5/wiki/AWS-Quickstart), [Supervise.ly](https://github.com/ultralytics/yolov5/issues/2518) and [YouTube](https://github.com/ultralytics/yolov5/pull/2752) integrations. | ||
- **January 5, 2021**: [v4.0 release](https://github.com/ultralytics/yolov5/releases/tag/v4.0): nn.SiLU() activations, [Weights & Biases](https://wandb.ai/site?utm_campaign=repo_yolo_readme) logging, [PyTorch Hub](https://pytorch.org/hub/ultralytics_yolov5/) integration. | ||
- **August 13, 2020**: [v3.0 release](https://github.com/ultralytics/yolov5/releases/tag/v3.0): nn.Hardswish() activations, data autodownload, native AMP. | ||
- **July 23, 2020**: [v2.0 release](https://github.com/ultralytics/yolov5/releases/tag/v2.0): improved model definition, training and mAP. | ||
- **June 22, 2020**: [PANet](https://arxiv.org/abs/1803.01534) updates: new heads, reduced parameters, improved speed and mAP [364fcfd](https://github.com/ultralytics/yolov5/commit/364fcfd7dba53f46edd4f04c037a039c0a287972). | ||
- **June 19, 2020**: [FP16](https://pytorch.org/docs/stable/nn.html#torch.nn.Module.half) as new default for smaller checkpoints and faster inference [d4c6674](https://github.com/ultralytics/yolov5/commit/d4c6674c98e19df4c40e33a777610a18d1961145). | ||
|
||
|
||
## Pretrained Checkpoints | ||
|
||
| Model | size | AP<sup>val</sup> | AP<sup>test</sup> | AP<sub>50</sub> | Speed<sub>V100</sub> | FPS<sub>V100</sub> || params | GFLOPS | | ||
|---------- |------ |------ |------ |------ | -------- | ------| ------ |------ | :------: | | ||
| [YOLOv5s](https://github.com/ultralytics/yolov5/releases) |640 |36.8 |36.8 |55.6 |**2.2ms** |**455** ||7.3M |17.0 | ||
| [YOLOv5m](https://github.com/ultralytics/yolov5/releases) |640 |44.5 |44.5 |63.1 |2.9ms |345 ||21.4M |51.3 | ||
| [YOLOv5l](https://github.com/ultralytics/yolov5/releases) |640 |48.1 |48.1 |66.4 |3.8ms |264 ||47.0M |115.4 | ||
| [YOLOv5x](https://github.com/ultralytics/yolov5/releases) |640 |**50.1** |**50.1** |**68.7** |6.0ms |167 ||87.7M |218.8 | ||
| | | | | | | || | | ||
| [YOLOv5x](https://github.com/ultralytics/yolov5/releases) + TTA |832 |**51.9** |**51.9** |**69.6** |24.9ms |40 ||87.7M |1005.3 | ||
|
||
<!--- | ||
| [YOLOv5l6](https://github.com/ultralytics/yolov5/releases) |640 |49.0 |49.0 |67.4 |4.1ms |244 ||77.2M |117.7 | ||
| [YOLOv5l6](https://github.com/ultralytics/yolov5/releases) |1280 |53.0 |53.0 |70.8 |12.3ms |81 ||77.2M |117.7 | ||
---> | ||
|
||
** AP<sup>test</sup> denotes COCO [test-dev2017](http://cocodataset.org/#upload) server results, all other AP results denote val2017 accuracy. | ||
** All AP numbers are for single-model single-scale without ensemble or TTA. **Reproduce mAP** by `python test.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65` | ||
** Speed<sub>GPU</sub> averaged over 5000 COCO val2017 images using a GCP [n1-standard-16](https://cloud.google.com/compute/docs/machine-types#n1_standard_machine_types) V100 instance, and includes image preprocessing, FP16 inference, postprocessing and NMS. NMS is 1-2ms/img. **Reproduce speed** by `python test.py --data coco.yaml --img 640 --conf 0.25 --iou 0.45` | ||
** All checkpoints are trained to 300 epochs with default settings and hyperparameters (no autoaugmentation). | ||
** Test Time Augmentation ([TTA](https://github.com/ultralytics/yolov5/issues/303)) runs at 3 image sizes. **Reproduce TTA** by `python test.py --data coco.yaml --img 832 --iou 0.65 --augment` | ||
[assets]: https://github.com/ultralytics/yolov5/releases | ||
|
||
Model |size<br><sup>(pixels) |mAP<sup>val<br>0.5:0.95 |mAP<sup>test<br>0.5:0.95 |mAP<sup>val<br>0.5 |Speed<br><sup>V100 (ms) | |params<br><sup>(M) |FLOPS<br><sup>640 (B) | ||
--- |--- |--- |--- |--- |--- |---|--- |--- | ||
[YOLOv5s][assets] |640 |36.7 |36.7 |55.4 |**2.0** | |7.3 |17.0 | ||
[YOLOv5m][assets] |640 |44.5 |44.5 |63.1 |2.7 | |21.4 |51.3 | ||
[YOLOv5l][assets] |640 |48.2 |48.2 |66.9 |3.8 | |47.0 |115.4 | ||
[YOLOv5x][assets] |640 |**50.4** |**50.4** |**68.8** |6.1 | |87.7 |218.8 | ||
| | | | | | || | | ||
[YOLOv5s6][assets] |1280 |43.3 |43.3 |61.9 |**4.3** | |12.7 |17.4 | ||
[YOLOv5m6][assets] |1280 |50.5 |50.5 |68.7 |8.4 | |35.9 |52.4 | ||
[YOLOv5l6][assets] |1280 |53.4 |53.4 |71.1 |12.3 | |77.2 |117.7 | ||
[YOLOv5x6][assets] |1280 |**54.4** |**54.4** |**72.0** |22.4 | |141.8 |222.9 | ||
| | | | | | || | | ||
[YOLOv5x6][assets] TTA |1280 |**55.0** |**55.0** |**72.0** |70.8 | |- |- | ||
|
||
<details> | ||
<summary>Table Notes (click to expand)</summary> | ||
|
||
* AP<sup>test</sup> denotes COCO [test-dev2017](http://cocodataset.org/#upload) server results, all other AP results denote val2017 accuracy. | ||
* AP values are for single-model single-scale unless otherwise noted. **Reproduce mAP** by `python test.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65` | ||
* Speed<sub>GPU</sub> averaged over 5000 COCO val2017 images using a GCP [n1-standard-16](https://cloud.google.com/compute/docs/machine-types#n1_standard_machine_types) V100 instance, and includes FP16 inference, postprocessing and NMS. **Reproduce speed** by `python test.py --data coco.yaml --img 640 --conf 0.25 --iou 0.45` | ||
* All checkpoints are trained to 300 epochs with default settings and hyperparameters (no autoaugmentation). | ||
* Test Time Augmentation ([TTA](https://github.com/ultralytics/yolov5/issues/303)) includes reflection and scale augmentation. **Reproduce TTA** by `python test.py --data coco.yaml --img 1536 --iou 0.7 --augment` | ||
</details> | ||
|
||
|
||
## Requirements | ||
|
||
Python 3.8 or later with all [requirements.txt](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) dependencies installed, including `torch>=1.7`. To install run: | ||
<!-- $ sudo apt update && apt install -y libgl1-mesa-glx libsm6 libxext6 libxrender-dev --> | ||
```bash | ||
$ pip install -r requirements.txt | ||
``` | ||
|
@@ -49,11 +67,12 @@ $ pip install -r requirements.txt | |
## Tutorials | ||
|
||
* [Train Custom Data](https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data) 🚀 RECOMMENDED | ||
* [Tips for Best Training Results](https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results) ☘️ RECOMMENDED | ||
* [Weights & Biases Logging](https://github.com/ultralytics/yolov5/issues/1289) 🌟 NEW | ||
* [Supervisely Ecosystem](https://github.com/ultralytics/yolov5/issues/2518) 🌟 NEW | ||
* [Multi-GPU Training](https://github.com/ultralytics/yolov5/issues/475) | ||
* [PyTorch Hub](https://github.com/ultralytics/yolov5/issues/36) ⭐ NEW | ||
* [ONNX and TorchScript Export](https://github.com/ultralytics/yolov5/issues/251) | ||
* [TorchScript, ONNX, CoreML Export](https://github.com/ultralytics/yolov5/issues/251) 🚀 | ||
* [Test-Time Augmentation (TTA)](https://github.com/ultralytics/yolov5/issues/303) | ||
* [Model Ensembling](https://github.com/ultralytics/yolov5/issues/318) | ||
* [Model Pruning/Sparsity](https://github.com/ultralytics/yolov5/issues/304) | ||
|
@@ -74,16 +93,15 @@ YOLOv5 may be run in any of the following up-to-date verified environments (with | |
|
||
## Inference | ||
|
||
detect.py runs inference on a variety of sources, downloading models automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases) and saving results to `runs/detect`. | ||
`detect.py` runs inference on a variety of sources, downloading models automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases) and saving results to `runs/detect`. | ||
```bash | ||
$ python detect.py --source 0 # webcam | ||
file.jpg # image | ||
file.mp4 # video | ||
path/ # directory | ||
path/*.jpg # glob | ||
rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa # rtsp stream | ||
rtmp://192.168.1.105/live/test # rtmp stream | ||
http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 # http stream | ||
'https://youtu.be/NUsoVlDFqZg' # YouTube video | ||
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream | ||
``` | ||
|
||
To run inference on example images in `data/images`: | ||
|
@@ -100,23 +118,22 @@ image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 1 tie, Done | |
Results saved to runs/detect/exp2 | ||
Done. (0.103s) | ||
``` | ||
<img src="https://user-images.githubusercontent.com/26833433/97107365-685a8d80-16c7-11eb-8c2e-83aac701d8b9.jpeg" width="500"> | ||
<img width="500" src="https://user-images.githubusercontent.com/26833433/97107365-685a8d80-16c7-11eb-8c2e-83aac701d8b9.jpeg"> | ||
|
||
### PyTorch Hub | ||
|
||
To run **batched inference** with YOLOv5 and [PyTorch Hub](https://github.com/ultralytics/yolov5/issues/36): | ||
Inference with YOLOv5 and [PyTorch Hub](https://github.com/ultralytics/yolov5/issues/36): | ||
```python | ||
import torch | ||
|
||
# Model | ||
model = torch.hub.load('ultralytics/yolov5', 'yolov5s') | ||
|
||
# Images | ||
dir = 'https://github.com/ultralytics/yolov5/raw/master/data/images/' | ||
imgs = [dir + f for f in ('zidane.jpg', 'bus.jpg')] # batch of images | ||
# Image | ||
img = 'https://ultralytics.com/images/zidane.jpg' | ||
|
||
# Inference | ||
results = model(imgs) | ||
results = model(img) | ||
results.print() # or .show(), .save() | ||
``` | ||
|
||
|
@@ -130,7 +147,7 @@ $ python train.py --data coco.yaml --cfg yolov5s.yaml --weights '' --batch-size | |
yolov5l 24 | ||
yolov5x 16 | ||
``` | ||
<img src="https://user-images.githubusercontent.com/26833433/90222759-949d8800-ddc1-11ea-9fa1-1c97eed2b963.png" width="900"> | ||
<img width="800" src="https://user-images.githubusercontent.com/26833433/90222759-949d8800-ddc1-11ea-9fa1-1c97eed2b963.png"> | ||
|
||
|
||
## Citation | ||
|
@@ -145,9 +162,9 @@ Ultralytics is a U.S.-based particle physics and AI startup with over 6 years of | |
- **Edge AI** integrated into custom iOS and Android apps for realtime **30 FPS video inference.** | ||
- **Custom data training**, hyperparameter evolution, and model exportation to any destination. | ||
|
||
For business inquiries and professional support requests please visit us at https://www.ultralytics.com. | ||
For business inquiries and professional support requests please visit us at https://ultralytics.com. | ||
|
||
|
||
## Contact | ||
|
||
**Issues should be raised directly in the repository.** For business inquiries or professional support requests please visit https://www.ultralytics.com or email Glenn Jocher at [email protected]. | ||
**Issues should be raised directly in the repository.** For business inquiries or professional support requests please visit https://ultralytics.com or email Glenn Jocher at [email protected]. |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# Global Wheat 2020 dataset http://www.global-wheat.com/ | ||
# Train command: python train.py --data GlobalWheat2020.yaml | ||
# Default dataset location is next to YOLOv5: | ||
# /parent_folder | ||
# /datasets/GlobalWheat2020 | ||
# /yolov5 | ||
|
||
|
||
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] | ||
train: # 3422 images | ||
- ../datasets/GlobalWheat2020/images/arvalis_1 | ||
- ../datasets/GlobalWheat2020/images/arvalis_2 | ||
- ../datasets/GlobalWheat2020/images/arvalis_3 | ||
- ../datasets/GlobalWheat2020/images/ethz_1 | ||
- ../datasets/GlobalWheat2020/images/rres_1 | ||
- ../datasets/GlobalWheat2020/images/inrae_1 | ||
- ../datasets/GlobalWheat2020/images/usask_1 | ||
|
||
val: # 748 images (WARNING: train set contains ethz_1) | ||
- ../datasets/GlobalWheat2020/images/ethz_1 | ||
|
||
test: # 1276 images | ||
- ../datasets/GlobalWheat2020/images/utokyo_1 | ||
- ../datasets/GlobalWheat2020/images/utokyo_2 | ||
- ../datasets/GlobalWheat2020/images/nau_1 | ||
- ../datasets/GlobalWheat2020/images/uq_1 | ||
|
||
# number of classes | ||
nc: 1 | ||
|
||
# class names | ||
names: [ 'wheat_head' ] | ||
|
||
|
||
# download command/URL (optional) -------------------------------------------------------------------------------------- | ||
download: | | ||
from utils.general import download, Path | ||
# Download | ||
dir = Path('../datasets/GlobalWheat2020') # dataset directory | ||
urls = ['https://zenodo.org/record/4298502/files/global-wheat-codalab-official.zip', | ||
'https://github.com/ultralytics/yolov5/releases/download/v1.0/GlobalWheat2020_labels.zip'] | ||
download(urls, dir=dir) | ||
# Make Directories | ||
for p in 'annotations', 'images', 'labels': | ||
(dir / p).mkdir(parents=True, exist_ok=True) | ||
# Move | ||
for p in 'arvalis_1', 'arvalis_2', 'arvalis_3', 'ethz_1', 'rres_1', 'inrae_1', 'usask_1', \ | ||
'utokyo_1', 'utokyo_2', 'nau_1', 'uq_1': | ||
(dir / p).rename(dir / 'images' / p) # move to /images | ||
f = (dir / p).with_suffix('.json') # json file | ||
if f.exists(): | ||
f.rename((dir / 'annotations' / p).with_suffix('.json')) # move to /annotations |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 | ||
# Train command: python train.py --data SKU-110K.yaml | ||
# Default dataset location is next to YOLOv5: | ||
# /parent_folder | ||
# /datasets/SKU-110K | ||
# /yolov5 | ||
|
||
|
||
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] | ||
train: ../datasets/SKU-110K/train.txt # 8219 images | ||
val: ../datasets/SKU-110K/val.txt # 588 images | ||
test: ../datasets/SKU-110K/test.txt # 2936 images | ||
|
||
# number of classes | ||
nc: 1 | ||
|
||
# class names | ||
names: [ 'object' ] | ||
|
||
|
||
# download command/URL (optional) -------------------------------------------------------------------------------------- | ||
download: | | ||
import shutil | ||
from tqdm import tqdm | ||
from utils.general import np, pd, Path, download, xyxy2xywh | ||
# Download | ||
datasets = Path('../datasets') # download directory | ||
urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz'] | ||
download(urls, dir=datasets, delete=False) | ||
# Rename directories | ||
dir = (datasets / 'SKU-110K') | ||
if dir.exists(): | ||
shutil.rmtree(dir) | ||
(datasets / 'SKU110K_fixed').rename(dir) # rename dir | ||
(dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir | ||
# Convert labels | ||
names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names | ||
for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv': | ||
x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations | ||
images, unique_images = x[:, 0], np.unique(x[:, 0]) | ||
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f: | ||
f.writelines(f'./images/{s}\n' for s in unique_images) | ||
for im in tqdm(unique_images, desc=f'Converting {dir / d}'): | ||
cls = 0 # single-class dataset | ||
with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f: | ||
for r in x[images == im]: | ||
w, h = r[6], r[7] # image width, height | ||
xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance | ||
f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label |
Oops, something went wrong.