YOLO(You Only Look Once)是当前最流行的目标检测算法之一,而YOLO11是YOLO家族中的最新版本,具有更高的准确度和效率。
在本文中,我们将通过YOLO11目标检测模型,带你了解如何完成一个目标检测任务以及无代码高效操作。接下来,我们将一步步指导你如何从数据准备到模型训练、推理,最终完成目标检测任务。
目标检测任务的第一步是准备好数据。通常情况下,我们会使用一些标注工具(如LabelMe)对图像进行标注。
下载链接:https://github.com/wkentaro/labelme
标注内容包括图像中每个物体的位置、类别等信息。YOLO11需要的数据格式是每张图像对应一个txt文件,每行代表一个物体,包括类别索引和物体的边框位置(中心点坐标、宽度和高度)。
下载并安装LabelMe工具,点击LabelMe GitHub。
打开LabelMe,选择“创建矩形”,对目标物体进行标注。
示例的json文件里面的内容:
YOLO11的标注文件格式为:
<object-class> <x_center> <y_center> <width> <height>
<object-class>: 物体类别(0、1、2等)
<x_center> 和 <y_center>: 物体中心点坐标(归一化到0-1)
<width> 和 <height>: 物体的宽度和高度(归一化到0-1)
以下是将LabelMe的json格式标注转换为YOLO11格式的Python代码:
import json
import os
# 定义标签映射,将类别名称映射为ID
label_map = {
"car": 0, # 汽车
"bus": 1 # 公交车
}
def convert_labelme_to_yolo(json_path, output_dir):
with open(json_path, 'r') as f:
labelme_data = json.load(f) # 读取JSON数据
image_width = labelme_data['imageWidth']
image_height = labelme_data['imageHeight']
yolo_annotations = []
for shape in labelme_data['shapes']:
label = shape['label']
if label not in label_map:
continue # 如果标签未定义,则忽略
class_id = label_map[label] # 获取类别ID
points = shape['points']
if shape['shape_type'] == 'rectangle':
(x1, y1), (x2, y2) = points
else:
continue # 如果是多边形或其他形状,暂时不处理
# 计算YOLO11格式所需的中心点和宽高
x_center = (x1 + x2) / 2.0 / image_width
y_center = (y1 + y2) / 2.0 / image_height
width = (x2 - x1) / image_width
height = (y2 - y1) / image_height
yolo_annotations.append(f"{class_id} {x_center} {y_center} {width} {height}")
output_file = os.path.join(output_dir, os.path.splitext(os.path.basename(json_path))[0] + '.txt')
with open(output_file, 'w') as f:
f.write('\n'.join(yolo_annotations))
def process_folder(input_folder, output_folder):
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.endswith(".json"):
json_path = os.path.join(input_folder, filename)
convert_labelme_to_yolo(json_path, output_folder)
# 示例使用
input_folder = "./json_labels" # 输入json_labels文件夹路径
output_folder = "./yolo_labels" # 输出YOLO格式标签文件夹路径
process_folder(input_folder, output_folder) # 执行转换
问题1:KeyError:标签没有在label_map中定义。
原因: 如果你的数据集中有没有定义的标签,程序会报错。
解决方法: 检查LabelMe标注文件中的标签,确保它们都已在label_map中定义。如果数据集标签比较多,可以通过增加标签的映射来避免这种问题。
问题2:标签转换时,YOLO格式坐标显示错误。
原因: YOLO的坐标是相对于图像尺寸的归一化值,而非像素值。
解决方法: 确保计算边框坐标时,宽度和高度是基于图像尺寸进行归一化处理。
在YOLO11的目标检测中,除了标注数据外,还需要配置数据集路径以及类别信息。YOLO11模型结构的配置文件,比如yolo11.yaml,它所在位置是ultralytics/cfg/models/11/yolo11.yaml里面有详细的模型结构参数信息 :
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
s: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
m: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
l: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
x: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs
# YOLO11n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 2, C2PSA, [1024]] # 10
# YOLO11n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] # cat head P4
- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 10], 1, Concat, [1]] # cat head P5
- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)
- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)
YOLO11使用一个yaml配置文件来描述数据集的位置和类别信息。比如我们创建一个名为auto-parts-det.yaml的数据集配置文件:
# YOLO11 Dataset Configuration
path: ./datasets/det_auto_parts # 数据集根目录
train: train/images # 训练集图像路径
val: val/images # 验证集图像路径
names:
0: car
1: bus
问题:ValueError: too many values to unpack
原因:yaml配置文件路径不正确,或者train和val字段指向的路径有问题。
解决方法:确保配置文件中的路径正确,并且确保train和val字段指向的数据集文件夹确实存在。
当数据集配置文件、模型结构配置文件准备好之后,我们可以开始训练模型。
这里需要注意结构配置文件,虽然文件名是yolo11.yaml,但是需要再后面指定模型尺寸(n, s, m, l, x),比如需要m规模的模型,在加载模型时用YOLO("yolo11m.yaml");如果不指定,默认是n的。
以下是YOLO11模型训练的示例代码:
from ultralytics import YOLO
# 加载YOLO11模型配置文件和预训练权重
model = YOLO("yolo11m.yaml").load("weights/yolo11m.pt")
# 训练参数设置
train_params = {
'data': "auto-parts-det.yaml", # 数据集配置文件路径
'epochs': 100, # 训练轮次
'imgsz': 640, # 输入图像大小
'batch': 8, # 批次大小
'save': True, # 是否保存模型
'device': "cuda", # 使用GPU训练
'optimizer': 'Adam', # 优化器选择
'lr0': 0.01, # 初始学习率
}
# 开始训练
model.train(**train_params)
在训练过程中,YOLO11会自动优化超参数,并且在训练完成后保存模型权重和训练日志。
注意:训练模型时,查看Ultralytics 文档的训练设置部分中的参数会很有帮助。此部分对于您的训练过程至关重要。
问题1:RuntimeError: CUDA error: out of memory
原因:GPU内存不足,无法加载模型或数据。
解决方法:减小批次大小(如batch=4或更小),或者使用cpu进行训练,但会牺牲训练速度。
问题2:训练过程中出现损失值不下降。
原因:可能是学习率设置过高,导致模型无法收敛。
解决方法:尝试减小学习率,如将lr0调整为更小的值(如0.001),并检查数据是否正确标注。
训练完成后,可以在runs/detect/train5路径,可以看到保存的权重、训练记录表格和标签信息等
模型训练完成后,我们可以用训练好的模型进行推理。YOLO11支持高效的实时目标检测。以下是如何使用训练好的YOLO11模型对单张图像进行目标检测的代码:
# 加载训练好的模型
model = YOLO("yolo11m.yaml").load("weights/yolo11m.pt")
# 对图像进行推理
results = model.predict("path_to_your_image.jpg")
# 输出检测结果
results.show() # 显示结果
通过运行这段代码,YOLO11将检测图像中的目标并显示检测结果,包括每个物体的类别、边框位置以及置信度。
问题1:推理结果不准确,检测框位置错误。
原因:可能是由于模型没有完全训练好,或者输入图像与训练图像有较大差异。
解决方法:增加更多的训练数据,确保训练集包含尽可能多的场景和物体。还可以尝试重新调整图像大小(如imgsz=416)。
问题2:FileNotFoundError: No such file or directory
原因:模型路径或输入图像路径错误。
解决方法:确保路径正确,特别是权重文件和图像路径。
以上如何使用YOLO11完成一个目标检测任务,从数据标注到训练和推理。如果你是刚刚入门对于模型配置、环境部署等等流程都不熟悉,那么今天小编给你推荐一个全程无代码的高效模型训练部署平台。
无论是最新的YOLO11还是YOLO系列其他模型算法,Coovally平台通通可以满足的你的训练需求,而且模型训练对比、实验结果等参数直观对比,满足你的课题研究和商业应用。
不仅如此它还整合了整合30+国内外开源社区1000+模型算法以及各类公开识别数据集。
下面就让我们好好看看全程无代码如何进行模型训练吧!
进入Coovally平台点击【全部模型】,搜索YOLO11,在这里可以选择不同的YOLO11版本。
完成下载代码包或者点击另存为我的模型,模型已全部配置完成,下载即用。进入【模型集成】页面,进行安装。
进入【图像数据】页面,点击创建数据集,输入数据集名称、描述,选择任务类型,上传压缩包文件。创建数据集时可以按照比例拆分训练集、验证集、测试集。
Coovally平台还有转换工具等多种工具帮助建模。
进入【辅助标注】页面,点击创建样本集,进入样本集详情页,创建好标签进行数据标注。
可以选择几组数据进行人工标注,标注完成后发布为数据集启动微调训练,剩余样本集数据即可全部自动化完成。
进入数据集详情页,输入任务名称,选择模型配置模版,设置实验E-poch次数,训练次数等信息,即可开始训练。
除此之外还可进行算法增强,提高模型的泛化能力。
模型训练完成后,可查看数据集和标签的具体信息,还能看到标签类别与真实标签、预测标签的数量,以及精确率和召回率等信息;
成模型转换与模型部署后,即可上传图片进行结果预测。完成后还可以将模型下载与分享。
Coovally平台还支持云边端转换,可转换成onnx、TensorRT格式。
无论你是AI领域的专家,还是刚刚接触机器学习的初学者,Coovally平台都能为你提供简便高效的模型训练体验。从数据准备到训练调优、模型验证,甚至是部署应用,平台都能为你提供一站式的解决方案。通过使用Coovally平台,你可以大大缩短项目的开发周期,提高生产力,快速将你的想法转化为实际应用。
赶快加入Coovally平台,体验智能化、便捷化的AI训练之旅吧!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。