训练
采用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. 执行训练
二选一
- 通过命令行执行训练
yolo task=detect mode=train model=yolov8n.yaml data=data.yaml epochs=500 batch=64
使用python脚本训练 train.py
from ultralytics import YOLO # 加载YOLOv8模型 model = YOLO('yolov8n.pt') # 可以选择不同的预训练模型 # 开始训练 model.train(data='data.yaml', epochs=500, imgsz=640, resume=True)
参数说明
- 模型: YOLOv8n、YOLOv8m、YOLOv8l 和 YOLOv8x 是YOLOv8系列中的三个较大模型,它们分别代表了"最小"、“中等”、“大”和“极大”的模型尺寸
- imgsz: 参数定义了所有输入图像都会被缩放到的统一尺寸。这对于模型来说非常重要,因为它需要在一个固定尺寸的输入上进行训练和推理。 尺寸越大GPU内存消耗越大, 640x640 是一个很好的折衷点, 如果需要检测小物体, 需要设置成1024或更大的值
- epochs: 训练多少轮, 默认100
- batch: 指的是每次训练迭代时处理的图像数量,也就是所谓的批量大小(batch size)
如何设置 batch 参数
根据硬件资源:
如果你的GPU内存较大,可以尝试使用较大的批量大小,如 16 或 32。
如果GPU内存有限,可以选择较小的批量大小,如 4 或 8。
根据数据集特性:
如果数据集很大,较大的批量大小可以提高训练效率。
如果数据集较小,较小的批量大小可能有助于探索更广泛的优化空间。
根据训练目标:
如果你追求快速训练,可以使用较大的批量大小。
如果你追求更高的精度,可以使用较小的批量大小,并适当增加训练轮数。
平衡速度与质量:
在大多数情况下,批量大小为 8 到 16 是一个很好的折衷点,既不会过于占用内存,也能保持较快的训练速度。
使用训练好的模型检测
二选一
通过命令行检测
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
通过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 等
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。