Ultralytics YOLO27: 加入候补名单。
Get Started

将 YOLO26 与 SAHI 配合用于切片推理#

Open SAHI for Sliced Inference In Colab

本指南介绍如何将 YOLO26 与 SAHI(切片辅助超推理)搭配使用。内容涵盖 SAHI 是什么、为什么切片推理有助于在大型高分辨率图像中检测小目标,以及如何将 SAHI 与 YOLO26 配合使用以提升目标检测效果。

SAHI 简介#

SAHI(切片辅助超推理)是一个用于提升大尺寸、高分辨率图像目标检测效果的库。它会将图像拆分成易于处理的切片,分别在每个切片上执行目标检测,然后将结果拼接起来。SAHI 兼容多种目标检测模型,包括 YOLO 系列。



观看: 如何将 SAHI 与 Ultralytics YOLO26 搭配使用以检测小目标 | 切片辅助超推理 🚀

SAHI 的主要功能#

  • 集成简单:SAHI 可通过 AutoDetectionModel 与 Ultralytics YOLO 模型配合使用,你只需修改少量代码,就能开始切片和检测。
  • 资源利用高效:SAHI 将大图拆分为较小部分,保持较低的内存占用,让你能在资源有限的硬件上运行高质量检测。
  • 高准确率:SAHI 会在拼接过程中合并相邻切片中的重叠检测结果,并使用非极大值抑制或非极大值合并等后处理方法。

什么是切片推理?#

切片推理是指将大型或高分辨率图像划分为较小的片段(切片),分别对这些切片进行目标检测,然后将检测结果映射回原始图像中的目标位置。这项技术适用于计算资源有限的场景、可能导致内存问题的超高分辨率图像,或因整张图像缩小到模型输入尺寸而导致目标过小、难以检测的情况。

切片推理的优势#

  • 减轻内存负担:每个切片都很小,因此即使处理超大图像,峰值内存占用也较低,让低端硬件能够更流畅地运行。

  • 提升小目标检测效果:每个切片都以模型输入分辨率进行处理,因此小目标占用的像素更多,更容易检测,前提是切片尺寸足以包含目标。

  • 增强可扩展性:这项技术可让不同尺寸和分辨率图像的目标检测更容易扩展,适用于从卫星影像到医学诊断等多种场景。

不使用 SAHI 的 YOLO26
YOLO26 detections on a high-resolution image without SAHI slicingYOLO26 detections on a high-resolution image with SAHI sliced inference

安装和准备#

安装#

首先,安装最新版本的 SAHI 和 Ultralytics:

pip install -U ultralytics sahi

导入模块并下载资源#

以下是下载一些测试图像的方法:

from sahi.utils.file import download_from_url

# 下载测试图像
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
    "demo_data/terrain2.png",
)

使用 YOLO26 进行标准推理#

实例化模型#

你可以像这样实例化 YOLO26 模型来执行目标检测:

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    confidence_threshold=0.3,
    device="cpu",  # 或 'cuda:0'
)

执行标准预测#

使用图像路径执行标准推理。

from sahi.predict import get_prediction

result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

result.export_visuals(export_dir="demo_data/", hide_conf=True)

可视化结果#

导出并可视化预测的边界框和掩码:

from PIL import Image

# 打开预测图像
processed_image = Image.open("demo_data/prediction_visual.png")

# 显示预测图像
processed_image.show()

使用 YOLO26 进行切片推理#

通过指定切片尺寸和重叠比例来执行切片推理:

from PIL import Image
from sahi.predict import get_sliced_prediction

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

# 导出结果
result.export_visuals(export_dir="demo_data/", hide_conf=True)

# 打开预测图像
processed_image = Image.open("demo_data/prediction_visual.png")

# 显示预测图像
processed_image.show()

处理预测结果#

SAHI 提供了一个 PredictionResult 对象,可将其转换为多种标注格式:

# 访问目标预测列表
object_prediction_list = result.object_prediction_list

# 转换为 COCO 标注和 COCO 预测格式
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
其他导出格式

PredictionResult 还可以使用 result.to_imantics_annotations() 和 result.to_fiftyone_detections() 将检测结果转换为 imantics 和 FiftyOne 对象。这些方法需要相应的软件包,因此请先使用 pip install imantics fiftyone 安装它们。

批量预测#

要对目录中的图像进行批量预测:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    model_device="cpu",  # 或 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

现在,你已准备好将 YOLO26 与 SAHI 配合使用,执行标准推理和切片推理。

引用与致谢#

如果你在研究或开发工作中使用 SAHI,请引用 SAHI 原论文并注明作者:

引用
@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

我们衷心感谢 SAHI 研究组创建并维护这项资源,为计算机视觉社区提供支持。

常见问题#

  • 将 Ultralytics YOLO26 与 SAHI(切片辅助超推理)集成进行切片推理,可以通过将高分辨率图像划分为易于处理的切片,提升目标检测效果。这种方法有助于检测小目标,同时将内存占用控制在合理范围内。要开始使用,你需要安装 ultralytics 和 sahi 库:

    pip install -U ultralytics sahi

    然后,下载测试图像:

    from sahi.utils.file import download_from_url
    
    # 下载测试图像
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
        "demo_data/small-vehicles1.jpeg",
    )
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
        "demo_data/terrain2.png",
    )
  • 在大型图像目标检测中使用 SAHI 和 Ultralytics YOLO26 有以下几项优势:

    • 减轻内存负担:较小的切片占用更少内存,因此即使在资源有限的硬件上,也能执行高质量检测。
    • 提升小目标检测效果:切片可让小目标相对于模型输入保持较大尺寸,SAHI 还会合并相邻切片中的重叠框。
    • 增强可扩展性:SAHI 可扩展不同尺寸和分辨率图像的目标检测任务,适用于卫星影像分析和医学诊断等多种应用。

    在我们的文档中详细了解切片推理的优势。

  • 可以,使用 YOLO26 和 SAHI 时,你可以将预测结果可视化。以下是导出并可视化结果的方法:

    from PIL import Image
    
    result.export_visuals(export_dir="demo_data/", hide_conf=True)
    
    processed_image = Image.open("demo_data/prediction_visual.png")
    
    processed_image.show()

    此命令会将可视化预测结果保存到指定目录,然后你可以加载图像,在笔记本或应用程序中查看。详细指南请参阅标准推理部分。

  • SAHI(切片辅助超推理)提供了多项功能,可与 Ultralytics YOLO26 的目标检测能力互补:

    • 集成简单:只需对代码进行少量调整,SAHI 就能与 YOLO 模型配合使用。
    • 资源利用高效:它会将大图拆分为较小的切片,从而保持较低的内存占用。
    • 准确率高:SAHI 会在拼接过程中合并重叠的检测框,从而避免在切片边界处产生重复检测。

    如需深入了解,请阅读 SAHI 的主要功能。

  • 要使用 YOLO26 和 SAHI 处理大规模推理项目,请遵循以下最佳实践:

    1. 安装所需库:确保你使用的是最新版本的 ultralytics 和 sahi。
    2. 配置切片推理:根据具体项目确定最佳切片尺寸和重叠比例。
    3. 运行批量预测:使用 SAHI 的 predict 函数,对目录中的图像执行批量预测。

    批量预测示例:

    from sahi.predict import predict
    
    predict(
        model_type="ultralytics",
        model_path="path/to/yolo26n.pt",
        model_device="cpu",  # 或 'cuda:0'
        model_confidence_threshold=0.4,
        source="path/to/dir",
        slice_height=256,
        slice_width=256,
        overlap_height_ratio=0.2,
        overlap_width_ratio=0.2,
    )

    如需了解更详细的步骤,请访问我们的批量预测章节。

评论