版本:commit id为d6be91d7866549ccad4b19d65d0e03c7fdbd0ec8
基于YOLOv8训练自定义数据集
- 克隆下yolov8源码后,在项目源码目录下新建data目录,将自定义数据集放置data目录下。自定义数据集按照如下目录结构存放:
├─images
│ ├─train
│ └─val
└─labels
├─train
└─val
- 然后再data目录下新建加载数据的配置文件person.yaml,其内容示例如下:
train: E:\ultralytics\data\images\train
val: E:\ultralytics\data\images\val
nc: 1
names: ['person']
- 安装依赖:
# 1.安装适合自身硬件配置的torch和torchvision
# 2.安装requirements中的依赖包
pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 训练模型
- 方式1:输入命令
yolo task=detect mode=train model=weights/yolov8n.pt data=data/person.yaml batch=4 epochs=100 imgsz=640 workers=16 device=0
- 方式2:
- 在项目根目录下运行
yolo copy-cfg
将在当前目录下生成ultralytics\ultralytics\yolo\cfg\default.yaml配置文件的拷贝,即default_copy.yaml - 根据需求修改default_copy.yaml文件中的内容,主要修改如下:
# Train settings model: weights/yolov8n.pt # path to model file, i.e. yolov8n.pt, yolov8n.yaml data: data/person.yaml # path to data file, i.e. coco128.yaml epochs: 100 # number of epochs to train for batch: 2 # number of images per batch (-1 for AutoBatch)
- 使用
yolo cfg=default_copy.yaml
命令即可开始训练
- 在项目根目录下运行
- 方式3:自定义train.py文件,内容如下
from ultralytics import YOLO if __name__ == '__main__': # 加载模型 # model = YOLO(r'yolov8-seg.yaml') # 不使用预训练权重训练 model = YOLO(r"E:\ultralytics\weights\yolov8n.pt") # 使用预训练权重训练 model.train(data = r"E:\ultralytics\data\person.yaml", epochs=500,batch=16)
- 训练时报错
TypeError: concatenate() got an unexpected keyword argument 'dtype'
解决方案是将numpy的版本更改为1.23.3
- 方式1:输入命令
- 模型推理:
- 方式1:使用命令
yolo detect predict model=weights/best.pt source=data/test_images save=True
即可 - 方式2:自定义predict.py,内容如下:
from ultralytics import YOLO if __name__ == '__main__': model = YOLO('weights/best.pt') # build from YAML and transfer weights model.predict(source='data/test_images/test', conf = 0.4, save = True)
- 问题
AttributeError: Can't get attribute 'v8DetectionLoss'
,解决方案是升级ultralytics。
pip install ultralytics --upgrade
- 方式1:使用命令
目标检测模型的推理输出分析
- 使用如下脚本进行模型的推理
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('weights/yolov8n.pt') # build from YAML and transfer weights
result = model.predict(source='data/test_images/', conf = 0.4, save = True)
print("result:", result)
1.模型的输入
- source参数:指定输入模型的图片的位置
2.模型的输出
- 上述推理脚本中,result是一个由
ultralytics.engine.results.Results
类型的对象组成的列表,Results类封装了推理结果。其主要属性如下:- boxes:检测边界框,可能有多个,其属性如下
1. xyxy:The boxes in xyxy format 2. conf:检测框的置信度值 3. cls:检测框的类别值 4. id:检测框的追踪id 5. xywh:The boxes in xywh format 6. xyxyn:The boxes in xyxy format normalized by original image size。归一化后的 7. xywhn:The boxes in xywh format normalized by original image size。归一化后的 8. data:The raw bboxes tensor
- keypoints:包含检测的关键点信息,yolo做关键点检测时会有这个信息
- masks:包含检测的掩码信息,yolo做实例分割时会有这个信息
- names:A dictionary of class names.即目标检测的类别
- orig_img:以numpy数组格式存储的原始图片,形状为(height,width,dimension)
- orig_shape:以元组表示的原始图片的形状,例如(height,width)
- path:The path to the image file.即输入模型的图片的路径
- probs:每个类别的概率,yolo做分类任务会有这个信息
- save_dir:模型输出可视化结果的路径,例如
- speed:A dictionary of preprocess, inference, and postprocess speeds in milliseconds per image
- 对于目标检测,需要特别关注Results的boxes属性
YOLOv8将后缀名为pt的模型导出为onnx格式
- 下载依赖包onnx
pip install onnx==1.16.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 在ultralytics目录下新建脚本,并执行
python export_onnx.py
from ultralytics import YOLO
// 待转换模型所在的位置
model = YOLO(r"C:\Users\root\Desktop\data\ultralytics\runs\detect\train2\weights\fruit.pt")
model.export(format="onnx")