# YOLOv5-Paddle **Repository Path**: za_sleep/yolov5-paddle ## Basic Information - **Project Name**: YOLOv5-Paddle - **Description**: 导入郭权浩大佬基于paddlepaddle的Yolov5代码,解决github上下载缓慢的问题 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-04-11 - **Last Updated**: 2024-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Run on AIstudio
[English](README.md) | [简体中文](README.zh-CN.md) 这篇由郭权浩创建的YOLOv5-Paddle 🚀笔记本提供了简单的训练、验证、预测和模型导出示例。YOLOv5-Paddle先在支持多种格式的单精度和半精度模型导出。 在代码运行上遇到问题请联系以提供便捷的支持。

☑ [PaddleLite](https://www.paddlepaddle.org.cn/lite/v2.12/api_reference/python_api/opt.html) ☑ [PaddleInference](https://www.paddlepaddle.org.cn/inference/v2.4/guides/export_model/paddle_model_export.html) ☑ [ONNX](https://github.com/PaddlePaddle/Paddle2ONNX) ☑ [OpenVIVO](https://github.com/openvinotoolkit/openvino) ☑ [TensorRT](https://github.com/PaddlePaddle/Paddle2ONNX)
##
目标检测
安装 克隆仓库并安装 [requirements.txt](https://github.com/GuoQuanhao/yolov5-Paddle/blob/main/requirements.txt),并且 [**Python>=3.7.0**](https://www.python.org/),[**PaddlePaddle>=2.4.0**](https://www.paddlepaddle.org.cn/). ```bash git clone https://github.com/GuoQuanhao/yolov5-Paddle # clone cd yolov5-Paddle pip install -r requirements.txt # install ```
训练 下方命令能够重现YOLOv5的 [COCO](https://github.com/GuoQuanhao/yolov5-Paddle/blob/main/data/scripts/get_coco.sh) 结果. [模型](https://github.com/GuoQuanhao/yolov5-Paddle/tree/main/models) 和 [数据集](https://github.com/GuoQuanhao/yolov5-Paddle/tree/main/data) 能够重最新的YOLOv5 [release](https://github.com/GuoQuanhao/yolov5-Paddle/releases/tag/v2.0)中自动下载。 下面展示了在V100-16GB上的Batch sizes。 ```bash # (from scratch)Single-GPU or CPU python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128 --device '' yolov5s 64 cpu yolov5m 40 0 yolov5l 24 1 yolov5x 16 2 # (pretrained)Single-GPU or CPU python train.py --data coco.yaml --epochs 300 --weights yolov5n.pdparams --batch-size 128 --device '' yolov5s 64 cpu yolov5m 40 0 yolov5l 24 1 yolov5x 16 2 ``` ```bash # Multi-GPU, from scratch and pretrained as above python -m paddle.distributed.launch --gpus 0,1,2,3 train.py --weights '' --cfg yolov5n.yaml --batch-size 128 --data coco.yaml --epochs 300 --device 0,1,2,3 yolov5s 64 yolov5m 40 yolov5l 24 yolov5x 16 ```
评估 ```bash # (from scratch)Single-GPU or CPU python val.py --data coco.yaml --weights yolov5n.pdparams --img 640 --conf 0.001 --iou 0.65 --device '' yolov5s cpu yolov5m 0 yolov5l 1 yolov5x 2 ```
推理 YOLOv5 PaddlePaddle inference. Models download automatically from the latest ```python # Model python hubconf.py # or yolov5n - yolov5x6, custom ``` `detect.py` 能够利用`--source`指定各种媒体资源,并自动从百度云智能云服务器下载PaddlePaddle模型,并将检测结果保存在`runs/detect`。 ```bash python detect.py --weights yolov5s.pdparams --source 0 # webcam img.jpg # image vid.mp4 # video screen # screenshot path/ # directory list.txt # list of images list.streams # list of streams 'path/*.jpg' # glob 'https://youtu.be/Zgi9g1ksQHc' # YouTube 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream ```
benchmark ```bash python benchmarks.py --weights ./yolov5s.pdparams --device 0 ``` ``` Benchmarks complete (187.81s) Format Size (MB) mAP50-95 Inference time (ms) 0 PaddlePaddle 13.9 0.4716 9.75 1 PaddleInference 27.8 0.4716 20.82 2 ONNX 27.6 0.4717 32.23 3 TensorRT 32.2 0.4717 3.05 4 OpenVINO 27.9 0.4717 43.67 5 PaddleLite 27.8 0.4717 264.86 ```
YOLOv5 与 YOLOv5-P5 640

图片中的注意事项 - **COCO AP val** 表示在 5000 张图像的 [COCO val2017](http://cocodataset.org) 数据集上测量的 mAP@0.5:0.95 指标,推理大小从 256 到 1536。 - **GPU Speed** 使用批量大小为 32 的 [AWS p3.2xlarge](https://aws.amazon.com/ec2/instance-types/p3/) V100 实例测量 [COCO val2017](http://cocodataset.org) 数据集上每张图像的平均推理时间。 - **Reproduce** 通过 `python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n6.pdparams yolov5s6.pdparams yolov5m6.pdparams yolov5l6.pdparams yolov5x6.pdparams`
目标检测模型权重 PaddlePaddle实现了对精度、参数和flops的验证,未利用PaddlePaddle验证推理速度。 | Model | size
(pixels) | mAPval
50-95 | mAPval
50 | Speed
CPU b1
(ms) | Speed
V100 b1
(ms) | Speed
V100 b32
(ms) | params
(M) | FLOPs
@640 (B) | | ----------------------------------------------------------------------------------------------- | --------------------- | -------------------- | ----------------- | ---------------------------- | ----------------------------- | ------------------------------ | ------------------ | ---------------------- | | YOLOv5n | 640 | 28.0 | 45.7 | **45** | **6.3** | **0.6** | **1.9** | **4.5** | | YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 | | YOLOv5m | 640 | 45.3 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 | | YOLOv5l | 640 | 49.0 | 67.4 | 430 | 10.1 | 2.7 | 46.5 | 109.1 | | YOLOv5x | 640 | 50.6 | 68.8 | 766 | 12.1 | 4.8 | 86.7 | 205.7 | | | | | | | | | | | | YOLOv5n6 | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 | | YOLOv5s6 | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 | | YOLOv5m6 | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 | | YOLOv5l6 | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 | | YOLOv5x6
+ [TTA] | 1280
1536 | 55.0
**55.8** | 72.7
**72.7** | 3136
- | 26.2
- | 19.4
- | 140.7
- | 209.8
- |
表格注意事项 - 所有模型都采用默认设置训练300轮. Nano和Small模型采用[hyp.scratch-low.yaml](https://github.com/GuoQuanhao/yolov5-Paddle/blob/main/data/hyps/hyp.scratch-low.yaml) hyps, 其余模型采用 [hyp.scratch-high.yaml](https://github.com/GuoQuanhao/yolov5-Paddle/blob/main/data/hyps/hyp.scratch-high.yaml). - **mAPval** 值适用于 [COCO val2017](http://cocodataset.org)数据集上的单模型单尺度。
复现示例:`python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65` - **Speed** 使用 [AWS p3.2xlarge](https://aws.amazon.com/ec2/instance-types/p3/) 实例对 COCO val 图像进行平均。 NMS 时间 (~1 ms/img) 不包括在内。
复现示例:`python val.py --data coco.yaml --img 640 --task speed --batch 1` - **TTA** [Test Time Augmentation](https://github.com/ultralytics/yolov5/issues/303) 包括反射和尺度增强。
复现示例:`python val.py --data coco.yaml --img 1536 --iou 0.7 --augment`
模型导出 ```bash python export.py --weights yolov5n.pdparams --include paddleinfer onnx engine openvino paddlelite yolov5s.pdparams yolov5m.pdparams yolov5l.pdparams yolov5x.pdparams ``` 你可以使用 `--dynamic` or `--half` 来导出动态维度或半精度模型。
##
Segmentation
图像分割模型权重
| Model | size
(pixels) | mAPbox
50-95 | mAPmask
50-95 | Train time
300 epochs
A100 (hours) | Speed
ONNX CPU
(ms) | Speed
TRT A100
(ms) | params
(M) | FLOPs
@640 (B) | | ------------------------------------------------------------------------------------------ | --------------------- | -------------------- | --------------------- | --------------------------------------------- | ------------------------------ | ------------------------------ | ------------------ | ---------------------- | | YOLOv5n-seg | 640 | 27.2 | 23.5 | 80:17 | **62.7** | **1.2** | **2.0** | **7.1** | | YOLOv5s-seg | 640 | 37.3 | 31.8 | 88:16 | 173.3 | 1.4 | 7.6 | 26.4 | | YOLOv5m-seg | 640 | 44.7 | 37.5 | 108:36 | 427.0 | 2.2 | 22.0 | 70.8 | | YOLOv5l-seg | 640 | 48.7 | 40.3 | 66:43 (2x) | 857.4 | 2.9 | 47.9 | 147.7 | | YOLOv5x-seg | 640 | **50.7** | **41.4** | 62:56 (3x) | 1579.2 | 4.5 | 88.8 | 265.7 | - 所有权重采用 `lr0=0.01` 的SGD优化器训练300轮,其中`weight_decay=5e-5`,图像尺寸为640×640。 - **Accuracy** 评估于COCO数据集上的单模型,单尺度。
复现示例:`python segment/val.py --data coco.yaml --weights yolov5s-seg.pdparams` - **Speed** 使用 [Colab Pro](https://colab.research.google.com/signup) A100 High-RAM 实例对超过 100 张推理图像进行平均。 值仅表示推理速度(NMS 每张图像增加约 1 毫秒)。
复现示例:`python segment/val.py --data coco.yaml --weights yolov5s-seg.pdparams --batch 1` - **Export** 为FP32的ONNX模型和FP16的TensorRT模型。
复现示例:`python export.py --weights yolov5s-seg.pdparams --include engine --device 0 --half`
图像分割使用示例 ### Train YOLOv5 分割训练支持使用 `--data coco128-seg.yaml` 参数自动下载 COCO128-seg 分割数据集和使用 `bash data/scripts/get_coco.sh --train --val -- segments`手动下载 COCO-segments 数据集。`python train.py --data coco.yaml`。 ```bash # Single-GPU python segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pdparams --img 640 # Multi-GPU DDP python -m paddle.distributed.launch --gpus 0,1,2,3 segment/train.py --weights yolov5s-seg.pdparams --data coco128-seg.yaml --device 0,1,2,3 ``` ### Val 在 COCO 数据集上验证 YOLOv5s-seg 的 mask mAP: ```bash bash data/scripts/get_coco.sh --val --segments # download COCO val segments split (780MB, 5000 images) python segment/val.py --weights yolov5s-seg.pdparams --data coco.yaml --img 640 # validate ``` ### Predict 使用预训练的 YOLOv5m-seg.pdparams 预测 bus.jpg: ```bash python segment/predict.py --weights yolov5m-seg.pdparams --data data/images/bus.jpg ``` | ![zidane](https://user-images.githubusercontent.com/26833433/203113421-decef4c4-183d-4a0a-a6c2-6435b33bc5d3.jpg) | ![bus](https://user-images.githubusercontent.com/26833433/203113416-11fe0025-69f7-4874-a0a6-65d0bfe2999a.jpg) | | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ### Export 导出ONNX, TensorRT等分割模型。 ```bash # export model python export.py --weights yolov5s-seg.pdparams --include paddleinfer onnx engine openvino paddlelite --img 640 --device 0 # Inference python detect.py --weights yolov5s.pdparams # PaddlePaddle yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn yolov5s_openvino_model # OpenVINO yolov5s.engine # TensorRT yolov5s_paddle_model # PaddleInference yolov5s.nb # PaddleLite ```
##
分类模型
YOLOv5 带来了对分类模型训练、验证和部署的支持!
分类模型权重
| Model | size
(pixels) | acc
top1 | acc
top5 | Training
90 epochs
4xA100 (hours) | Speed
ONNX CPU
(ms) | Speed
TensorRT V100
(ms) | params
(M) | FLOPs
@224 (B) | | -------------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | -------------------------------------------- | ------------------------------ | ----------------------------------- | ------------------ | ---------------------- | | YOLOv5n-cls | 224 | 64.6 | 85.4 | 7:59 | **3.3** | **0.5** | **2.5** | **0.5** | | YOLOv5s-cls | 224 | 71.5 | 90.2 | 8:09 | 6.6 | 0.6 | 5.4 | 1.4 | | YOLOv5m-cls | 224 | 75.9 | 92.9 | 10:06 | 15.5 | 0.9 | 12.9 | 3.9 | | YOLOv5l-cls | 224 | 78.0 | 94.0 | 11:56 | 26.9 | 1.4 | 26.5 | 8.5 | | YOLOv5x-cls | 224 | **79.0** | **94.5** | 15:04 | 54.3 | 1.8 | 48.1 | 15.9 |
表格注意事项 - 所有检查点都使用 SGD 优化器训练 90 轮,其中`lr0=0.001`,`weight_decay=5e-5`,图像大小为 224。 - **Accuracy** values are for single-model single-scale on [ImageNet-1k](https://www.image-net.org/index.php) dataset.
复现示例:`python classify/val.py --data ../datasets/imagenet --img 224` - **Speed** 使用 Google [Colab Pro](https://colab.research.google.com/signup) V100 High-RAM 实例计算 100 多张推理图像的平均值。
复现示例:`python classify/val.py --data ../datasets/imagenet --img 224 --batch 1` - **Export** 为FP32的ONNX模型和FP16的TensorRT模型。
复现示例:`python export.py --weights yolov5s-cls.pdparams --include engine onnx --imgsz 224`
图像分类使用示例 ### Train YOLOv5 分类训练支持使用`--data`参数自动下载 MNIST、Fashion-MNIST、CIFAR10、CIFAR100、Imagenette、Imagewoof 和 ImageNet 数据集。 例如,要在 MNIST 上开始训练,请使用 `--data mnist`。 ```bash # Single-GPU python classify/train.py --model yolov5s-cls.pdparams --data cifar100 --img 224 --batch 128 # Multi-GPU DDP python -m paddle.distributed.launch --gpus 0,1,2,3 classify/train.py --model yolov5s-cls.pdparams --data imagenet --img 224 --device 0,1,2,3 ``` ### Val 在 ImageNet-1k 数据集上验证 YOLOv5m-cls 的准确性: ```bash bash data/scripts/get_imagenet.sh --val # download ImageNet val split (6.3G, 50000 images) python classify/val.py --weights yolov5m-cls.pdparams --data ../datasets/imagenet --img 224 # validate ``` ### Predict 使用预训练的 YOLOv5s-cls.pdparams 来预测 bus.jpg: ```bash python classify/predict.py --weights yolov5s-cls.pdparams --data data/images/bus.jpg ``` ### Export 将一组训练好的 YOLOv5s-cls、ResNet 模型导出到 ONNX 和 TensorRT: ```bash python export.py --weights yolov5s-cls.pdparams resnet50.pdparams --include paddleinfer, onnx, engine, openvino, paddlelite --img 224 ```