Skip to main content

Pytorch-YOLOv4

A minimal PyTorch implementation of YOLOv4.

├── README.md
├── dataset.py            dataset
├── demo.py               demo to run pytorch --> tool/darknet2pytorch
├── demo_darknet2onnx.py  tool to convert into onnx --> tool/darknet2pytorch
├── demo_pytorch2onnx.py  tool to convert into onnx
├── models.py             model for pytorch
├── train.py              train models.py
├── cfg.py                cfg.py for train
├── cfg                   cfg --> darknet2pytorch
├── data            
├── weight                --> darknet2pytorch
├── tool
│   ├── camera.py           a demo camera
│   ├── coco_annotatin.py       coco dataset generator
│   ├── config.py
│   ├── darknet2pytorch.py
│   ├── region_loss.py
│   ├── utils.py
│   └── yolo_layer.py

image

Wildflower Forked Version

Changes

  • Run using a CLI (yolov4)
  • Automatically download weights
  • PyPi ready so project can be used as a library

0. Weights Download

0.1 darkent

0.2 pytorch

you can use darknet2pytorch to convert it yourself, or download my converted model.

1. Train

use yolov4 to train your own data

  1. Download weight

  2. Transform data

    For coco dataset,you can use tool/coco_annotatin.py.

    # train.txt
    image_path1 x1,y1,x2,y2,id x1,y1,x2,y2,id x1,y1,x2,y2,id ...
    image_path2 x1,y1,x2,y2,id x1,y1,x2,y2,id x1,y1,x2,y2,id ...
    ...
    ...
    
  3. Train

    you can set parameters in cfg.py.

     python train.py -g [GPU_ID] -dir [Dataset direction] ...
    

2. Inference (Evolving)

  • Image input size for inference

    Image input size is NOT restricted in 320 * 320, 416 * 416, 512 * 512 and 608 * 608. You can adjust your input sizes for a different input ratio, for example: 320 * 608. Larger input size could help detect smaller targets, but may be slower and GPU memory exhausting.

    height = 320 + 96 * n, n in {0, 1, 2, 3, ...}
    width  = 320 + 96 * m, m in {0, 1, 2, 3, ...}
    
  • Different inference options

    • Load the pretrained darknet model and darknet weights to do the inference (image size is configured in cfg file already)

      python demo.py -cfgfile <cfgFile> -weightfile <weightFile> -imgfile <imgFile>
      
    • Load pytorch weights (pth file) to do the inference

      python models.py <num_classes> <weightfile> <imgfile> <IN_IMAGE_H> <IN_IMAGE_W> <namefile(optional)>
      
    • Load converted ONNX file to do inference (See section 3 and 4)

    • Load converted TensorRT engine file to do inference (See section 5)

  • Inference output

    Inference output is of shape [batch, num_boxes, 4 + num_classes] in which [batch, num_boxes, 4] is x_center, y_center, width, height of bounding boxes, and [batch, num_boxes, num_classes] is confidences of bounding box for all classes.

    Until now, still a small piece of post-processing including NMS is required. We are trying to minimize time and complexity of post-processing.

3. Darknet2ONNX (Evolving)

  • This script is to convert the official pretrained darknet model into ONNX

  • Pytorch version Recommended: 1.4.0

  • Install onnxruntime

    pip install onnxruntime
    
  • Run python script to generate ONNX model and run the demo

    python demo_darknet2onnx.py <cfgFile> <weightFile> <imageFile> <batchSize>
    

    This script will generate 2 ONNX models.

    • One is for running the demo (batch_size=1)
    • The other one is what you want to generate (batch_size=batchSize)

4. Pytorch2ONNX (Evolving)

  • You can convert your trained pytorch model into ONNX using this script

  • Pytorch version Recommended: 1.4.0

  • Install onnxruntime

    pip install onnxruntime
    
  • Run python script to generate ONNX model and run the demo

    python demo_pytorch2onnx.py <weight_file> <image_path> <batch_size> <n_classes> <IN_IMAGE_H> <IN_IMAGE_W>
    

    For example:

    python demo_pytorch2onnx.py yolov4.pth dog.jpg 8 80 416 416
    

    This script will generate 2 ONNX models.

    • One is for running the demo (batch_size=1)
    • The other one is what you want to generate (batch_size=batch_size)

5. ONNX2TensorRT (Evolving)

  • TensorRT version Recommended: 7.0, 7.1

  • Run the following command to convert VOLOv4 ONNX model into TensorRT engine

    trtexec --onnx=<onnx_file> --explicitBatch --saveEngine=<tensorRT_engine_file> --workspace=<size_in_megabytes> --fp16
    
    • Note: If you want to use int8 mode in conversion, extra int8 calibration is needed.
  • Run the demo

    python demo_trt.py <tensorRT_engine_file> <input_image> <input_H> <input_W>
    
    • This demo here only works when batchSize=1, but you can update this demo a little for batched inputs.

    • Note1: input_H and input_W should agree with the input size in the original ONNX file.

    • Note2: extra NMS operations are needed for the tensorRT output. This demo uses python NMS code from tool/utils.py.

    • Inference on X86 is verified to be okay for TensorRT 7.0, but output of the first iteration each time engine is loaded may be wrong on Jetson platforms. If you are using Jetpack 4.4 DP on Jetson platforms, try to ignore the first iteration each time as a workaround.

6. ONNX2Tensorflow

Reference:

@article{yolov4,
  title={YOLOv4: YOLOv4: Optimal Speed and Accuracy of Object Detection},
  author={Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao},
  journal = {arXiv},
  year={2020}
}

Metadata

Release files for wf-pytorch-yolo-v4 0.1.0

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

Source distribution (sdist)

Source distribution for wf-pytorch-yolo-v4 0.1.0
File Size Uploaded
wf-pytorch-yolo-v4-0.1.0.tar.gz 21.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wf-pytorch-yolo-v4 0.1.0
File Interpreter ABI Platform
wf_pytorch_yolo_v4-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.5 kB

Release files / wf-pytorch-yolo-v4-0.1.0.tar.gz

Download URL wf-pytorch-yolo-v4-0.1.0.tar.gz
Size 21.4 kB
Tags Source
SHA-256 checksum
How to use checksums
11faab637f27f46f302a6c76da7d4c0d38b66e68e7c28a80040c5b02a09f95a1
BLAKE2b-256 checksum
How to use checksums
8be16173947e746d96f6e2039c71d0dc27548d7dd7d3ce178e608e0e60a4cf0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2

Release files / wf_pytorch_yolo_v4-0.1.0-py3-none-any.whl

Download URL wf_pytorch_yolo_v4-0.1.0-py3-none-any.whl
Size 30.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
50c6c017f7e71444482c75719b16a1cf5e42621f57a018c5127babda6ff3b729
BLAKE2b-256 checksum
How to use checksums
103db339cd2f0bfae39b49fce1f39d730d4ce50aff2a9fa829eccf8480f78670
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2

Release history Release notifications | RSS feed

0.2.2

2 release files

0.2.0

2 release files

0.1.13

3 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

3 release files

0.1.7

3 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.1

3 release files

This release

0.1.0 This release

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