39 KiB
YOLOv5 🚀 是世界上最受欢迎的视觉 AI,代表 Ultralytics 对未来视觉 AI 方法的开源研究,结合在数千小时的研究和开发中积累的经验教训和最佳实践。
如果要申请企业许可证,请填写表格Ultralytics 许可.
实例分割模型 ⭐ 新
我们新的 YOLOv5 release v7.0 实例分割模型是世界上最快和最准确的模型,击败所有当前 SOTA 基准。我们使它非常易于训练、验证和部署。更多细节请查看 发行说明 或访问我们的 YOLOv5 分割 Colab 笔记本 以快速入门。
实例分割模型列表
我们使用 A100 GPU 在 COCO 上以 640 图像大小训练了 300 epochs 得到 YOLOv5 分割模型。我们将所有模型导出到 ONNX FP32 以进行 CPU 速度测试,并导出到 TensorRT FP16 以进行 GPU 速度测试。为了便于再现,我们在 Google Colab Pro 上进行了所有速度测试。
模型 | 尺寸 (像素) |
mAPbox 50-95 |
mAPmask 50-95 |
训练时长 300 epochs A100 GPU(小时) |
推理速度 ONNX CPU (ms) |
推理速度 TRT A100 (ms) |
参数量 (M) |
FLOPs @640 (B) |
---|---|---|---|---|---|---|---|---|
YOLOv5n-seg | 640 | 27.6 | 23.4 | 80:17 | 62.7 | 1.2 | 2.0 | 7.1 |
YOLOv5s-seg | 640 | 37.6 | 31.7 | 88:16 | 173.3 | 1.4 | 7.6 | 26.4 |
YOLOv5m-seg | 640 | 45.0 | 37.1 | 108:36 | 427.0 | 2.2 | 22.0 | 70.8 |
YOLOv5l-seg | 640 | 49.0 | 39.9 | 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 |
- 所有模型使用 SGD 优化器训练, 都使用
lr0=0.01
和weight_decay=5e-5
参数, 图像大小为 640 。
训练 log 可以查看 https://wandb.ai/glenn-jocher/YOLOv5_v70_official - 准确性结果都在 COCO 数据集上,使用单模型单尺度测试得到。
复现命令python segment/val.py --data coco.yaml --weights yolov5s-seg.pt
- 推理速度是使用 100 张图像推理时间进行平均得到,测试环境使用 Colab Pro 上 A100 高 RAM 实例。结果仅表示推理速度(NMS 每张图像增加约 1 毫秒)。
复现命令python segment/val.py --data coco.yaml --weights yolov5s-seg.pt --batch 1
- 模型转换到 FP32 的 ONNX 和 FP16 的 TensorRT 脚本为
export.py
.
运行命令python export.py --weights yolov5s-seg.pt --include engine --device 0 --half
分割模型使用示例
训练
YOLOv5分割训练支持自动下载 COCO128-seg 分割数据集,用户仅需在启动指令中包含 --data coco128-seg.yaml
参数。 若要手动下载,使用命令 bash data/scripts/get_coco.sh --train --val --segments
, 在下载完毕后,使用命令 python train.py --data coco.yaml
开启训练。
# 单 GPU
python segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640
# 多 GPU, DDP 模式
python -m torch.distributed.run --nproc_per_node 4 --master_port 1 segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640 --device 0,1,2,3
验证
在 COCO 数据集上验证 YOLOv5s-seg mask mAP:
bash data/scripts/get_coco.sh --val --segments # 下载 COCO val segments 数据集 (780MB, 5000 images)
python segment/val.py --weights yolov5s-seg.pt --data coco.yaml --img 640 # 验证
预测
使用预训练的 YOLOv5m-seg.pt 来预测 bus.jpg:
python segment/predict.py --weights yolov5m-seg.pt --data data/images/bus.jpg
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5m-seg.pt') # 从load from PyTorch Hub 加载模型 (WARNING: 推理暂未支持)
模型导出
将 YOLOv5s-seg 模型导出到 ONNX 和 TensorRT:
python export.py --weights yolov5s-seg.pt --include onnx engine --img 640 --device 0
文档
有关训练、测试和部署的完整文档见YOLOv5 文档。请参阅下面的快速入门示例。
安装
克隆 repo,并要求在 Python>=3.7.0 环境中安装 requirements.txt ,且要求 PyTorch>=1.7 。
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
推理
使用 YOLOv5 PyTorch Hub 推理。最新 模型 将自动的从 YOLOv5 release 中下载。
import torch
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # or yolov5n - yolov5x6, custom
# Images
img = 'https://ultralytics.com/images/zidane.jpg' # or file, Path, PIL, OpenCV, numpy, list
# Inference
results = model(img)
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.
使用 detect.py 推理
detect.py
在各种来源上运行推理, 模型 自动从
最新的YOLOv5 release 中下载,并将结果保存到 runs/detect
。
python detect.py --weights yolov5s.pt --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
训练
下面的命令重现 YOLOv5 在 COCO 数据集上的结果。
最新的 模型 和 数据集
将自动的从 YOLOv5 release 中下载。
YOLOv5n/s/m/l/x 在 V100 GPU 的训练时间为 1/2/4/6/8 天( 多GPU 训练速度更快)。
尽可能使用更大的 --batch-size
,或通过 --batch-size -1
实现
YOLOv5 自动批处理 。下方显示的 batchsize 适用于 V100-16GB。
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128
yolov5s 64
yolov5m 40
yolov5l 24
yolov5x 16
教程
模块集成
Roboflow | ClearML ⭐ 新 | Comet ⭐ 新 | Neural Magic ⭐ 新 |
---|---|---|---|
将您的自定义数据集进行标注并直接导出到 YOLOv5 以进行训练 Roboflow | 自动跟踪、可视化甚至远程训练 YOLOv5 ClearML(开源!) | 永远免费,Comet可让您保存 YOLOv5 模型、恢复训练以及交互式可视化和调试预测 | 使用 Neural Magic DeepSparse,运行 YOLOv5 推理的速度最高可提高6倍 |
Ultralytics HUB
Ultralytics HUB 是我们的⭐新的用于可视化数据集、训练 YOLOv5 🚀 模型并以无缝体验部署到现实世界的无代码解决方案。现在开始 免费 使用他!
为什么选择 YOLOv5
YOLOv5 超级容易上手,简单易学。我们优先考虑现实世界的结果。
YOLOv5-P5 640 图
图表笔记
- COCO AP val 表示 mAP@0.5:0.95 指标,在 COCO val2017 数据集的 5000 张图像上测得, 图像包含 256 到 1536 各种推理大小。
- 显卡推理速度 为在 COCO val2017 数据集上的平均推理时间,使用 AWS p3.2xlarge V100实例,batchsize 为 32 。
- EfficientDet 数据来自 google/automl , batchsize 为32。
- 复现命令 为
python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n6.pt yolov5s6.pt yolov5m6.pt yolov5l6.pt yolov5x6.pt
预训练模型
模型 | 尺寸 (像素) |
mAPval 50-95 |
mAPval 50 |
推理速度 CPU b1 (ms) |
推理速度 V100 b1 (ms) |
速度 V100 b32 (ms) |
参数量 (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.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 |
YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 |
YOLOv5x | 640 | 50.7 | 68.9 | 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 epochs。n和s模型使用 hyp.scratch-low.yaml ,其他模型都使用 hyp.scratch-high.yaml 。
- **mAPval**在单模型单尺度上计算,数据集使用 COCO val2017 。
复现命令python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65
- 推理速度在 COCO val 图像总体时间上进行平均得到,测试环境使用AWS p3.2xlarge实例。 NMS 时间 (大约 1 ms/img) 不包括在内。
复现命令python val.py --data coco.yaml --img 640 --task speed --batch 1
- TTA 测试时数据增强 包括反射和尺度变换。
复现命令python val.py --data coco.yaml --img 1536 --iou 0.7 --augment
分类网络 ⭐ 新
YOLOv5 release v6.2 带来对分类模型训练、验证和部署的支持!详情请查看 发行说明 或访问我们的 YOLOv5 分类 Colab 笔记本 以快速入门。
分类网络模型
我们使用 4xA100 实例在 ImageNet 上训练了 90 个 epochs 得到 YOLOv5-cls 分类模型,我们训练了 ResNet 和 EfficientNet 模型以及相同的默认训练设置以进行比较。我们将所有模型导出到 ONNX FP32 以进行 CPU 速度测试,并导出到 TensorRT FP16 以进行 GPU 速度测试。为了便于重现,我们在 Google 上进行了所有速度测试 Colab Pro 。
模型 | 尺寸 (像素) |
acc top1 |
acc top5 |
训练时长 90 epochs 4xA100(小时) |
推理速度 ONNX CPU (ms) |
推理速度 TensorRT V100 (ms) |
参数 (M) |
FLOPs @640 (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.4 | 15:04 | 54.3 | 1.8 | 48.1 | 15.9 |
ResNet18 | 224 | 70.3 | 89.5 | 6:47 | 11.2 | 0.5 | 11.7 | 3.7 |
Resnetzch | 224 | 73.9 | 91.8 | 8:33 | 20.6 | 0.9 | 21.8 | 7.4 |
ResNet50 | 224 | 76.8 | 93.4 | 11:10 | 23.4 | 1.0 | 25.6 | 8.5 |
ResNet101 | 224 | 78.5 | 94.3 | 17:10 | 42.1 | 1.9 | 44.5 | 15.9 |
EfficientNet_b0 | 224 | 75.1 | 92.4 | 13:03 | 12.5 | 1.3 | 5.3 | 1.0 |
EfficientNet_b1 | 224 | 76.4 | 93.2 | 17:04 | 14.9 | 1.6 | 7.8 | 1.5 |
EfficientNet_b2 | 224 | 76.6 | 93.4 | 17:10 | 15.9 | 1.6 | 9.1 | 1.7 |
EfficientNet_b3 | 224 | 77.7 | 94.0 | 19:19 | 18.9 | 1.9 | 12.2 | 2.4 |
Table Notes (点击以展开)
- 所有模型都使用 SGD 优化器训练 90 个 epochs,都使用
lr0=0.001
和weight_decay=5e-5
参数, 图像大小为 224 ,且都使用默认设置。
训练 log 可以查看 https://wandb.ai/glenn-jocher/YOLOv5-Classifier-v6-2 - 准确性都在单模型单尺度上计算,数据集使用 ImageNet-1k 。
复现命令python classify/val.py --data ../datasets/imagenet --img 224
- 推理速度是使用 100 个推理图像进行平均得到,测试环境使用谷歌 Colab Pro V100 高 RAM 实例。
复现命令python classify/val.py --data ../datasets/imagenet --img 224 --batch 1
- 模型导出到 FP32 的 ONNX 和 FP16 的 TensorRT 使用
export.py
。
复现命令python export.py --weights yolov5s-cls.pt --include engine onnx --imgsz 224
分类训练示例
训练
YOLOv5 分类训练支持自动下载 MNIST、Fashion-MNIST、CIFAR10、CIFAR100、Imagenette、Imagewoof 和 ImageNet 数据集,命令中使用 --data
即可。 MNIST 示例 --data mnist
。
# 单 GPU
python classify/train.py --model yolov5s-cls.pt --data cifar100 --epochs 5 --img 224 --batch 128
# 多 GPU, DDP 模式
python -m torch.distributed.run --nproc_per_node 4 --master_port 1 classify/train.py --model yolov5s-cls.pt --data imagenet --epochs 5 --img 224 --device 0,1,2,3
验证
在 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.pt --data ../datasets/imagenet --img 224 # validate
预测
使用预训练的 YOLOv5s-cls.pt 来预测 bus.jpg:
python classify/predict.py --weights yolov5s-cls.pt --data data/images/bus.jpg
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s-cls.pt') # load from PyTorch Hub
模型导出
将一组经过训练的 YOLOv5s-cls、ResNet 和 EfficientNet 模型导出到 ONNX 和 TensorRT:
python export.py --weights yolov5s-cls.pt resnet50.pt efficientnet_b0.pt --include onnx engine --img 224
环境
使用下面我们经过验证的环境,在几秒钟内开始使用 YOLOv5 。单击下面的图标了解详细信息。
APP
通过下载 Ultralytics APP ,以在您的 iOS 或 Android 设备上运行 YOLOv5 模型!
贡献
我们喜欢您的意见或建议!我们希望尽可能简单和透明地为 YOLOv5 做出贡献。请看我们的 投稿指南,并填写 YOLOv5调查 向我们发送您的体验反馈。感谢我们所有的贡献者!
License
YOLOv5 在两种不同的 License 下可用:
- GPL-3.0 License: 查看 License 文件的详细信息。
- 企业License:在没有 GPL-3.0 开源要求的情况下为商业产品开发提供更大的灵活性。典型用例是将 Ultralytics 软件和 AI 模型嵌入到商业产品和应用程序中。在以下位置申请企业许可证 Ultralytics 许可 。
联系我们
若发现 YOLOv5 的 bug 或有功能需求,请访问 GitHub 问题 。如需专业支持,请 联系我们 。