pytorch-YOLOv4-master

所属分类:数值算法/人工智能
开发工具:Python
文件大小:718KB
下载次数:1
上传日期:2020-11-01 10:51:03
上 传 者NeXT君子不器
说明:  基于pytorch的yolov4检测算法,较先前算法性能有较大的提升
(Compared with previous algorithms, the performance of yolov4 detection algorithm based on Python has been greatly improved)

文件列表:
DeepStream (0, 2020-09-02)
DeepStream\config_infer_primary_yoloV4.txt (3424, 2020-09-02)
DeepStream\deepstream_app_config_yoloV4.txt (4239, 2020-09-02)
DeepStream\labels.txt (621, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo (0, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\Makefile (2319, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\kernels.cu (3373, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\nvdsinfer_yolo_engine.cpp (4101, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\nvdsparsebbox_Yolo.cpp (21335, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\trt_utils.cpp (16571, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\trt_utils.h (3449, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\yolo.cpp (20099, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\yolo.h (3242, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\yoloPlugins.cpp (3961, 2020-09-02)
DeepStream\nvdsinfer_custom_impl_Yolo\yoloPlugins.h (5346, 2020-09-02)
License.txt (11560, 2020-09-02)
Use_yolov4_to_train_your_own_data.md (3111, 2020-09-02)
cfg.py (1573, 2020-09-02)
cfg (0, 2020-09-02)
cfg\yolov3-tiny.cfg (2025, 2020-09-02)
cfg\yolov3.cfg (8342, 2020-09-02)
cfg\yolov4-custom.cfg (12207, 2020-09-02)
cfg\yolov4-tiny.cfg (3027, 2020-09-02)
cfg\yolov4.cfg (12230, 2020-09-02)
data (0, 2020-09-02)
data\coco.names (625, 2020-09-02)
data\dog.jpg (163759, 2020-09-02)
data\giraffe.jpg (382965, 2020-09-02)
data\prediction.jpg (78882, 2020-09-02)
data\voc.names (135, 2020-09-02)
dataset.py (16988, 2020-09-02)
demo.py (4588, 2020-09-02)
demo_darknet2onnx.py (2223, 2020-09-02)
demo_pytorch2onnx.py (3456, 2020-09-02)
demo_tensorflow.py (2974, 2020-09-02)
... ...

# Pytorch-YOLOv4 ![](https://img.shields.io/static/v1?label=python&message=3.6|3.7&color=blue) ![](https://img.shields.io/static/v1?label=pytorch&message=1.4&color=) [![](https://img.shields.io/static/v1?label=license&message=Apache2&color=green)](./License.txt) A minimal PyTorch implementation of YOLOv4. - Paper Yolo v4: https://arxiv.org/abs/2004.10934 - Source code:https://github.com/AlexeyAB/darknet - More details: http://pjreddie.com/darknet/yolo/ - [x] Inference - [x] Train - [x] Mocaic ``` ├── 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_annotation.py coco dataset generator │ ├── config.py │ ├── darknet2pytorch.py │ ├── region_loss.py │ ├── utils.py │ └── yolo_layer.py ``` ![image](https://user-gold-cdn.xitu.io/2020/4/26/171b5a6c8b3bd513?w=768&h=576&f=jpeg&s=78882) # 0. Weights Download ## 0.1 darknet - baidu(https://pan.baidu.com/s/1dAGEW8cm-dqK14TbhhVetA Extraction code:dm5b) - google(https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT) ## 0.2 pytorch you can use darknet2pytorch to convert it yourself, or download my converted model. - baidu - yolov4.pth(https://pan.baidu.com/s/1ZroDvoGScDgtE1ja_QqJVw Extraction code:xrq9) - yolov4.conv.137.pth(https://pan.baidu.com/s/1ovBie4YyVQQoUrC3AY0joA Extraction code:kcel) - google - yolov4.pth(https://drive.google.com/open?id=1wv_LiFeCRYwtpkqREPeI13-gPELBDwuJ) - yolov4.conv.137.pth(https://drive.google.com/open?id=1fcbR0bWzYfIEdLJPzOsn4R5mlvR6IQyA) # 1. Train [use yolov4 to train your own data](Use_yolov4_to_train_your_own_data.md) 1. Download weight 2. Transform data For coco dataset,you can use tool/coco_annotation.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 ## 2.1 Performance on MS COCO dataset (using pretrained DarknetWeights from ) **ONNX and TensorRT models are converted from Pytorch (TianXiaomo): Pytorch->ONNX->TensorRT.** See following sections for more details of conversions. - val2017 dataset (input size: 416x416) | Model type | AP | AP50 | AP75 | APS | APM | APL | | ------------------- | ----------: | ----------: | ----------: | ----------: | ----------: | ----------: | | DarkNet (YOLOv4 paper)| 0.471 | 0.710 | 0.510 | 0.278 | 0.525 | 0.636 | | Pytorch (TianXiaomo)| 0.466 | 0.704 | 0.505 | 0.267 | 0.524 | 0.629 | | TensorRT FP32 + BatchedNMSPlugin | 0.472| 0.708 | 0.511 | 0.273 | 0.530 | 0.637 | | TensorRT FP16 + BatchedNMSPlugin | 0.472| 0.708 | 0.511 | 0.273 | 0.530 | 0.636 | - testdev2017 dataset (input size: 416x416) | Model type | AP | AP50 | AP75 | APS | APM | APL | | ------------------- | ----------: | ----------: | ----------: | ----------: | ----------: | ----------: | | DarkNet (YOLOv4 paper)| 0.412 | 0.628 | 0.443 | 0.204 | 0.444 | 0.560 | | Pytorch (TianXiaomo)| 0.404 | 0.615 | 0.436 | 0.196 | 0.438 | 0.552 | | TensorRT FP32 + BatchedNMSPlugin | 0.412| 0.625 | 0.445 | 0.200 | 0.446 | 0.5*** | | TensorRT FP16 + BatchedNMSPlugin | 0.412| 0.625 | 0.445 | 0.200 | 0.446 | 0.563 | ## 2.2 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. ```py height = 320 + 96 * n, n in {0, 1, 2, 3, ...} width = 320 + 96 * m, m in {0, 1, 2, 3, ...} ``` ## 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) ```sh python demo.py -cfgfile -weightfile -imgfile ``` - Load pytorch weights (pth file) to do the inference ```sh python models.py ``` - Load converted ONNX file to do inference (See section 3 and 4) - Load converted TensorRT engine file to do inference (See section 5) ## 2.4 Inference output There are 2 inference outputs. - One is locations of bounding boxes, its shape is `[batch, num_boxes, 1, 4]` which represents x1, y1, x2, y2 of each bounding box. - The other one is scores of bounding boxes which is of shape `[batch, num_boxes, num_classes]` indicating scores of all classes for each bounding box. 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 - **This script is to convert the official pretrained darknet model into ONNX** - **Pytorch version Recommended:** - Pytorch 1.4.0 for TensorRT 7.0 and higher - Pytorch 1.5.0 and 1.6.0 for TensorRT 7.1.2 and higher - **Install onnxruntime** ```sh pip install onnxruntime ``` - **Run python script to generate ONNX model and run the demo** ```sh python demo_darknet2onnx.py ``` ## 3.1 Dynamic or static batch size - **Positive batch size will generate ONNX model of static batch size, otherwise, batch size will be dynamic** - Dynamic batch size will generate only one ONNX model - Static batch size will generate 2 ONNX models, one is for running the demo (batch_size=1) # 4. Pytorch2ONNX - **You can convert your trained pytorch model into ONNX using this script** - **Pytorch version Recommended:** - Pytorch 1.4.0 for TensorRT 7.0 and higher - Pytorch 1.5.0 and 1.6.0 for TensorRT 7.1.2 and higher - **Install onnxruntime** ```sh pip install onnxruntime ``` - **Run python script to generate ONNX model and run the demo** ```sh python demo_pytorch2onnx.py ``` For example: ```sh python demo_pytorch2onnx.py yolov4.pth dog.jpg 8 80 416 416 ``` ## 4.1 Dynamic or static batch size - **Positive batch size will generate ONNX model of static batch size, otherwise, batch size will be dynamic** - Dynamic batch size will generate only one ONNX model - Static batch size will generate 2 ONNX models, one is for running the demo (batch_size=1) # 5. ONNX2TensorRT - **TensorRT version Recommended: 7.0, 7.1** ## 5.1 Convert from ONNX of static Batch size - **Run the following command to convert YOLOv4 ONNX model into TensorRT engine** ```sh trtexec --onnx= --explicitBatch --saveEngine= --workspace= --fp16 ``` - Note: If you want to use int8 mode in conversion, extra int8 calibration is needed. ## 5.2 Convert from ONNX of dynamic Batch size - **Run the following command to convert YOLOv4 ONNX model into TensorRT engine** ```sh trtexec --onnx= \ --minShapes=input: --optShapes=input: --maxShapes=input: \ --workspace= --saveEngine= --fp16 ``` - For example: ```sh trtexec --onnx=yolov4_-1_3_320_512_dynamic.onnx \ --minShapes=input:1x3x320x512 --optShapes=input:4x3x320x512 --maxShapes=input:8x3x320x512 \ --workspace=2048 --saveEngine=yolov4_-1_3_320_512_dynamic.engine --fp16 ``` ## 5.3 Run the demo ```sh python demo_trt.py ``` - This demo here only works when batchSize is dynamic (1 should be within dynamic range) or batchSize=1, but you can update this demo a little for other dynamic or static batch sizes. - 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`. # 6. ONNX2Tensorflow - **First:Conversion to ONNX** tensorflow >=2.0 1: Thanks:github:https://github.com/onnx/onnx-tensorflow 2: Run git clone https://github.com/onnx/onnx-tensorflow.git && cd onnx-tensorflow Run pip install -e . Note:Errors will occur when using "pip install onnx-tf", at least for me,it is recommended to use source code installation # 7. ONNX2TensorRT and DeepStream Inference 1. Compile the DeepStream Nvinfer Plugin ``` cd DeepStream make ``` 2. Build a TRT Engine. For single batch, ``` trtexec --onnx= --explicitBatch --saveEngine= --workspace= --fp16 ``` For multi-batch, ``` trtexec --onnx= --explicitBatch --shapes=input:Xx3xHxW --optShapes=input:Xx3xHxW --maxShapes=input:Xx3xHxW --minShape=input:1x3xHxW --saveEngine= --fp16 ``` Note :The maxShapes could not be larger than model original shape. 3. Write the deepstream config file for the TRT Engine. Reference: - https://github.com/eriklindernoren/PyTorch-YOLOv3 - https://github.com/marvis/pytorch-caffe-darknet-convert - https://github.com/marvis/pytorch-yolo3 ``` @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} } ```

近期下载者

相关文件


收藏者