训练

采用label-studio训练, 导出YOLO格式

1. 安装标记应用

# 安装
pip install label-studio
# 启动
export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=True
nohup label-studio start > label-studio.log 2>&1 &

## 标记完成后导出YOLO格式文档(还有一种导出格式YOLOv8 OBB, 支持旋转的, 暂未进行测试过)

2. 数据集目录结构

datasets
    images
        train
            xxx.jpg / jpeg
        val
            xxx.jpg / jpeg
    labels
        train
            xxx.txt
        val
            xxx.txt

说明:

训练集(Train Set)

训练集用于训练模型,它是模型学习的主要数据来源。模型通过训练集中的数据进行参数调整,使得损失函数最小化,从而学习数据的特征和模式。

验证集(Validation Set)

验证集用于评估模型在训练过程中表现如何。它帮助监控模型的性能,并在训练过程中进行超参数调整。验证集的数据不参与模型参数的更新,而是用于检查模型是否正在过拟合或欠拟合。

Train/Val按8:2分配文件

数据集配置
data.yaml

# 配置参考: https://docs.ultralytics.com/datasets/
# 数据集根目录
path: D:\WorkspacePython\UltralyticsGiftCard\datasets
# 训练集, 放80%的数据
train: images/train
# 验证集, 放20%的数据
val: images/val
# test images (optional)
#test:

names: ['AmazonText', 'AppStoreLogo', 'AppleLogo', 'AppleLogoColor', 'AppleTVLogo', 'AppleText', 'Code', 'Date', 'FootlockerText', 'GooglePlayLogo', 'GooglePlayText', 'MicrosoftText', 'PIN', 'RazerGoldLogo', 'RazerGoldText', 'SephoraText', 'SteamLogo', 'SteamText', 'VanillaLogo', 'VanillaText', 'WalmartText', 'XBoxText', 'eBayText', 'iTunesText', 'iTunsLogo']  # 按实际类别名称填写, 注意顺序
nc: 25    # 类别数量, 即names的长度

3. 执行训练

二选一

  1. 通过命令行执行训练
    yolo task=detect mode=train model=yolov8n.yaml data=data.yaml epochs=500 batch=64
  2. 使用python脚本训练 train.py

    from ultralytics import YOLO
    
    # 加载YOLOv8模型
    model = YOLO('yolov8n.pt')  # 可以选择不同的预训练模型
    
    # 开始训练
    model.train(data='data.yaml', epochs=500, imgsz=640, resume=True)

    参数说明

  3. 模型: YOLOv8n、YOLOv8m、YOLOv8l 和 YOLOv8x 是YOLOv8系列中的三个较大模型,它们分别代表了"最小"、“中等”、“大”和“极大”的模型尺寸
  4. imgsz: 参数定义了所有输入图像都会被缩放到的统一尺寸。这对于模型来说非常重要,因为它需要在一个固定尺寸的输入上进行训练和推理。 尺寸越大GPU内存消耗越大, 640x640 是一个很好的折衷点, 如果需要检测小物体, 需要设置成1024或更大的值
  5. epochs: 训练多少轮, 默认100
  6. batch: 指的是每次训练迭代时处理的图像数量,也就是所谓的批量大小(batch size)
    如何设置 batch 参数
    根据硬件资源:
    如果你的GPU内存较大,可以尝试使用较大的批量大小,如 16 或 32。
    如果GPU内存有限,可以选择较小的批量大小,如 4 或 8。
    根据数据集特性:
    如果数据集很大,较大的批量大小可以提高训练效率。
    如果数据集较小,较小的批量大小可能有助于探索更广泛的优化空间。
    根据训练目标:
    如果你追求快速训练,可以使用较大的批量大小。
    如果你追求更高的精度,可以使用较小的批量大小,并适当增加训练轮数。
    平衡速度与质量:
    在大多数情况下,批量大小为 8 到 16 是一个很好的折衷点,既不会过于占用内存,也能保持较快的训练速度。

使用训练好的模型检测

二选一

  1. 通过命令行检测

    yolo task=detect mode=predict save_txt=True data=data.yaml model=runs/detect/train4/weights/best.pt source=D:\WorkspacePython\UltralyticsCustomer\pythonProject\VOCdevkit\images\train\001a707f-ef49-4cdb-8f19-bbffa6feba01.jpg
  2. 通过python脚本检测

    import torch
    from ultralytics import YOLO
    
    # 加载预训练的 YOLOv8 模型
    model = YOLO('yolov8n.pt')  # or any other model you have downloaded and trained
    
    # 图像路径
    img_path = 'path/to/your/image.jpg'
    
    # 进行预测
    results = model.predict(source=img_path, task='detect', mode='predict')
    
    # 获取第一个图像的结果
    result = results[0]
    
    # 遍历检测结果
    for box in result.boxes.data.tolist():
     # 获取边界框坐标 [x1, y1, x2, y2]
     x1, y1, x2, y2 = box[:4]
     
     # 打印坐标
     print(f"Object detected at coordinates: ({x1}, {y1}), ({x2}, {y2})")
    
    # 如果你想要获取更详细的信息,可以使用 result.boxes.xyxy, result.boxes.conf, result.boxes.cls 等

YYGP
25 声望11 粉丝

写BUG


引用和评论

0 条评论