---
tags:
  - slicing
  - inference
  - small-object-detection
  - conceptual
---

# 切片推理工作原理

## 问题：大图像中的小目标

标准目标检测器会在推理前将输入图像缩放到固定分辨率，例如 640x640。当源图像的
尺寸大得多时，例如 4K 无人机照片或卫星图像块，小目标会被缩小到只有几个像素，
从而难以检测。

<div align="center">
  <img width="700" alt="sliced inference" src="https://raw.githubusercontent.com/obss/sahi/main/resources/sliced_inference.gif">
</div>

## 解决方案：切片、检测、合并

SAHI 通过三个步骤解决这一问题：

### 1. 将图像切分为相互重叠的图块

输入图像会被划分为由较小图块组成的网格。每个图块的尺寸与检测器预期的输入尺寸
匹配，例如 512x512，因此图块中的目标会保留足够的像素细节，以便可靠检测。

相邻图块之间的重叠区域可以确保位于图块边界上的目标，至少会在一个图块中完整
显示。

```text
+--------+--------+--------+
|        | 重叠区 |        |
| 图块 1 |<------>| 图块 2 |
|        |        |        |
+--------+--------+--------+
| 重叠区 |        | 重叠区 |
| 图块 3 | 图块 4 | 图块 5 |
|        |        |        |
+--------+--------+--------+
```

关键参数：

| 参数 | 控制内容 |
| ------ | ---------- |
| `slice_height` / `slice_width` | 每个图块的像素尺寸 |
| `overlap_height_ratio` / `overlap_width_ratio` | 相邻图块之间的重叠比例（0.0 -- 1.0） |
| `auto_slice_resolution` | 由 SAHI 根据图像分辨率选择图块尺寸 |

### 2. 在每个图块上运行检测器

每个图块都会独立传入目标检测模型。由于图块尺寸较小，原本在完整图像中很小的目标
会占据更大比例，因此能够可靠检测。

SAHI 还可以选择在**完整图像**上以原始分辨率运行检测器
（`perform_standard_pred=True`，默认启用）。这样可以检测可能被多个图块切开的
大型目标。

### 3. 将预测结果映射并合并回完整图像

图块级预测结果会映射回完整图像的坐标系。由于图块之间存在重叠，同一个目标通常会
在多个图块中被检测到。SAHI 会执行后处理步骤，合并或抑制这些重复结果：

- **GreedyNMM**（默认）-- 通过平均坐标和分数，以贪心方式合并重叠边界框。
  适用于大多数场景。
- **NMM** -- 非最大合并。与 GreedyNMM 类似，但会同时处理所有重叠结果。
- **NMS** -- 非最大抑制。保留分数最高的边界框并丢弃重叠框。适用于需要严格保留
  独立检测结果的场景。
- **LSNMS** -- 位置敏感非最大抑制。计算时还会考虑空间位置。

合并步骤可以使用不同的重叠指标：

- **IOS**（Intersection over Smaller）-- 交集与较小面积之比。合并更积极，适用于
  目标尺寸差异较大的场景。
- **IOU**（Intersection over Union）-- 交并比。标准指标，合并相对保守。

## 何时使用切片推理

切片推理在以下场景中最有帮助：

- 图像尺寸显著大于模型输入分辨率
- 需要检测**小目标**，例如卫星图像中的车辆、广角监控画面中的人员、高分辨率
  检查照片中的缺陷
- 标准检测遗漏目标或置信度较低

以下场景可能不需要切片推理：

- 图像尺寸已经接近模型输入尺寸
- 只关心较大、较明显的目标
- 推理速度比召回率更重要

## 调优建议

**图块尺寸**：与检测器的训练分辨率匹配。对于使用 640x640 图像训练的 YOLO 模型，
512--640 的切片尺寸通常效果较好。

**重叠比例**：建议从 0.2（20%）开始。如果图块边界附近出现漏检，可以提高到
0.3--0.4。重叠比例越高，图块越多，推理速度也越慢。

**标准预测**：除非可以确定所有目标都很小，否则建议保持
`perform_standard_pred=True`。完整图像推理可以检测可能被图块切开的大型目标。

**后处理阈值**：`postprocess_match_threshold` 控制合并重复结果的积极程度。值越小，
合并越多；值越大，保留的独立边界框越多。默认值 0.5 适用于大多数场景。

## 下一步

- [快速开始](../quick-start.md) -- 开始使用 SAHI
- [模型集成](models.md) -- 将 SAHI 与检测框架配合使用
- [后处理后端](../postprocess/backends.md) -- 配置 NMS/NMM 后端以提升速度
