简单高效的使用YOLOv8
这是一个由独立开发人员维护的非官方存储库,用于基于 ultralytics v8 Weights 和 ultralytics Project 的学习和交流。如果大家有更多的问题和想法,欢迎大家一起讨论。 另外,ultralytics已发布了最新的ultralytics仓库,建议优先使用官方的。
本项目基于ultralytics及yolov5等进行综合参考,致力于让yolo系列的更加高效和易用。
目前主要做了以下的工作:
-
结合yolov5的使用习惯以及代码结构做了兼容和优化。
-
通过在coco数据集上在自己的机器上进行验证和计算的权重的指标参数,实验记录存放在https://github.com/isLinXu/YOLOv8_Efficient/tree/main/log.实验数据记录在:
-
根据计算出来的结果绘制了相应的指标参数对比图,这个绘图程序也开源在https://github.com/isLinXu/model-metrics-plot中。
-
融合其他更多网络模型结构进行集成整合和配置,正在进行中...
这里感谢集智书童为本项目提供的网络结构图
- ... ...
- 2023/01/16 - add train_detect, train_cls and train_seg
- 2023/01/11 - add metrics plot and model structure
- 2023/01/10 - add yolov8 metrics and logs
- 2023/01/09 - add val.py and fix some error
- 2023/01/07 - fix some error and warning
- 2023/01/06 - add train.py, detect.py and README.md
- 2023/01/06 - Create and Init a new repository
- 模型测试和验证中
- [ ]
简单地使用最新的 Ultralytics YOLO 模型
yolo task=detect mode=train model=yolov8n.yaml args=...
classify predict yolov8n-cls.yaml args=...
segment val yolov8n-seg.yaml args=...
export yolov8n.pt format=onnx
使用 Ultralytics YOLO 模型的 pythonic 接口
from ultralytics import YOLO
model = YOLO("yolov8n.yaml") # create a new model from scratch
model = YOLO(
"yolov8n.pt"
) # load a pretrained model (recommended for best training results)
results = model.train(data="coco128.yaml", epochs=100, imgsz=640, ...)
results = model.val()
results = model.predict(source="bus.jpg")
success = model.export(format="onnx")
如果您希望为研发修改 YOLO 或在其之上构建,请参阅文档https://docs.ultralytics.com/。
这里以coco128为例。
- 1.制作YOLO格式的数据集,可以通过项目目录中的
prepare_data.py
来进行数据集的划分与转换。 - 2.修改
config
中相应模型权重的.yaml
,配置其数据集路径,读入数据加载器。 - 3.修改model中相应参数,主要是修改类别数量和网络结构参数,如果只是简单应用,那么不建议修改下面的网络结构参数,只修改其类别数量即可。
- 4.运行train.py,这一步可以到
parse_opt
中对应的变量下进行修改,需要根据设备和训练的需要进行配置,主要包括device
、task
、data
、weights
、epochs
、batch_size
等,如果不配置则使用默认参数。
Model | size (pixels) | mAPval 50-95 | mAPval 50 | Speed CPU b1 (ms) | Speed RTX 3080 b1(ms) | layers | params (M) | FLOPs @640 (B) |
---|---|---|---|---|---|---|---|---|
yolov8n | 640 | 37.2 | 53.2 | 47.2 | 5.6 | 168 | 3.15 | 8.7 |
yolov8n-seg | 640 | 30.7 | 50.0 | 59.3 | 11.3 | 195 | 3.40 | 12.6 |
yolov8s | 640 | 44.7 | 62.2 | 87.9 | 5.7 | 168 | 11.15 | 28.6 |
yolov8s-seg | 640 | 37.0 | 58.8 | 107.6 | 11.4 | 195 | 11.81 | 42.6 |
yolov8m | 640 | 49.9 | 67.4 | 185.6 | 8.3 | 218 | 25.89 | 78.9 |
yolov8m-seg | 640 | 40.6 | 63.5 | 207.7 | 15.3 | 245 | 27.27 | 110.2 |
yolov8l | 640 | 52.4 | 69.9 | 319.6 | 13.1 | 268 | 43.67 | 165.2 |
yolov8l-seg | 640 | 42.5 | 66.1 | 296.9 | 16.8 | 295 | 45.97 | 220.5 |
yolov8x | 640 | 53.5 | 70.9 | 334.6 | 20.4 | 268 | 68.20 | 257.8 |
yolov8x-seg | 640 | 43.2 | 67.1 | 418.8 | 23.8 | 295 | 71.80 | 344.1 |
- 表格注释 以上数据是在以下配置的环境中运行测试生成的。详情见下文。
- 显卡:NVIDIA GeForce RTX 3080/PCIe/SSE2
- CPU:Intel® Core™ i9-10900K CPU @ 3.70GHz × 20
- 内存:31.3 GiB
- 系统:Ubuntu 18.04 LTS
- (ms): 这里的统计速度是推理速度
pip install ultralytics
git clone git@github.com:isLinXu/YOLOv8_Efficient.git
cd YOLOv8_Efficient
cd ultralytics-master
pip install -e .
- 单 GPU 训练:
python train.py --data coco128.yaml --weights weights/yolov8ns.pt --img 640 # from pretrained (recommended)
python train.py --data coco128.yaml --weights '' --cfg yolov8ns.yaml --img 640 # from scratch
使用 IDE Pycharm
- 多 GPU DDP 训练:
python -m torch.distributed.run --nproc_per_node 4 --master_port 1 train.py --data coco128.yaml --weights yolov8ns.pt --img 640 --device 0,1,2,3
python detect.py --weights yolov8s.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
使用 IDE Pycharm
- 以coco128为例:
python val.py --weights yolov8n.pt --data coco128.yaml --img 640
python val.py --weights yolov8s.pt # PyTorch
yolov8s.torchscript # TorchScript
yolov8s.onnx # ONNX Runtime or OpenCV DNN with --dnn
yolov8s_openvino_model # OpenVINO
yolov8s.engine # TensorRT
yolov8s.mlmodel # CoreML (macOS-only)
yolov8s_saved_model # TensorFlow SavedModel
yolov8s.pb # TensorFlow GraphDef
yolov8s.tflite # TensorFlow Lite
yolov8s_edgetpu.tflite # TensorFlow Edge TPU
yolov8s_paddle_model # PaddlePaddle