Skip to content

使用Ultralytics YOLO11进行对象裁剪

什么是对象裁剪?

使用Ultralytics YOLO11进行对象裁剪涉及从图像或视频中隔离和提取特定的检测对象。YOLO11模型的能力被用于准确识别和描绘对象,从而实现精确裁剪以供进一步分析或处理。



观看: 使用Ultralytics YOLO进行对象裁剪

对象裁剪的优势是什么?

  • 聚焦分析: YOLO11有助于目标对象裁剪,允许对场景中的单个物品进行深入检查或处理。
  • 减少数据量: 通过仅提取相关对象,对象裁剪有助于最小化数据大小,使其在存储、传输或后续计算任务中更加高效。
  • 提高精度: YOLO11的目标检测 准确性确保裁剪对象保持其空间关系,保留视觉信息的完整性以供详细分析。

视觉效果

机场行李
使用Ultralytics YOLO11在机场传送带上裁剪行李箱
使用Ultralytics YOLO11在机场传送带上裁剪行李箱

使用YOLO11进行对象裁剪示例

import os

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n.pt")
names = model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "错误读取视频文件"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

# 视频写入器
video_writer = cv2.VideoWriter("object_cropping_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("视频帧为空或视频处理已成功完成。")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            crop_obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]

            cv2.imwrite(os.path.join(crop_dir_name, str(idx) + ".png"), crop_obj)

    cv2.imshow("ultralytics", im0)
    video_writer.write(im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
video_writer.release()
cv2.destroyAllWindows()

model.predict参数

参数 类型 默认值 描述
source str 'ultralytics/assets' 指定推理的数据源。可以是图像路径、视频文件、目录、URL或实时视频流的设备ID。支持多种格式和数据源,适用于不同类型的输入
conf float 0.25 设置检测的最小置信度阈值。置信度低于此阈值的检测对象将被忽略。调整此值有助于减少误报。
iou float 0.7 交并比 (IoU) 用于非极大值抑制 (NMS) 的阈值。较低的值通过消除重叠框来减少检测数量,有助于减少重复。
imgsz int or tuple 640 定义推理的图像尺寸。可以是单个整数 640 用于方形缩放,或 (高度, 宽度) 元组。适当的尺寸可以提高检测的准确性和处理速度。
half bool False 启用半精度 (FP16) 推理,这可以在支持的GPU上加速模型推理,对准确性影响最小。
device str None 指定推理设备(例如,cpu, cuda:00)。允许用户在CPU、特定GPU或其他计算设备之间选择模型执行。
max_det int 300 每张图像允许的最大检测数量。限制模型在一次推理中可以检测到的对象总数,防止在密集场景中输出过多。
vid_stride int 1 视频输入的帧步长。允许跳过视频中的帧以加快处理速度,代价是时间分辨率降低。值为1处理每一帧,较高的值跳过帧。
stream_buffer bool False 确定是否为视频流队列传入帧。如果为 False,旧帧会被丢弃以容纳新帧(优化用于实时应用)。如果为 True,新帧会被缓冲,确保没有帧被跳过,但如果推理FPS低于流FPS,会导致延迟。
visualize bool False 激活推理过程中模型特征的可视化,提供模型“看到”的内容的洞察。有助于调试和模型解释。
augment bool False 启用预测时的测试时间增强 (TTA),可能会提高检测的鲁棒性,但会牺牲推理速度。
agnostic_nms bool False 启用类不可知的非极大值抑制(NMS),合并不同类别的重叠框。在多类别检测场景中,类别重叠常见时非常有用。
classes list[int] None 过滤预测结果为一组类别ID。只有属于指定类别的检测结果会被返回。在多类别检测任务中,专注于相关对象时非常有用。
retina_masks bool False 如果模型可用,使用高分辨率分割掩码。这可以提高分割任务中的掩码质量,提供更精细的细节。
embed list[int] None 指定从中提取特征向量或嵌入的层。对于聚类或相似性搜索等下游任务非常有用。

常见问题

Ultralytics YOLO11中的对象裁剪是什么,它是如何工作的?

使用 Ultralytics YOLO11 进行对象裁剪涉及基于 YOLO11 的检测能力从图像或视频中隔离和提取特定对象。这一过程通过利用 YOLO11 高精度识别对象并相应裁剪,实现了聚焦分析、数据量减少和精度提升。如需深入教程,请参阅对象裁剪示例

为什么我应该使用 Ultralytics YOLO11 进行对象裁剪而不是其他解决方案?

Ultralytics YOLO11 因其精度、速度和易用性而脱颖而出。它允许进行详细且准确的对象检测和裁剪,这对于聚焦分析和高数据完整性需求的应用至关重要。此外,YOLO11 能无缝集成 OpenVINO 和 TensorRT 等工具,适用于需要实时能力和多样化硬件优化的部署。探索模型导出指南中的优势。

如何通过对象裁剪减少数据集的数据量?

通过使用 Ultralytics YOLO11 仅从图像或视频中裁剪相关对象,可以显著减少数据大小,使其更高效地存储和处理。这一过程涉及训练模型以检测特定对象,然后利用结果仅裁剪并保存这些部分。更多关于利用 Ultralytics YOLO11 能力的信息,请访问我们的快速入门指南

我可以使用 Ultralytics YOLO11 进行实时视频分析和对象裁剪吗?

是的,Ultralytics YOLO11 可以处理实时视频流以动态检测和裁剪对象。该模型的高速推理能力使其非常适合实时应用,如监控、体育分析和自动化检测系统。查看跟踪和预测模式以了解如何实现实时处理。

高效运行 YOLO11 进行对象裁剪的硬件要求是什么?

Ultralytics YOLO11 针对 CPU 和 GPU 环境进行了优化,但为了实现最佳性能,尤其是在实时或高量推理情况下,推荐使用专用 GPU(如 NVIDIA Tesla、RTX 系列)。对于轻量级设备部署,考虑使用 CoreML 用于 iOS 或 TFLite 用于 Android。更多关于支持的设备和格式的详细信息,请参阅我们的模型部署选项


📅 Created 9 months ago ✏️ Updated 13 days ago

Comments