Skip to content

Latest commit

 

History

History
324 lines (244 loc) · 21.1 KB

README.zh-CN.md

File metadata and controls

324 lines (244 loc) · 21.1 KB

Run on AIstudio

English | 简体中文

这篇由郭权浩创建的YOLOv5-Paddle 🚀笔记本提供了简单的训练、验证、预测和模型导出示例。YOLOv5-Paddle先在支持多种格式的单精度和半精度模型导出。 在代码运行上遇到问题请联系以提供便捷的支持。

PaddleLitePaddleInferenceONNXOpenVIVOTensorRT

目标检测

安装

克隆仓库并安装 requirements.txt,并且 Python>=3.7.0PaddlePaddle>=2.4.0.

git clone https://github.com/GuoQuanhao/yolov5-Paddle  # clone
cd yolov5-Paddle
pip install -r requirements.txt  # install
训练

下方命令能够重现YOLOv5的 COCO 结果. 模型数据集 能够重最新的YOLOv5 release中自动下载。 下面展示了在V100-16GB上的Batch sizes。

# (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
# 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
评估
# (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

# Model
python hubconf.py  # or yolov5n - yolov5x6, custom

detect.py 能够利用--source指定各种媒体资源,并自动从百度云智能云服务器下载PaddlePaddle模型,并将检测结果保存在runs/detect

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
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 数据集上测量的 [email protected]:0.95 指标,推理大小从 256 到 1536。
  • GPU Speed 使用批量大小为 32 的 AWS p3.2xlarge V100 实例测量 COCO val2017 数据集上每张图像的平均推理时间。
  • 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 hyps, 其余模型采用 hyp.scratch-high.yaml.
  • mAPval 值适用于 COCO val2017数据集上的单模型单尺度。
    复现示例:python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65
  • Speed 使用 AWS p3.2xlarge 实例对 COCO val 图像进行平均。 NMS 时间 (~1 ms/img) 不包括在内。
    复现示例:python val.py --data coco.yaml --img 640 --task speed --batch 1
  • TTA Test Time Augmentation 包括反射和尺度增强。
    复现示例:python val.py --data coco.yaml --img 1536 --iou 0.7 --augment
模型导出
python export.py --weights yolov5n.pdparams --include paddleinfer onnx engine openvino paddlelite
						   yolov5s.pdparams
						   yolov5m.pdparams
						   yolov5l.pdparams
						   yolov5x.pdparams

你可以使用 --dynamic or --half 来导出动态维度或半精度模型。

图像分割

图像分割模型权重
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 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

# 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 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:

python segment/predict.py --weights yolov5m-seg.pdparams --data data/images/bus.jpg
zidane bus

Export

导出ONNX, TensorRT等分割模型。

# 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.001weight_decay=5e-5,图像大小为 224。
  • Accuracy values are for single-model single-scale on ImageNet-1k dataset.
    复现示例:python classify/val.py --data ../datasets/imagenet --img 224
  • Speed 使用 Google Colab Pro 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

# 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 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:

python classify/predict.py --weights yolov5s-cls.pdparams --data data/images/bus.jpg

Export

将一组训练好的 YOLOv5s-cls、ResNet 模型导出到 ONNX 和 TensorRT:

python export.py --weights yolov5s-cls.pdparams resnet50.pdparams --include paddleinfer, onnx, engine, openvino, paddlelite --img 224