高分辨率切片
使用 tile=True 在将高分辨率图像缩放至模型输入尺寸之前,先通过重叠窗口处理图像。这样可以保留整张图像缩放时可能丢失的小目标细节。无需安装额外软件包。
切片使用常规的训练、验证和预测流程。预测会为每张原始图像返回一个 Results 对象。验证会先合并预测结果,再根据原始标注进行评估;训练损失则在切片上计算。
用法#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="aerial.yaml", tile=True, imgsz=640)
metrics = model.val(data="aerial.yaml", tile=True, imgsz=640)
results = model.predict("large-image.tif", tile=640, imgsz=640, batch=8)yolo predict model=yolo26n.pt source=large-image.tif tile=640 imgsz=640 batch=8tile=True 使用 imgsz 作为窗口大小。正整数(例如 tile=1024)可以独立于 imgsz 设置窗口大小。tile=False 为默认值。窗口之间有 20% 的重叠,最后一组窗口会与图像边界对齐。较小的图像使用一个覆盖整张图像的窗口。
batch 控制预测时模型一次处理的切片数量。现有后端会处理固定的导出批次大小,包括最后一个未满批次。导出的模型保留其常规输入计算图;切片在 Python 预测流程中执行。
对于视频,请流式传输结果以限制内存占用,并使用现有的预测选项保存或显示结果:
for result in model.predict("video.mp4", tile=640, stream=True, save=True):
print(result.boxes)yolo predict model=yolo26n.pt source=video.mp4 tile=640 save=True任务和模型#
| 任务 | 整图输出 |
|---|---|
| 检测 | 将边界框还原到源图像坐标,并使用 iou、agnostic_nms 和 max_det 抑制重复检测。 |
| 分割 | 应用相同的边界框筛选,并将选中的掩码放置到源图像中。 |
| 语义 | 拼接类别图,在重叠区域选择最靠近中心的切片。 |
| 深度 | 融合重叠的深度图,权重随位置向每个切片中心靠近而增大。 |
| 分类 | 对切片概率取平均值。 |
| 姿态 | 应用边界框筛选,并还原相应的关键点。 |
| OBB | 还原旋转框并使用旋转 NMS。 |
共享流程支持 YOLO 任务模型、YOLO-World、YOLOE、RT-DETR 和 FastSAM 预测。YOLOE 视觉提示从完整源图像中嵌入,并由其切片复用。FastSAM 会在将提示掩码合并到源图像坐标后进行筛选。SAM 预测器保留自己的提示和裁剪生成流程;它们不接受 tile。
训练期间,边界框和多边形会按窗口裁剪,OBB 裁剪会保留方向,窗口外的关键点则会失去可见性。原始边界框面积剩余不足 10% 的实例会被移除。空窗口会保留为负样本。语义和深度目标使用与图像相同的窗口。
性能与质量#
- 与整图推理相比,切片会执行更多次模型前向计算。请选择能在可用内存范围内保留所需细节的最大切片大小和批次大小。
- 相邻切片会复用已解码的源图像。使用
cache="ram"时,训练只存储一次源图像;cache="disk"使用现有图像缓存。训练时会打乱切片顺序,因此缓存对较大的压缩源图像尤其有用。 - 源图像尺寸的掩码和稠密图仍需要与原始图像大小成正比的内存。
max_det会限制保留的实例掩码数量。 - 切片会丢失全局上下文。请在自己的数据上验证准确率,尤其要关注分类和深度任务,因为它们的切片输出可能无法在全局范围内保持一致。
- 重复检测抑制会选择完整的预测结果;它不会根据分散的可见片段重建目标。重叠可以减少边界截断,但对于大于切片的目标,无法完全消除截断。
- 不支持张量源、
embed和visualize。跟踪会对每个源帧的合并预测运行一次,包括 ReID 特征。
评论
提出问题、分享结果,或帮助其他人。