【YOLO11速通指南】本地快速部署及预测(目标检测+实例分割+姿态估计)

前言:

      作为使用者来说,实际上YOLO系列目标检测模型性能迭代变化不大,特别是自v8以来,v9、v10、v11每代综合性能都略有提升,下面是官方发布的历代YOLO模型对比分析图:

       总的来说,从Ultralytics官方的介绍来看,最新的YOLO11模型可在检测分割姿势估计跟踪分类等多项任务中提供最先进的 (SOTA) 性能,充分利用各种人工智能应用和领域的能力。

       目前YOLO11没有发表论文,能参考的只有官方文档:

官方文档:YOLO11官方文档icon-default.png?t=O83Ahttps://docs.ultralytics.com/models/yolo11/

官方介绍视频YouTobe:如何使用 Ultralytics YOLO11 进行目标检测和跟踪 |如何进行基准测试 |YOLO11 发布🚀icon-default.png?t=O83Ahttps://www.youtube.com/watch?v=-JXwa-WlkU8

       另外,如果你想更加深入的了解YOLO11,可以参考这篇文章:

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理icon-default.png?t=O83Ahttps://blog.csdn.net/qq_41204464/article/details/142769763

这篇文章我将会带你手把手跑通YOLO11,有关在自有数据集进行模型训练的文章我会在文末给出:

一、clone代码与基础配置(下载源码到本地)

1.1 项目地址:GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀

1.2 选择Download ZIP或者Clone都可以

clone:

git clone https://github.com/ultralytics/ultralytics.git

1.3 如果不能科学上网,也可以通过我的百度网盘获取文件:YOLO11源码与weights权重
链接:https://pan.baidu.com/s/13i_w3GyuX_6DVQac4B_YZw   提取码:8888icon-default.png?t=O83Ahttps://pan.baidu.com/s/13i_w3GyuX_6DVQac4B_YZw%C2%A0

注意:因为本文只目的只是为了快速跑通YOLO11,为了减少下载量且提高下载速度,所以weights文件夹里面只有YOLO11n系列权重,其中包括:

yolo11n目标检测(base)
yolo11n-cls图像分类(Classify)
yolo11n-obb定向对象检测(Oriented Bounding Box)
yolo11n-pose姿态估计(Pose)
yolo11n-seg实例分割(Segment)

接下来就是解压、使用IDE编辑器打开、创建一个虚拟环境(如果没有的话)、下载依赖库

1.4 打开 ultralytics-main\pyproject.toml 可以看到,python解释器版本要>=3.8:

[project]
name = "ultralytics"
dynamic = ["version"]
description = "Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification."
readme = "README.md"
requires-python = ">=3.8"

1.5 下载官方库:

pip install ultralytics

1.6 下载必要的外部库(IDE应该会提示自动下载):

# Required dependencies

dependencies = [
    "numpy>=1.23.0",
    "numpy<2.0.0; sys_platform == 'darwin'", # macOS OpenVINO errors https://github.com/ultralytics/ultralytics/pull/17221
    "matplotlib>=3.3.0",
    "opencv-python>=4.6.0",
    "pillow>=7.1.2",
    "pyyaml>=5.3.1",
    "requests>=2.23.0",
    "scipy>=1.4.1",
    "torch>=1.8.0",
    "torch>=1.8.0,!=2.4.0; sys_platform == 'win32'", # Windows CPU errors w/ 2.4.0 https://github.com/ultralytics/ultralytics/issues/15049
    "torchvision>=0.9.0",
    "tqdm>=4.64.0", # progress bars
    "psutil", # system utilization
    "py-cpuinfo", # display CPU info
    "pandas>=1.1.4",
    "seaborn>=0.11.0", # plotting
    "ultralytics-thop>=2.0.0", # FLOPs computation https://github.com/ultralytics/thop
]

1.7 在ultralytics-main\ultralytics目录下新建weights目录,把下载的模型权重复制进去:

1.8 在ultralytics-main\ultralytics目录下新建predict.py文件

接下来就可以写代码使用模型进行预测了,实际上YOLO11的预测代码、训练代码都很简单,几行就可以实现

二、使用代码进行图片、视频预测(目标检测、实例分割、姿态估计)

2.1 目标检测_图片:

# 导包
from ultralytics import YOLO

# 加载模型
model = YOLO("weights/yolo11n.pt") 

# 预测
results = model('assets/bus.jpg')  # 括号里面是图片地址

如果需要保存结果或显示结果:

# 导包
from ultralytics import YOLO
import cv2
# 加载模型
model = YOLO("weights/yolo11n.pt") 

# 预测
results = model('assets/bus.jpg', save=True)  # 括号里面是图片地址

# 获取绘制了边界框的图像
annotated_image = results[0].plot() 

# 显示图像
cv2.imshow('YOLO Detect Result', annotated_image) 

# 按下任意键关闭窗口
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows() 

运行后即可得到:

因为使用了cv2用于显示处理后的图像,所以结果不仅会保存到指定目录,也会弹窗显示出来:

如果需要对视频进行检测

在 ultralytics/assets文件夹下新建video文件夹用于保存视频数据

在 ultralytics/runs文件夹下新建detect_video文件夹用于保存输出结果

新建 ultralytics/predict_video.py

2.2 目标检测_视频:

from ultralytics import YOLO
import cv2

# 1、加载YOLO模型(YOLOv5或YOLOv8的权重文件)
model = YOLO("yolov8n.pt")  # 使用YOLOv8的小模型。你也可以替换成YOLOv5的权重,如 "yolov5s.pt"

# 2、输入视频文件路径
video_path = 'assets/video/scujj.mp4'

# 3、使用OpenCV读取视频
cap = cv2.VideoCapture(video_path)

# 4、获取视频的帧率和尺寸
fps = cap.get(cv2.CAP_PROP_FPS)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 5、定义视频输出路径,保存检测结果
output_video_path = 'runs/output_video/scujj.mp4'

# 设置视频编码方式(例如 mp4v 用于 .mp4 格式)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  
out = cv2.VideoWriter(output_video_path, fourcc, fps, (frame_width, frame_height))

while cap.isOpened():
    # 6、读取每一帧
    ret, frame = cap.read()
    if not ret:
        # 7、如果没有读取到帧,退出循环
        break

    # 8、使用YOLO模型进行推理
    results = model(frame)  # 推理每一帧

    # 9、获取检测结果,并绘制边界框和标签
    annotated_frame = results[0].plot()

    # 10、调整视频帧大小以适应窗口
    resized_frame = cv2.resize(annotated_frame, (450, 800))

    # 11、将处理后的帧写入到输出视频
    out.write(resized_frame)

    # 12、实时显示结果(可在10处设置窗口大小)
    cv2.imshow('YOLO Detection', resized_frame)

    # 13、按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


# 14、释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

print(f"检测结果已保存至: {output_video_path}")

结果如下(这里引用了四川大学锦江学院官方抖音号国庆节相关视频 ):

完整预测视频观看链接🔗:

scujj_detected-CSDN直播目标检测https://live.csdn.net/v/435159

以上就是目标检测的全部内容,由于篇幅,接下来只简单演示实例分割、姿态估计

图像分类、定向对象检测就自行测试,都几乎是一样的。

yolo11n

目标检测(base)
yolo11n-cls图像分类(Classify)
yolo11n-obb定向对象检测(Oriented Bounding Box)
yolo11n-pose姿态估计(Pose)
yolo11n-seg实例分割(Segment)

2.3 实例分割_图片(只是把权重替换成了yolo11n-seg.pt):

# 导包
from ultralytics import YOLO
import cv2
# 加载模型
model = YOLO("weights/yolo11n-seg.pt") 

# 预测
results = model('assets/bus.jpg', save=True)  # 括号里面是图片地址

# 获取绘制了边界框的图像
annotated_image = results[0].plot()  # results[0].plot() 返回带有检测框的图像(NumPy 数组)

# 显示图像
cv2.imshow('YOLO Detect Result', annotated_image)  # 显示带有检测框的图像

# 按下任意键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()  # 关闭所有窗口

结果如下:

2.4 姿态估计(只是把权重替换成了yolo11n-pose.pt):

        由此可见,使用YOLO11进行预测是非常简便且简单的,代码几乎一样,只是更改了模型权重(weights)文件,对应关系如上表。如果你需要对视频进行实例分割、姿态估计等等,也只是需要把对应的权重从目标检测修改过来即可。

如果你对YOLO11的模型训练感兴趣,可以参考我的另一篇文章

【YOLO11模型训练】使用YOLO11在自己的数据集上进行简单的模型训练、预测与导出icon-default.png?t=O83Ahttps://blog.csdn.net/2301_78753314/article/details/143951605

如果你对YOLO的单目深度估计感兴趣,可以参考我的另一篇文章:

【YOLO简单测距】单目测距——基于YOLOv5的单目深度估计算法的实现icon-default.png?t=O83Ahttps://blog.csdn.net/2301_78753314/article/details/140220033

如果你对YOLO11的安卓部署,可以参考我的另一篇文章:

【YOLO11安卓部署】10分钟快速高效的把YOLO11部署到安卓端icon-default.png?t=O83Ahttps://blog.csdn.net/2301_78753314/article/details/143966676

### 关于YOLOv11实例分割的功能 目前可获得的信息主要集中在YOLO系列较早版本如YOLOv5以及更新迭代后的YOLOv7和YOLOv8上关于实例分割的应用和发展情况[^1]。然而对于YOLOv11的具体细节特别是其实例分割功能,在现有资料中并没有直接提及。 考虑到YOLO架构的一贯发展路径,可以推测YOLOv11可能会继承并优化之前版本中的特性。例如,从YOLOv7开始引入了对人体姿态估计的支持,并进一步扩展到实例分割领域;而YOLOv8则提供了更便捷的方式让用户能够将自己的模型放置在指定目录下以便进行实例分割任务[^2]。 为了实现类似于YOLOv11这样的高级版网络下的实例分割操作,建议参考相近版本(比如YOLOv8)的做法来构建环境与准备数据集: #### 数据集准备 遵循官方指南创建自定义的数据集是非常重要的一步。这常涉及到使用特定命令完成图像的自动标注工作,确保每张图片都配有对应的边界框和其他必要的元数据信息。以YOLOv8为例,可以过执行如下Python脚本来进行预测阶段的操作,从而获取初步的结果用于后续调整或评估: ```python from ultralytics import YOLO model_path = "path_to_your_model" source_images_dir = "path_to_source_images" # 加载预训练好的模型权重 model = YOLO(model_path) results = model.predict(source=source_images_dir, save=True, imgsz=640) ``` 此段代码展示了如何加载一个已经训练完毕的YOLO模型并对一批测试图片做推理处理,同时保存带有标记结果的新副本至默认输出位置。 #### 验证标签准确性 无论采用哪个具体版本实施项目开发,始终要重视对输入样本及其关联标签之间匹配关系的确立。因为任何偏差都会直接影响到最后的学习效果乃至最终性能指标的好坏程度。因此有必要编写简单的检验程序确认转换过程无误,下面给出了一种简单的方法用来检查txt格式的目标描述文件是否符合预期标准[^4]: ```python import os def check_labels(image_folder, label_folder): image_files = set([os.path.splitext(f)[0] for f in os.listdir(image_folder)]) label_files = set([os.path.splitext(f)[0] for f in os.listdir(label_folder)]) missing_in_image = list(label_files - image_files) missing_in_label = list(image_files - label_files) if not (missing_in_image or missing_in_label): print("All labels match images.") else: print(f"Missing Images: {missing_in_image}") print(f"Missing Labels: {missing_in_label}") image_directory = 'your_image_directory' label_directory = 'your_label_directory' check_labels(image_directory, label_directory) ``` 上述函数接受两个参数分别指向存储原始照片和对应文本记录的位置,过对比两者间ID编号是否存在差异进而判断整个集合内部结构是否一致可靠。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值