YOLO11 使用入门

server/2025/3/16 20:41:41/

YOLO12 使用入门

  • 1. 源码下载
  • 2. 权重下载
  • 3. 环境配置
  • 4. 例程测试
    • 4.1. 目标检测
      • 4.1.1. 源文件 model
      • 4.1.2. 结果Results
      • 4.1.3. 边界框 Boxes
    • 2.2. 图像分割
      • 4.2.1. 推理 model.predict
      • 4.2.2. 掩码 Masks


1. 源码下载

之前介绍了《目标检测 YOLOv5 使用入门》
在这里插入图片描述

现在是 2024.12.20 目前已经出到了 YOLO11,提升还是明显的

这里整理了含例程的仓库(基于 ultralytics-v8.3.51

git clone https://gitee.com/JoveH-H/ultralytics-yolo11.git

官方源码放在 Github 上,这里用 Gitee 的同步仓库,国内快一点

git clone https://gitee.com/JoveH-H/ultralytics.git

2. 权重下载

当然也可以去 官方 和其他地方下载
在这里插入图片描述

含例程的仓库 ultralytics-yolo11 已经包含了说需要的 最小模型 yolo11n
重在了解如何使用,实际效果自己应用再琢磨,就以n模型举例就行了

在这里插入图片描述


3. 环境配置

官方建议python3.8以上,因为有些语法旧版本不支持
以python3.7为例,需要对 := 修改成先赋值再用于判断

还有就是在Python 3.8及以上版本中,importlib.metadata 是标准库的一部分
但在Python 3.7及以下版本中,它并不存在,需要通过 importlib_metadata 这个第三方包来支持

最后屏蔽每次提示版本过低就行了,烦


4. 例程测试


4.1. 目标检测

在自定义训练目标检测任务前,先让程序正常跑起来,新建个测试例程 test_det.py

from ultralytics import YOLO# 加载模型
model = YOLO("weights/det/yolo11n.pt")# 模型推理
results = model("ultralytics/assets/zidane.jpg")# 结果可视化
for i in range(len(results)):# 打印边框result_lists = results[i].boxes.data.tolist()for j in range(len(result_lists)):x1, y1 = round(result_lists[j][0]), round(result_lists[j][1])x2, y2 = round(result_lists[j][2]), round(result_lists[j][3])conf = round(result_lists[j][4], 2)cls = int(result_lists[j][5])print('Img{} det{}: {} conf:{} box:({}, {}) ({}, {})'.format(i+1, j+1, results[i].names[cls], conf, x1, y1, x2, y2))# 展示结果results[i].show()

利用 ultralytics/assets/zidane.jpg 的图片,推理检测,打印边框和展示结果

Img1 det1: person conf:0.84 box:(748, 42) (1148, 711)
Img1 det2: person conf:0.78 box:(149, 203) (1125, 715)
Img1 det3: tie conf:0.45 box:(361, 438) (525, 717)

在这里插入图片描述

结果和其他参数的更多说明参考 官方说明


4.1.1. 源文件 model

资料来源示例类型说明
图像‘image.jpg’str 或 Path单个图像文件。
网址‘https://ultralytics.com/images/bus.jpg’str图片的 URL。
截图‘screen’str截图
PILImage.open(‘image.jpg’)PIL.Image具有 RGB 通道的 HWC 格式。
OpenCVcv2.imread(‘image.jpg’)np.ndarray带有 BGR 频道的 HWC 格式 uint8 (0-255).
numpynp.zeros((640,1280,3))np.ndarray带有 BGR 频道的 HWC 格式 uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.Tensor带 RGB 通道的 BCHW 格式 float32 (0.0-1.0).
CSV‘sources.csv’str 或 Path包含图像、视频或目录路径的 CSV 文件。
视频‘video.mp4’str 或 PathMP4 和 AVI 等格式的视频文件
目录‘path/’str 或 Path包含图像或视频的目录路径。
球体‘path/*.jpg’str全局模式来匹配多个文件。使用 * 字符作为通配符。
YouTube‘https://youtu.be/LNwODJXcvt4’strYouTube 视频的 URL。
‘rtsp://example.com/media.mp4’str流媒体协议(如 RTSP、RTMP、TCP)的 URL 或 IP 地址。
多流‘list.streams’str 或 Path*.streams 文本文件,每行一个流 URL,即 8 个流将以 8 的批处理大小运行。
网络摄像头0int要进行推理的已连接摄像机设备的索引。

4.1.2. 结果Results

Results 对象具有以下属性

属性类型说明
orig_imgnumpy.ndarray原始图像的 numpy 数组。
orig_shapetuple原始图像的形状,格式为(高、宽)。
boxesBoxes, optional包含检测边界框的方框对象。
masksMasks, optional包含检测掩码的掩码对象。
probsProbs, optionalProbs 对象,包含分类任务中每个类别的概率。
keypointsKeypoints, optional关键点对象,包含每个对象的检测关键点。
obbOBB, optional包含定向包围盒的 OBB 对象。
speeddict每幅图像的预处理、推理和后处理速度字典,单位为毫秒。
namesdict类名字典。
pathstr图像文件的路径。

Results 对象有以下方法:

方法返回类型说明
update()None更新结果对象的方框、掩码和 probs 属性。
cpu()Results在CPU 内存中返回包含所有张量的 Results 对象副本。
numpy()Results返回结果对象的副本,其中所有张量均为 numpy 数组。
cuda()Results在GPU 内存中返回包含所有张量的 Results 对象副本。
to()Results返回带有指定设备和 dtype 上张量的 Results 对象副本。
new()Results返回一个具有相同图像、路径和名称的新结果对象。
plot()numpy.ndarray绘制检测结果。返回注释图像的 numpy 数组。
show()None在屏幕上显示带注释的结果。
save()None将注释结果保存到文件中。
verbose()str返回每个任务的日志字符串。
save_txt()None将预测结果保存到 txt 文件中。
save_crop()None将裁剪后的预测保存到 save_dir/cls/file_name.jpg.
summary()List[Dict]词典列表,每个词典都包含结果的摘要信息
to_df()DataFrame将结果转换为 Pandas 数据帧。
to_csv()str将结果转换为 CSV(逗号分隔值)格式。
to_xml()str将结果转换为 XML(可扩展标记语言)格式。
to_json()str将结果转换为 JSON 格式。
to_sql()None将结果转入 SQL 数据库。

4.1.3. 边界框 Boxes

Boxes 对象可用于索引、操作和将边界框转换为不同格式

名称类型说明
cpu()方法将对象移至CPU 内存。
numpy()方法将对象转换为 numpy 数组。
cuda()方法将对象移至CUDA 内存。
to()方法将对象移动到指定设备。
xyxy财产 (torch.Tensor)以 xyxy 格式返回方框。
conf财产 (torch.Tensor)返回方框的置信度值。
cls财产 (torch.Tensor)返回方框的类值。
id财产 (torch.Tensor)返回盒子的轨道 ID(如果有)。
xywh财产 (torch.Tensor)以 xywh 格式返回方框。
xyxyn财产 (torch.Tensor)以 xyxy 格式返回按原始图像大小归一化的方框。
xywhn财产 (torch.Tensor)以 xywh 格式返回按原始图像大小归一化的方框。

2.2. 图像分割

在自定义训练图像分割任务前,先让程序正常跑起来,新建个测试例程 test_seg.py

from ultralytics import YOLO
import numpy as np
import cv2# 加载模型
model = YOLO("weights/seg/yolo11n-seg.pt")# 模型预测
results = model.predict(source='ultralytics/assets/',imgsz=640,project='resources/predict/seg/examples',name='exp',save=True,conf=0.3,iou=0.7)# 打印边框
for i in range(len(results)):print()# 目标检测boxes_lists = results[i].boxes.data.tolist()# 图像分割masks_lists = results[i].masks.data.tolist()for j in range(len(boxes_lists)):# 打印边框x1, y1 = round(boxes_lists[j][0]), round(boxes_lists[j][1])x2, y2 = round(boxes_lists[j][2]), round(boxes_lists[j][3])conf = round(boxes_lists[j][4], 2)cls = int(boxes_lists[j][5])print('Img{} det{}: {} conf:{} box:({}, {}) ({}, {})'.format(i+1, j+1, results[i].names[cls], conf, x1, y1, x2, y2))# 显示分类img = results[i].plot()height, width, channel = img.shapemask_array = np.array(masks_lists[j], dtype=np.uint8)mask_array = cv2.resize(mask_array, (width, height), interpolation=cv2.INTER_AREA)image = cv2.add(img, np.zeros(np.shape(img), dtype=np.uint8), mask=mask_array)cv2.imshow('1', image)cv2.waitKey(0)

预测资源里的两个图片,结果保留在 resources/predict/seg/examples
然后打印目标检测的边框,显示每个目标的图像分割

在这里插入图片描述

在这里插入图片描述


4.2.1. 推理 model.predict

推理参数

参数类型默认值说明
sourcestr‘ultralytics/assets’指定推理的数据源。可以是图像路径、视频文件、目录、URL 或用于实时馈送的设备 ID。支持多种格式和来源,可灵活应用于不同类型的输入。
conffloat0.25设置检测的最小置信度阈值。如果检测到的对象置信度低于此阈值,则将不予考虑。调整该值有助于减少误报。
ioufloat0.7非最大抑制 (NMS) 的交叉重叠(IoU) 阈值。较低的数值可以消除重叠的方框,从而减少检测次数,这对减少重复检测非常有用。
imgszint 或 tuple640定义用于推理的图像大小。可以是一个整数 640 或一个(高度、宽度)元组。适当调整大小可以提高检测效率 精确度 和处理速度。
halfboolFalse启用半精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低。
devicestrNone指定用于推理的设备(例如:…)、 cpu, cuda:0 或 0).允许用户选择CPU 、特定GPU 或其他计算设备执行模型。
batchint1指定推理的批量大小(仅当来源为 目录、视频文件或 .txt 文件).更大的批次规模可以提供更高的吞吐量,缩短推理所需的总时间。
max_detint300每幅图像允许的最大检测次数。限制模型在单次推理中可以检测到的物体总数,防止在密集场景中产生过多的输出。
vid_strideint1视频输入的帧间距。允许跳过视频中的帧,以加快处理速度,但会牺牲时间分辨率。数值为 1 时会处理每一帧,数值越大越跳帧。
stream_bufferboolFalse决定是否对接收到的视频流帧进行排队。如果 False,旧帧会被丢弃,以容纳新帧(针对实时应用进行了优化)。如果为 “真”,则在缓冲区中排队等待新帧,确保不会跳过任何帧,但如果推理的 FPS 低于流的 FPS,则会导致延迟。
visualizeboolFalse在推理过程中激活模型特征的可视化,从而深入了解模型 "看到 "了什么。这对调试和模型解释非常有用。
augmentboolFalse可对预测进行测试时间增强(TTA),从而在牺牲推理速度的情况下提高检测的鲁棒性。
agnostic_nmsboolFalse启用与类别无关的非最大抑制 (NMS),可合并不同类别的重叠方框。这在多类检测场景中非常有用,因为在这种场景中,类的重叠很常见。
classeslist[int]None根据一组类别 ID 过滤预测结果。只有属于指定类别的检测结果才会返回。这对于在多类检测任务中集中检测相关对象非常有用。
retina_masksboolFalse返回高分辨率分割掩码。返回的掩码 (masks.data) 如果启用,将与原始图像大小相匹配。如果禁用,它们将与推理过程中使用的图像大小一致。
embedlist[int]None指定从中提取特征向量或嵌入的层。这对聚类或相似性搜索等下游任务非常有用。
projectstrNone保存预测结果的项目目录名称,如果 save 已启用。
namestrNone预测运行的名称。用于在项目文件夹内创建一个子目录,在下列情况下存储预测输出结果 save 已启用。

4.2.2. 掩码 Masks

Masks 对象可用于索引、操作和将掩码转换为线段

名称类型说明
cpu()方法返回CPU 内存中的掩码tensor 。
numpy()方法以 numpy 数组形式返回掩码tensor 。
cuda()方法返回GPU 内存中的掩码tensor 。
to()方法返回具有指定设备和 dtype 的掩码tensor 。
xyn财产 (torch.Tensor)以张量表示的标准化片段列表。
xy财产 (torch.Tensor)以张量表示的像素坐标线段列表。

谢谢


http://www.ppmy.cn/server/175518.html

相关文章

零基础上手Python数据分析 (4):Python数据结构精讲 - 列表、元组、字典、集合

写在前面 回顾一下,在之前的博客中,我们学习了 Python 的基本数据类型(数值、字符串、布尔值)和核心语法(运算符、变量、流程控制、函数、模块)。 现在,我们已经掌握了 Python 编程的基础知识。 接下来,我们将进入数据分析的关键环节: 数据组织。 在数据分析中,数据…

C++的名称空间

C++的名称空间(namespace)是一种用于组织代码、防止命名冲突的机制。以下是名称空间的详细说明和使用建议: 1. 名称空间的定义 使用namespace关键字定义,内部可包含变量、函数、类等: namespace MyNamespace {int a;void func() {} }2. 访问方式 作用域解析运算符:::显…

西门子S7-1200 PLC远程上下载程序方案

西门子S7-1200 PLC远程上下载程序方案(巨控GRM552YW-C模块) 三步完成配置 | 全球适用 | 稳定高效 三步快速完成远程配置 硬件部署 准备巨控GRM552YW-CHE模块1台,通过网口连接西门子S7-1200 PLC以太网口。 模块支持4G/5G/Wi-Fi/网线接入外网…

linux(ubuntu)中Conda、CUDA安装Xinference报错ERROR: Failed to build (llama-cpp-python)

文章目录 一、常规办法二、继续三、继续四、缺少 libgomp库(最终解决)在 Conda 环境中安装 libgomp 如果符合标题情况 执行的: pip install "xinference[all]"大概率是最终解决的情况。 一、常规办法 llama-cpp-python 依赖 CMak…

删除有序数组中的重复项(26)

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {auto first nums.begin();auto last nums.end();auto result first;if (first last) {return std::…

基于深度学习的肺炎X光影像自动诊断系统实现,真实操作案例分享,值得学习!

医疗影像智能化的技术演进 医学影像分析正经历从人工判读到AI辅助诊断的革命性转变。传统放射科医师分析胸部X光片需要8-12年专业训练&#xff0c;而基于深度学习的智能系统可在秒级完成检测。本文将以肺炎X光检测为切入点&#xff0c;详解从数据预处理到模型部署的全流程实现。…

深度学习基础:线性代数的本质1——深入理解向量

目录 一、向量是什么 1. 从物理学角度 2. 从计算机专业角度 3. 从数学角度 4. 思考向量的特点方式 ① 向量是空间中的箭头 ② 向量是有序的数字列表 二、向量加法和向量相乘 1. 向量加法 2. 向量相乘 一、向量是什么 线性代数中最基础&#xff0c;最根源的组成部分。 …

C++类对象创建全解析:从构造函数到内存管理

目录 对象的创建 对象的创建规则 对象的数据成员初始化 对象所占空间大小 总结 指针数据成员 对象的创建 在之前的 Computer 类中&#xff0c;通过自定义的公共成员函数 setBrand 和 setPrice 实现了对数据成员的初始化。实际上&#xff0c;C 为类提供了一种特殊的成员函…