自学内容网 自学内容网

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 评价训练结果。

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


原文地址:https://blog.csdn.net/qq_45100200/article/details/142331401

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!