Model Integrations

July 20, 2026 · View on GitHub

SAHI works with any object detection framework through a unified API. Load your model once with AutoDetectionModel.from_pretrained(), then use it with any SAHI function -- sliced prediction, batch inference, CLI, etc.

Ultralytics (YOLO)

Supports Ultralytics YOLO26, Ultralytics YOLO11, Ultralytics YOLOv8, and all Ultralytics model variants including segmentation and oriented bounding box models.

pip install ultralytics
from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction

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

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

Ultralytics models also support native GPU batch inference for faster processing of multiple slices:

result = get_sliced_prediction(
    "large_image.jpg",
    detection_model,
    slice_height=640,
    slice_width=640,
    batch_size=8,  # process 8 slices at once
)

Open In Colab


YOLOE

YOLOE models with prompt-free and open-vocabulary detection.

pip install ultralytics
detection_model = AutoDetectionModel.from_pretrained(
    model_type="yoloe",
    model_path="yoloe-v8l-seg.pt",
    confidence_threshold=0.25,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


YOLO-World (Zero-Shot)

Open-vocabulary detection -- detect objects by text description without retraining.

pip install ultralytics
detection_model = AutoDetectionModel.from_pretrained(
    model_type="yolo-world",
    model_path="yolov8s-worldv2.pt",
    confidence_threshold=0.1,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

YOLOv5

Classic YOLOv5 models via the yolov5 pip package.

pip install yolov5
detection_model = AutoDetectionModel.from_pretrained(
    model_type="yolov5",
    model_path="yolov5s.pt",
    confidence_threshold=0.25,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


HuggingFace Transformers

Use object detection and zero-shot object detection models from the HuggingFace Hub (DETR, Deformable DETR, DETA, GroundingDINO, etc.).

pip install transformers timm
detection_model = AutoDetectionModel.from_pretrained(
    model_type="huggingface",
    model_path="facebook/detr-resnet-50",
    confidence_threshold=0.3,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

GroundingDINO models require text-conditioned inference. Use text_labels when the target categories are known, so SAHI can assign stable category ids to those labels. Additional grounded phrases returned by the processor are appended as new categories.

detection_model = AutoDetectionModel.from_pretrained(
    model_type="huggingface",
    model_path="IDEA-Research/grounding-dino-tiny",
    confidence_threshold=0.25,
    text_threshold=0.20,
    text_labels=["car", "truck", "person"],
    device="cuda:0",
)

Zero-shot parameters

In addition to the common parameters, zero-shot (GroundingDINO) models accept:

ParameterTypeDescription
text_labelslist[str]Fixed categories to detect, e.g. ["car", "truck"]. Each gets a stable category id; phrases outside this list are dropped
text_promptstrFree-form prompt (e.g. "a car. a truck.") used when text_labels is not set; returned phrases become categories dynamically
text_thresholdfloatMinimum score for matching a box to a text token (default: 0.25)

HuggingFace object detection notebook: Open In Colab

GroundingDINO zero-shot detection notebook: Open In Colab


HuggingFace Segmentation

Run segmentation models from the HuggingFace Hub. SAHI returns each segment as an ObjectPrediction with a polygon mask, so sliced inference and postprocessing work the same as for detection.

Architectureinstancesemanticpanoptic
MaskFormer
Mask2Former
OneFormer

The available heads depend on the checkpoint (e.g. facebook/mask2former-swin-tiny-coco-instance is instance-only). OneFormer selects the head at inference time, so a single checkpoint serves all three.

pip install transformers timm
from sahi.models.huggingface_segmentation import SegmentationType

detection_model = AutoDetectionModel.from_pretrained(
    model_type="huggingface_segmentation",
    model_path="facebook/mask2former-swin-tiny-coco-instance",
    confidence_threshold=0.5,
    device="cuda:0",
    segmentation_type=SegmentationType.INSTANCE_SEGMENTATION,
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Switch segmentation_type to SEMANTIC_SEGMENTATION or PANOPTIC_SEGMENTATION to use the matching head. Note that semantic segmentation merges every instance of a class into a single mask, so one ObjectPrediction is returned per class rather than per instance.

Segmentation parameters

In addition to the common parameters, this model accepts:

ParameterTypeDescription
segmentation_typeSegmentationTypeINSTANCE_SEGMENTATION (default), SEMANTIC_SEGMENTATION, or PANOPTIC_SEGMENTATION
min_segment_areaintDrop segments smaller than this many pixels (default: 100)
overlap_mask_area_thresholdfloatMerge/discard disconnected parts within a mask (default: 0.8)
label_ids_to_fuselist[int]Panoptic only -- fuse all instances of these labels into one segment
tokenstrHuggingFace access token for gated/private models (falls back to $HF_TOKEN)

RT-DETR

Real-Time Detection Transformer for high-accuracy real-time detection.

pip install transformers timm
detection_model = AutoDetectionModel.from_pretrained(
    model_type="rtdetr",
    model_path="PekingU/rtdetr_r50vd",
    confidence_threshold=0.3,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


TorchVision

Use built-in TorchVision detection models (Faster R-CNN, RetinaNet, FCOS, SSD, etc.).

pip install torch torchvision
detection_model = AutoDetectionModel.from_pretrained(
    model_type="torchvision",
    model_path="fasterrcnn_resnet50_fpn",
    confidence_threshold=0.3,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


MMDetection

Supports the full MMDetection model zoo (300+ models).

pip install mmdet mmcv mmengine
detection_model = AutoDetectionModel.from_pretrained(
    model_type="mmdet",
    model_path="path/to/checkpoint.pth",
    config_path="path/to/config.py",
    confidence_threshold=0.25,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


Detectron2

Use Facebook's Detectron2 models for detection and instance segmentation.

pip install detectron2
detection_model = AutoDetectionModel.from_pretrained(
    model_type="detectron2",
    model_path="path/to/model_final.pth",
    config_path="path/to/config.yaml",
    confidence_threshold=0.25,
    device="cuda:0",
)

result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Open In Colab


Roboflow (RF-DETR)

Use Roboflow's RF-DETR models for detection and segmentation.

pip install rfdetr

Pass the model with the model argument. A plain string is treated as a Roboflow Universe model id and requires an API key; an RF-DETR class name selects a local model instead.

=== "Roboflow Universe (API key)"

```python
detection_model = AutoDetectionModel.from_pretrained(
    model_type="roboflow",
    model="rfdetr-base",  # Universe model id
    api_key="YOUR_API_KEY",  # or set ROBOFLOW_API_KEY
    confidence_threshold=0.3,
    device="cuda:0",
)
```

=== "Local weights (no API key)"

```python
detection_model = AutoDetectionModel.from_pretrained(
    model_type="roboflow",
    model="RFDETRSegMedium",  # RF-DETR class name, or the class/instance itself
    model_path="checkpoint.pth",  # your locally trained weights
    category_mapping={"0": "cat", "1": "dog"},  # required for custom classes
    image_size=640,  # must match the training resolution
    confidence_threshold=0.3,
    device="cuda:0",
)
```
result = get_sliced_prediction(
    "image.jpg",
    detection_model,
    slice_height=512,
    slice_width=512,
)

Available RF-DETR models: RFDETRBase, RFDETRNano, RFDETRSmall, RFDETRMedium, RFDETRLarge, RFDETRSegNano, RFDETRSegSmall, RFDETRSegMedium, RFDETRSegLarge, RFDETRSegXLarge, RFDETRSeg2XLarge.

category_mapping determines num_classes, so a custom model needs it or the head will not match the checkpoint. image_size is only applied when model_path is set.

Open In Colab


Common Parameters

All models accept these parameters in AutoDetectionModel.from_pretrained():

ParameterTypeDescription
model_typestrFramework name (see sections above)
model_pathstrPath to weights file or model name
config_pathstrConfig file path (MMDetection, Detectron2)
confidence_thresholdfloatMinimum score to keep a detection (default: 0.25)
devicestr"cpu", "cuda:0", "mps", etc.
category_mappingdictMap category IDs to names: {0: "car", 1: "person"}
category_remappingdictRemap category names after inference
image_sizeintOverride model input resolution
load_at_initboolLoad weights immediately (default: True)

Using a Pre-loaded Model

If you already have a model instance, pass it directly instead of a path:

from ultralytics import YOLO

yolo_model = YOLO("yolo26n.pt")
# ... customize the model ...

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model=yolo_model,
    confidence_threshold=0.25,
    device="cuda:0",
)

Next Steps