YOLO的使用

目录

一、安装ultralytics

二、数据集准备

三、训练代码

五、训练结果的目录结构

六、附录

1、部分参数

2、文件介绍


一、安装ultralytics

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

介绍:Ultralytics YOLO Docs --- Train - Ultralytics YOLO Docs

二、数据集准备

  • train:113个图像 + 113 个标签 (训练时使用)
  • val:  24个图像 + 24个标签文件(训练进行验证时使用)
  • test: 25个图像 + 25个标签(训练阶段不会使用)

data.yaml(只有一个normal的类别):

names:
  0: normal
nc: 1
test: D:\YOLOv8Train\v8_train_datasets\mktk_dataset\test
train: D:\YOLOv8Train\v8_train_datasets\mktk_dataset\train
val: D:\YOLOv8Train\v8_train_datasets\mktk_dataset\val

三、训练代码

从yaml文件中新建:

from ultralytics import YOLO
 
if __name__ == '__main__':
    # 加载一个模型
    model = YOLO('yolov8n.yaml')  # 从YAML建立一个新模型
    # 训练模型
    results = model.train(
        data='D:/YOLOv8Train/v8_train_datasets/mktk_dataset/data.yaml',
        device='0',
        epochs=100,  # 训练过程中整个数据集将被迭代多少次,显卡不行你就调小点
        batch=8,  # 一次看完多少张图片才进行权重更新
        verbose=False,
        imgsz=640)

其他加载模型进行训练方式:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # 从yaml建立新模型
model = YOLO("yolov8n.pt")  # 加载预训练 (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.pt")  # 建立新模型并加载权重

# Train the model
results = model.train(data="coco8.yaml", epochs=100)

四、预测

from ultralytics import YOLO

model = YOLO("yolov10m.pt")

results = model.predict("image.jpg",
                        save=False,
                        save_txt=False,
                        verbose=False,
                        conf=0.75)
results[0].show()

我们还可以得到文本形式的数据:

from ultralytics import YOLO

model = YOLO("yolov10m.pt")
results = model.predict("image.jpg",
                        save=False,
                        save_txt=False,
                        verbose=False,
                        conf=0.75)
boxes = results[0].boxes
confidence, class_ids = boxes.conf,boxes.cls.int()

rects = boxes.xyxy.int()
for ind in range(boxes.shape[0]):
    print(model.names[class_ids[ind].item()],
          confidence[ind].item(),
          rects[ind].tolist())

# 输出
'''
car 0.9247599244117737 [561, 311, 719, 420]
car 0.9067108035087585 [464, 303, 554, 380]
car 0.9027121663093567 [402, 300, 481, 367]
car 0.8614686727523804 [524, 310, 592, 396]
bicycle 0.8476000428199768 [181, 321, 241, 400]
person 0.8029575347900391 [71, 271, 126, 421]
person 0.7965097427368164 [186, 278, 237, 381]
bicycle 0.7882957458496094 [111, 330, 156, 414]
'''

五、训练结果的目录结构

YOLOv8每执行一次训练,都会生成一个新的训练目录来保存结果,训练结果的目录如下:

六、附录

1、部分参数

task: detect  # 这是一个目标检测的任务
mode: train   # 当前使用的是训练模式,YOLOv8还有val,test等其它模式
model: yolov8n.yaml # 使用的模型配置(里面描述了模型的网络结构等)
data: D:/YOLOv8Train/v8_train_datasets/mktk_dataset/data.yaml # 训练使用的数据集
epochs: 100  # 训练需要迭代多少次
patience: 50  
batch: 8   # 一次看完多少张图片才进行权重更新
imgsz: 640  # 模型的图像大小
save: true  
save_period: -1
cache: false
device: '0'  # 使用0号NVIDIA GPU进行训练
workers: 8  # 数据加载的工作线程数(如果DDP则为每个RANK)
project: null
name: train2
exist_ok: false
pretrained: true
optimizer: auto
verbose: false
seed: 0
deterministic: true
single_cls: false
rect: false
cos_lr: false
close_mosaic: 10
resume: false
amp: true
fraction: 1.0
profile: false
freeze: null
overlap_mask: true
mask_ratio: 4
dropout: 0.0
val: true  # 训练期间验证/测试
split: val  # 用于验证的分割数据集,例如 'val'、'test' 或 'train',参考data: D:/YOLOv8Train/v8_train_datasets/mktk_dataset/data.yaml
save_json: false
save_hybrid: false
conf: null
iou: 0.7  # 验证/测试中使用NMS(非极大抑制)用的交并比(IoU)阈值
max_det: 300
half: false  # 使用半精度(FP16)
dnn: false  # 使用 OpenCV DNN 进行 ONNX 推理
plots: true
source: null
vid_stride: 1
stream_buffer: false
visualize: false
augment: false
agnostic_nms: false
classes: null
retina_masks: false
show: false
save_frames: false
save_txt: false
save_conf: false
save_crop: false
show_labels: true
show_conf: true
show_boxes: true
line_width: null
format: torchscript
keras: false
optimize: false
int8: false
dynamic: false
simplify: false
opset: null
workspace: 4
nms: false
lr0: 0.01  # 初始学习率
lrf: 0.01  # 最终学习率
momentum: 0.937 #SGD动量/Adam beta1
weight_decay: 0.0005
warmup_epochs: 3.0
warmup_momentum: 0.8
warmup_bias_lr: 0.1
box: 7.5
cls: 0.5
dfl: 1.5  # dfl损失增益
pose: 12.0
kobj: 1.0
label_smoothing: 0.0
nbs: 64
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.5
mosaic: 1.0
mixup: 0.0
copy_paste: 0.0
cfg: null
tracker: botsort.yaml
save_dir: runs\detect\train2  # 训练结果保存的目录

2、文件介绍

  • labels.jpg(标签统计图)
第1个图是训练集的数据量,每个类别有多少个第2个图是框的尺寸和数量
第3个图是中心点相对于整幅图的位置第4个图是图中目标相对于整幅图的高宽比例

  • labels_correlogram.jpg(标签相关图)

labels相关图体现标签的中心点x,y坐标以及框的高宽之间的关系。

每一行的最后一幅图代表的是x,y,宽和高的分布情况:

图(0,0)表明中心点横坐标x的分布情况;

图(1,1)图表明中心点纵坐标y的分布情况;

图(2,2)图表明框的宽的分布情况;

图(3,3)图表明框的宽的分布情况;
而其他的图则是寻找这4个变量(x,y,width,height)之间的关系。

  • args.xml(训练使用的超参数)

这个文件包含了训练使用的超参数,包括训练(train)使用参数和每次迭代完成进行验证(val)使用的参数。

  • results.png(用图像来呈现训练结果)

用图像的方式把results.txt内容呈现出来。

从0~epochs(100)次迭代过程中,重要指标的变化过程:

train/box_loss:训练中,位置误差变化过程;

train/cls_loss:训练中,类别误差变化过程;

train/dfl_loss:训练中,dfl误差变化过程;

val/box_loss:验证中,位置误差变化过程;

val/cls_loss:验证中,类别误差变化过程;

val/dfl_loss:验证中,dfl误差变化过程;

正常情况下,loss会随着迭代的次数增加,慢慢变小。

metircs/precision(B):精度(找对的正类/所有找到的正类);
metircs/recall(B):真实为positive的准确率,即正样本有多少被找出来了(召回了多少)。Recall从真实结果角度出发,描述了测试集中的真实正例有多少被二分类器挑选了出来,即真实的正例有多少被该二分类器召回。

metrics/mAP50(B):是用Precision和Recall作为两轴作图后围成的面积,m-表示平均,AP-Average Precision,50-表示正负样本的IOU阈值为0.5

metrics/mAP50-95(B):表示在不同IOU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。

一般训练结果主要观察精度和召回率波动情况(波动不是很大则训练效果较好),然后观察mAP50 和 mAP50-95 评价训练结果。

参考:训练结果及评估模型训练例子

<think>好的,我现在需要处理用户关于从Ultralytics导入YOLO模型的问题,特别是加载"v11320.onnx"文件的代码。首先,我得确认用户的问题点在哪里。用户可能在使用YOLO库时遇到了问题,或者想了解这段代码的具体作用。 首先,我需要回忆一下Ultralytics YOLO的文档。YOLO类通常用于加载预训练的模型,支持的格式包括PyTorch的.pt文件和ONNX格式。用户在这里导入了YOLO并尝试加载一个.onnx文件,这可能涉及到模型导出或推理的步骤。 接下来,用户的具体代码是model = YOLO("v11320.onnx")。正常情况下,YOLO的加载函数是否支持直接加载ONNX模型?根据我的知识,通常需要先导出模型到ONNX格式,然后可能使用不同的方式进行推理。例如,使用YOLO导出ONNX后,可能需要使用ONNX Runtime来运行,而不是直接通过YOLO类加载。因此,用户可能在直接加载ONNX时遇到错误,比如提示文件格式不支持。 可能的错误原因包括:YOLO的load方法是否支持ONNX作为输入,或者用户是否混淆了导出和加载的步骤。比如,正确的流程应该是先加载.pt模型,然后导出为ONNX,再用ONNX Runtime加载。如果用户直接尝试加载ONNX,可能会遇到问题,因为YOLO类可能预期的是PyTorch模型。 另外,文件名"v11320.onnx"可能是一个自定义的导出文件,我需要确认是否正确导出。例如,用户是否使用了export方法,指定了正确的参数,比如format='onnx',并且没有在导出过程中出现错误。 我还需要考虑用户的运行环境,是否安装了必要的依赖库,比如onnxruntime,因为如果没有安装,即使正确加载了ONNX模型,后续的推理也可能失败。 总结用户可能的问题:加载ONNX模型的方式是否正确,是否需要使用不同的库进行加载,导出步骤是否正确,或者是否存在环境依赖的问题。 接下来,我需要组织回答的结构。首先解释代码的作用,然后指出潜在的问题,再提供正确的步骤,比如如何导出ONNX模型和使用ONNX Runtime进行推理。同时,提醒用户检查文件路径是否正确,依赖是否安装,以及导出过程中的注意事项。 可能还需要提到Ultralytics YOLO的最新版本是否有变化,比如是否支持直接加载ONNX,或者是否有其他方式加载。比如,有些情况下,YOLO可能支持加载ONNX,但需要相应的后端支持,或者可能需要使用不同的类或方法。 最后,确保回答清晰,分步骤说明,帮助用户排查问题,并给出示例代码,比如如何正确导出和加载ONNX模型,以及相关链接或文档参考。</think>以下是对代码 `from ultralytics import YOLO; model = YOLO("v11320.onnx")` 的逐步解析: --- ### **1. 导入YOLO类** ```python from ultralytics import YOLO ``` - **作用**:从Ultralytics库中导入YOLO类。YOLO类封装了模型加载、训练、验证、推理等功能。 - **注意事项**: - 需提前安装 `ultralytics` 库:`pip install ultralytics` - 确保Python版本 >= 3.8。 --- ### **2. 加载模型** ```python model = YOLO("v11320.onnx") ``` - **作用**:尝试加载名为 `v11320.onnx` 的ONNX格式模型。 - **关键点**: 1. **ONNX模型支持性**: - Ultralytics YOLO **原生支持PyTorch模型**(`.pt` 或 `.pth` 文件)。 - 直接加载ONNX模型需要**额外依赖**(如`onnxruntime`库),且可能仅支持推理(不支持训练/微调)。 2. **常见错误**: - 若未安装 `onnxruntime`,会报错:`ModuleNotFoundError: No module named 'onnxruntime'` - 若ONNX模型未正确导出,会报错:`RuntimeError: Failed to load ONNX model` --- ### **3. 正确使用ONNX模型的流程** #### **步骤1:导出PyTorch模型为ONNX** ```python from ultralytics import YOLO # 加载原生PyTorch模型(.pt文件) pt_model = YOLO("yolov8n.pt") # 导出为ONNX格式 pt_model.export(format="onnx", imgsz=640) ``` - 导出后会生成 `yolov8n.onnx` 文件。 - 导出参数需与模型兼容(如输入尺寸 `imgsz`)。 #### **步骤2:使用ONNX模型推理** ```python import onnxruntime # 加载ONNX模型 session = onnxruntime.InferenceSession("yolov8n.onnx") # 准备输入数据(示例) import numpy as np input_data = np.random.rand(1, 3, 640, 640).astype(np.float32) # 运行推理 outputs = session.run(None, {"images": input_data}) ``` --- ### **4. 你的代码潜在问题** - **直接加载ONNX的限制**: - Ultralytics YOLO的 `YOLO()` 方法可能无法直接兼容ONNX的某些特性(如动态输入尺寸)。 - 建议使用ONNX Runtime或OpenCV的DNN模块加载ONNX模型。 - **文件路径问题**: - 确保 `v11320.onnx` 文件存在于当前工作目录中,或提供完整路径(如 `r"C:\models\v11320.onnx"`)。 --- ### **5. 验证模型是否加载成功** ```python if model is not None: print("模型加载成功!") else: print("模型加载失败,请检查路径或格式。") ``` --- ### **总结** - **推荐做法**: 1. 使用 `.export()` 导出ONNX模型。 2. 通过 `onnxruntime` 加载ONNX并推理。 - **替代方案**: - 若需直接使用YOLO接口,建议加载PyTorch模型(`.pt` 文件)。 如需进一步调试,请提供具体的错误信息!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值