跳至内容

使用对象裁剪Ultralytics YOLOv8

什么是对象裁剪?

对象裁剪 Ultralytics YOLOv8对象裁剪是指从图像或视频中分离并提取特定的检测对象。YOLOv8 模型功能可用于准确识别和划分物体,从而实现精确裁剪,以便进一步分析或处理。



观看: 使用对象裁剪Ultralytics YOLOv8

对象裁剪的优势?

  • 重点分析:YOLOv8 方便对目标对象进行裁剪,可对场景中的单个项目进行深入检查或处理。
  • 减少数据量:通过只提取相关对象,对象裁剪有助于最大限度地减少数据量,从而提高数据存储、传输或后续计算任务的效率。
  • 更高的精度:YOLOv8 的物体检测精度可确保裁剪后的物体保持空间关系,为详细分析保留完整的视觉信息。

视觉效果

机场行李
机场传送带上使用的行李箱裁剪Ultralytics YOLOv8
使用机场传送带裁剪行李箱Ultralytics YOLOv8

使用YOLOv8 进行对象裁剪示例

import os

import cv2

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

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

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
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
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("Video frame is empty or video processing has been successfully completed.")
        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 非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。较低的数值可以消除重叠的方框,从而减少检测次数,这对减少重复检测非常有用。
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 确定在处理视频流时是否对所有帧进行缓冲 (True),或者模型是否应该返回最近的帧 (False).适用于实时应用。
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 YOLOv8 中的对象裁剪是什么,如何操作?

物体裁剪 Ultralytics YOLOv8物体裁剪是指根据YOLOv8 的检测功能,从图像或视频中分离并提取特定物体。此过程可利用YOLOv8 高精度识别对象并进行相应裁剪,从而实现集中分析、减少数据量并提高精度。有关深入教程,请参阅对象裁剪示例

为什么要使用Ultralytics YOLOv8 而不是其他解决方案进行对象裁剪?

Ultralytics YOLOv8 由于其精确度、速度和易用性,该系统脱颖而出。它可以进行详细、准确的对象检测和裁剪,这对于需要高数据完整性的重点分析和应用来说至关重要。此外,YOLOv8 还能与OpenVINO 和TensorRT 等工具无缝集成,满足在不同硬件上部署实时功能和优化的要求。在模型导出指南中了解更多优势。

如何使用对象裁剪减少数据集的数据量?

通过使用Ultralytics YOLOv8 只裁剪图像或视频中的相关对象,可以大大缩小数据大小,提高存储和处理效率。这一过程包括训练模型来检测特定对象,然后利用检测结果只裁剪和保存这些部分。有关利用Ultralytics YOLOv8 功能的更多信息,请访问我们的快速入门指南

能否使用Ultralytics YOLOv8 进行实时视频分析和对象裁剪?

是的,Ultralytics YOLOv8 可以处理实时视频馈送,动态检测和裁剪物体。该模型的高速推理能力使其成为监控、体育分析和自动检测系统等实时应用的理想选择。查看跟踪和预测模式,了解如何实现实时处理。

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

Ultralytics YOLOv8 已针对CPU 和GPU 环境进行了优化,但要获得最佳性能,尤其是实时或大容量推理,建议使用专用GPU (如NVIDIA Tesla、RTX 系列)。要在轻量级设备上部署,可考虑使用CoreML foriOS 或 TFLite forAndroid 。有关支持的设备和格式的更多详情,请参阅我们的模型部署选项



创建于 2024-01-09,更新于 2024-07-05
作者:glenn-jocher(8)、RizwanMunawar(2)、IvorZhu331(1)、AyushExel(1)

评论