使用Ultralytics YOLO11进行对象裁剪
什么是对象裁剪?
使用Ultralytics YOLO11进行对象裁剪涉及从图像或视频中隔离和提取特定的检测对象。YOLO11模型的能力被用于准确识别和描绘对象,从而实现精确裁剪以供进一步分析或处理。
观看: 使用Ultralytics YOLO进行对象裁剪
对象裁剪的优势是什么?
- 聚焦分析: YOLO11有助于目标对象裁剪,允许对场景中的单个物品进行深入检查或处理。
- 减少数据量: 通过仅提取相关对象,对象裁剪有助于最小化数据大小,使其在存储、传输或后续计算任务中更加高效。
- 提高精度: 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:0 或 0 )。允许用户在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。更多关于支持的设备和格式的详细信息,请参阅我们的模型部署选项。