跳转至内容

Ultralytics 文档:将 YOLO11 与 SAHI 结合使用于切片推理

在 Colab 中打开用于切片推理的 SAHI

欢迎阅读 Ultralytics 关于如何将 YOLO11 与 SAHI (Slicing Aided Hyper Inference) 结合使用的文档。本综合指南旨在为您提供将 SAHI 与 YOLO11 一起实施所需的所有基本知识。我们将深入探讨 SAHI 是什么,为什么切片推理对于大规模应用至关重要,以及如何将这些功能与 YOLO11 集成以增强 目标检测 性能。

SAHI 切片推理概述

SAHI 简介

SAHI (Slicing Aided Hyper Inference) 是一个创新的库,旨在优化用于大规模和高分辨率图像的对象检测算法。它的核心功能在于将图像划分为可管理的切片,在每个切片上运行对象检测,然后将结果缝合在一起。SAHI 与包括 YOLO 系列在内的一系列对象检测模型兼容,从而在确保优化利用计算资源的同时提供灵活性。



观看: 使用 Ultralytics YOLO11 的 SAHI(Slicing Aided Hyper Inference,切片辅助超推理)进行推理

SAHI 的主要特性

  • 无缝集成: SAHI 可以轻松与 YOLO 模型集成,这意味着您可以开始切片和检测,而无需进行大量代码修改。
  • 资源效率: 通过将大型图像分解为较小的部分,SAHI优化了内存使用,使您能够在资源有限的硬件上运行高质量的检测。
  • 精度:SAHI 通过采用智能算法在拼接过程中合并重叠的检测框,从而保持检测精度。

什么是分片推理 (Sliced Inference)?

分片推理是指将大型或高分辨率图像细分为更小的片段(切片),在这些切片上进行对象检测,然后重新编译这些切片以重建原始图像上的对象位置。当计算资源有限或处理可能导致内存问题的极高分辨率图像时,此技术非常宝贵。

分片推理的优势

  • 降低计算负担:较小的图像切片处理速度更快,并且消耗更少的内存,从而可以在低端硬件上更流畅地运行。

  • 保持检测质量: 由于每个切片都是独立处理的,因此不会降低对象检测的质量,前提是切片足够大,可以捕获感兴趣的对象。

  • 增强的可扩展性: 该技术允许更容易地跨不同大小和分辨率的图像缩放目标检测,使其成为从卫星图像到医疗诊断等各种应用的理想选择。

YOLO11 无 SAHI YOLO11 与 SAHI
YOLO11 无 SAHI YOLO11 与 SAHI

安装与准备

安装

要开始使用,请安装最新版本的 SAHI 和 Ultralytics:

pip install -U ultralytics sahi

导入模块和下载资源

以下是如何导入必要的模块并下载 YOLO11 模型和一些测试图像:

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_model(model_path)

# Download test images
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",
)

使用 YOLO11 进行标准推理

实例化模型

您可以像这样实例化一个用于对象检测的 YOLO11 模型:

from sahi import AutoDetectionModel

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

执行标准预测

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

from sahi.predict import get_prediction
from sahi.utils.cv import read_image

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result_with_np_image = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

可视化结果

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

from IPython.display import Image

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

使用 YOLO11 进行分片推理

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

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,
)

处理预测结果

SAHI 提供了一个 PredictionResult 目标,可以转换为各种标注格式:

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

批量预测

用于对图像目录进行批量预测:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="path/to/yolo11n.pt",
    model_device="cpu",  # or '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,
)

就这样!现在,您可以使用 YOLO11 和 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 研究小组创建和维护这一宝贵资源,该资源面向 计算机视觉 社区。 有关 SAHI 及其创建者的更多信息,请访问 SAHI GitHub 存储库

常见问题

如何将 YOLO11 与 SAHI 集成,以在目标检测中进行切片推理?

将 Ultralytics YOLO11 与 SAHI(Slicing Aided Hyper Inference,切片辅助超推理)集成以进行切片推理,通过将高分辨率图像分割成可管理的切片来优化您的对象检测任务。这种方法提高了内存使用率并确保了高检测精度。首先,您需要安装 ultralytics 和 sahi 库:

pip install -U ultralytics sahi

然后,下载 YOLO11 模型和测试图像:

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_model(model_path)

# Download test images
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)

有关更详细的说明,请参阅我们的分片推理指南

为什么我应该将 SAHI 与 YOLO11 结合使用,以便在大图像上进行目标检测?

将 SAHI 与 Ultralytics YOLO11 结合使用,以便在大图像上进行目标检测,具有以下几个优点:

  • 降低计算负担:较小的切片处理速度更快,并且消耗更少的内存,从而可以在资源有限的硬件上运行高质量的检测。
  • 保持检测准确率: SAHI 使用智能算法来合并重叠的框,从而保持检测质量。
  • 增强的可扩展性: 通过在不同的图像大小和分辨率上缩放目标检测任务,SAHI 成为各种应用的理想选择,例如卫星图像分析和医疗诊断。

在我们的文档中了解更多关于分片推理的优势

在使用YOLO11和SAHI时,我可以可视化预测结果吗?

是的,将 YOLO11 与 SAHI 结合使用时,您可以可视化预测结果。以下是如何导出和可视化结果的方法:

from IPython.display import Image

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

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

SAHI 提供了哪些功能来改进 YOLO11 对象检测?

SAHI(Slicing Aided Hyper Inference)提供了一些补充 Ultralytics YOLO11 进行目标检测的功能:

  • 无缝集成: SAHI 可以轻松与 YOLO 模型集成,只需进行最少的代码调整。
  • 资源效率: 它将大型图像分割成更小的切片,从而优化内存使用和速度。
  • 高精度:通过在拼接过程中有效合并重叠的检测框,SAHI 保持了高检测精度。

要深入了解,请阅读 SAHI 的主要特性

如何使用 YOLO11 和 SAHI 处理大规模推理项目?

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

  1. 安装所需库:确保您已安装最新版本的 ultralytics 和 sahi。
  2. 配置分片推理: 确定适合您特定项目的最佳切片尺寸和重叠率。
  3. 运行批量预测:使用 SAHI 的功能对图像目录执行批量预测,从而提高效率。

批量预测示例:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="path/to/yolo11n.pt",
    model_device="cpu",  # or '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,
)

有关更详细的步骤,请访问我们的批量预测部分。



📅 创建于 1 年前 ✏️ 更新于 23 天前

评论