Giter Site home page Giter Site logo

potipot / yolov5 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from robin-maillot/yolov5

0.0 0.0 0.0 22.24 MB

YOLOv5 in PyTorch > ONNX > CoreML > iOS

Home Page: https://www.ultralytics.com

License: GNU General Public License v3.0

Dockerfile 1.16% Shell 2.79% Python 96.05%

yolov5's Introduction

ย 

CI CPU testing

This repository represents Ultralytics open-source research into future object detection methods, and incorporates our lessons learned and best practices evolved over training thousands of models on custom client datasets with our previous YOLO repository https://github.com/ultralytics/yolov3. All code and models are under active development, and are subject to modification or deletion without notice. Use at your own risk.

** 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 at batch size 8.

  • August 13, 2020: v3.0 release: nn.Hardswish() activations, data autodownload, native AMP.
  • July 23, 2020: v2.0 release: improved model definition, training and mAP.
  • June 22, 2020: PANet updates: new heads, reduced parameters, improved speed and mAP 364fcfd.
  • June 19, 2020: FP16 as new default for smaller checkpoints and faster inference d4c6674.
  • June 9, 2020: CSP updates: improved speed, size, and accuracy (credit to @WongKinYiu for CSP).
  • May 27, 2020: Public release. YOLOv5 models are SOTA among all known YOLO implementations.
  • April 1, 2020: Start development of future compound-scaled YOLOv3/YOLOv4-based PyTorch models.

Pretrained Checkpoints

Model APval APtest AP50 SpeedGPU FPSGPU params FLOPS
YOLOv5s 37.0 37.0 56.2 2.4ms 416 7.5M 13.2B
YOLOv5m 44.3 44.3 63.2 3.4ms 294 21.8M 39.4B
YOLOv5l 47.7 47.7 66.5 4.4ms 227 47.8M 88.1B
YOLOv5x 49.2 49.2 67.7 6.9ms 145 89.0M 166.4B
YOLOv5x + TTA 50.8 50.8 68.9 25.5ms 39 89.0M 354.3B
YOLOv3-SPP 45.6 45.5 65.2 4.5ms 222 63.0M 118.0B

** APtest denotes COCO test-dev2017 server results, all other AP results in the table denote val2017 accuracy.
** All AP numbers are for single-model single-scale without ensemble or test-time augmentation. Reproduce by python test.py --data coco.yaml --img 640 --conf 0.001
** SpeedGPU measures end-to-end time per image averaged over 5000 COCO val2017 images using a GCP n1-standard-16 instance with one V100 GPU, and includes image preprocessing, PyTorch FP16 image inference at --batch-size 32 --img-size 640, postprocessing and NMS. Average NMS time included in this chart is 1-2ms/img. Reproduce by python test.py --data coco.yaml --img 640 --conf 0.1
** All checkpoints are trained to 300 epochs with default settings and hyperparameters (no autoaugmentation). ** Test Time Augmentation (TTA) runs at 3 image sizes. Reproduce by python test.py --data coco.yaml --img 832 --augment

Requirements

Python 3.8 or later with all requirements.txt dependencies installed, including torch>=1.6. To install run:

$ pip install -r requirements.txt

Install as Module

To install yolov5 as a module you can either:

  • Gret from git directly:
    • pip install git+https://github.com/robin-maillot/yolov5.git -f https://download.pytorch.org/whl/torch_stable.html
  • Clone the repo and:
    • python setup.py install from the root folder
    • pip install . -f https://download.pytorch.org/whl/torch_stable.html from the root folder
    • pip install . from the root folder (on windows only compatible with pip<1.9)

Tutorials

Environments

YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):

Nanovare inference

If you pass at least one nanovare arguments, detect_nanovare is in nanovare mode (run localization, tracking on the all MAST capture dataset) but is ultralytics-friendly (accept ultralytics arguments). The nanovare mode only loops on the Mast capture dataset by date and patient and overwrites the ultralytics --source arguments and call the original ultralytics detect.py on this patient dataset. The nanovare mode performs tasks for each patient under the supervision of luigi so you can quit a detect_nanovare process with no damage. It will start back where it stopped. You can invalidate a task by passing the --invalidate arguments if you wish to rerun a task for any reasons (data changed, task not performed as expected, test, ...)

If using the nanovare mode, you need to set the $PATH_DATA env variable in .env or in the shell to indicate where the capture dataset is. $PATH_DATA / "capture_MAST_data" is the capture dataset. AND you need to set the $MAST_ANALYSIS_IDENTIFIER at YOLO to output proper nanovare-friendly localization output (tracking input) inside this capture MAST dataset to avoid conflict with localization output from another MAST method.

If you pass at least one nanovare argument, detect_nanovare is in nanovare mode:

python detect_nanovare.py --run-tracking    # Run localization for each patient then tracking for each patient (luigi runs the localization task because tracking depends on localization)  
python detect_nanovare.py --run-localization
                          --run-tracking    # Run localization for all patient then tracking for all patient
                    
python detect_nanovare.py --run-tracking    # Run localization for tp23 then tracking patient for tp23
                          --patient-id tp23 # Filter by patient_id
                          --date 2020_05_12 # Filter by date
                          --invalidate      # Invalidate the task TaskRunTracking(patient_id=tp23, date=2020_05_12) before running it again
                                            # Invalidates also automatically all upstream tasks; here the only upstream task 
                                            # to be invalidated is TaskRunLocalization(patient_id=tp23, date=2020_05_12) before running it again
python detect_nanovare.py --run-tracking
                          --patient-id tp23                                                                        # Nanovare arg
                          --date 2020_05_12                                                                        # Nanovare arg
                          --invalidate                                                                             # Nanovare arg
                          --iou-thres 0.8                                                                          # Ultralytics arg
                          --weights ..\..\data\analysis\yolo\minimal_deformation\runs\exp0\weights\weights\best.pt # Ultralytics arg

Else if you pass only ultralytics arguments, detect_nanovare is in ultralytics mode

 python detect_nanovare.py --source  ..\..\data\Karolinska\capture_MAST_data\2020_05_12\test-patient-03 # Ultralytics arg
                           --iou-thres 0.8                                                              # Ultralytics arg

All nanovare options:

(.windows_venv38) Q:\dev\yolov5>python detect_nanovare.py -h
usage: detect_nanovare.py [-h] [--patient-id PATIENT_ID] [--date DATE] [--run-localization] [--run-tracking]
                          [--run-viz] [--invalidate]

optional arguments:
  -h, --help            show this help message and exit
  --patient-id PATIENT_ID
                        Filter a patient ID
  --date DATE           Filter a date
  --run-localization    Run localization
  --run-tracking        Run tracking
  --run-viz             Run vizualization after tracking
  --invalidate          Invalidate task to run again if already completed

Inference

detect.py runs inference on a variety of sources, downloading models automatically from the latest YOLOv5 release and saving results to inference/output.

$ 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

To run inference on example images in inference/images:

$ python detect.py --source inference/images --weights yolov5s.pt --conf 0.25

Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', img_size=640, iou_thres=0.45, output='inference/output', save_conf=False, save_txt=False, source='inference/images', update=False, view_img=False, weights='yolov5s.pt')
Using CUDA device0 _CudaDeviceProperties(name='Tesla V100-SXM2-16GB', total_memory=16160MB)

Downloading https://github.com/ultralytics/yolov5/releases/download/v3.0/yolov5s.pt to yolov5s.pt... 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 14.5M/14.5M [00:00<00:00, 21.3MB/s]

Fusing layers... 
Model Summary: 140 layers, 7.45958e+06 parameters, 0 gradients
image 1/2 yolov5/inference/images/bus.jpg: 640x480 4 persons, 1 buss, 1 skateboards, Done. (0.013s)
image 2/2 yolov5/inference/images/zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.013s)
Results saved to yolov5/inference/output
Done. (0.124s)

PyTorch Hub

To run batched inference with YOLOv5 and PyTorch Hub:

import torch
from PIL import Image

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).fuse().eval()  # yolov5s.pt
model = model.autoshape()  # for autoshaping of PIL/cv2/np inputs and NMS

# Images
img1 = Image.open('zidane.jpg')
img2 = Image.open('bus.jpg')
imgs = [img1, img2]  # batched list of images

# Inference
prediction = model(imgs, size=640)  # includes NMS

Nanovare Training

If you pass at least one nanovare arguments, detect_nanovare is in nanovare mode (creates, download and check a supervisely dataset, convert it to yolo and train) but is ultralytics-friendly (accept ultralytics arguments). The nanovare mode creates a new dataset, overwrites the ultralytics --data arguments and call the original ultralytics train.py. This pipeline is tracked thanks to a identifier called 'pipeline_name' that you call as an argument --pipeline-name pipeline_name. All datasets and datas related will fall into the 'pipeline_name' folder. To the contrary of detect_nanovare, the nanovare mode of training does not performs task under the supervision of luigi yet.

If using the nanovare mode, you need to set the $ANALYSIS_PATH_DATA (ex: ../../data/analysis) env variable in .env or in the shell to indicate where the yolo data folder is. $ANALYSIS_PATH_DATA / "yolo" is the yolo data folder. AND you need to set the supervisely variables SUPERVISELY_PATH_DATA (ex: ../../data/supervisely) for the download folder and SUPERVISELY_API_KEY to set your API token.

If you pass at least one nanovare argument, train is in nanovare mode:

python train.py --pipeline-name strong_mosaic_aug # specify a pipeline name
                --init-supervisely zoe+vincent    # Download the supervisely dataset if not already
                --init-yolo                       # Convert it to a yolov5-friendly dataset
                --run-train                       # Launch the training on this dataset 
python train.py --pipeline-name strong_mosaic_aug                                                             # Nanovare arg
                --run-train                                                                   # Nanovare arg
                --resume ..\..\data\analysis\yolo\strong_mosaic_aug\runs\exp6\weights\last.pt # Ultralytics arg
                    

Else if you pass only ultralytics arguments, train is in ultralytics mode

 python train.py --data  ..\..\data\analysis\yolo\strong_mosaic_aug\data.yaml       # Ultralytics arg
                 --hyp  ..\..\data\analysis\yolo\strong_mosaic_aug\hyp.scratch.yaml # Ultralytics arg
                 --nosave                                                           # Ultralytics arg
                 --notest                                                           # Ultralytics arg
                 --epochs 150                                                       # Ultralytics arg

All nanovare options:

(.windows_venv38) Q:\dev\yolov5>python train.py -h
usage: train.py [-h] [--pipeline-name PIPELINE_NAME]
                [--init-supervisely {zoe,vincent,zoe+vincent}] [--init-yolo]
                [--color {bgr,gray,green}] [--copy-pipeline COPY_PIPELINE]
                [--run-train]

optional arguments:
  -h, --help            show this help message and exit
  --pipeline-name PIPELINE_NAME
                        Name of the pipeline
  --init-supervisely {zoe,vincent,zoe+vincent}
                        Download, check integrity and merge a filtered
                        supervisely dataset
  --init-yolo           Convert a supervisely dataset to a yolo dataset
  --color {bgr,gray,green}
                        (ONLY IF --init-yolo)
  --copy-pipeline COPY_PIPELINE
                        Choose the same dataset from another pipeline for
                        comparison (ONLY IF --init-yolo)
  --run-train           Train

Training

Download COCO and run command below. Training times for YOLOv5s/m/l/x are 2/4/6/8 days on a single V100 (multi-GPU times faster). Use the largest --batch-size your GPU allows (batch sizes shown for 16 GB devices).

$ python train.py --data coco.yaml --cfg yolov5s.yaml --weights '' --batch-size 64
                                         yolov5m                                40
                                         yolov5l                                24
                                         yolov5x                                16

Citation

DOI

About Us

Ultralytics is a U.S.-based particle physics and AI startup with over 6 years of expertise supporting government, academic and business clients. We offer a wide range of vision AI services, spanning from simple expert advice up to delivery of fully customized, end-to-end production solutions, including:

  • Cloud-based AI systems operating on hundreds of HD video streams in realtime.
  • 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.

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].

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.