You're reading an pre-release version of this documentation.
For the latest stable release version, please have a look at master.

切片目标检测(yolo)

检测图片较大时,通过将大图划分为子图分别推理后再还原回大图结果,是保证推理精度的一种有效手段。

graph TD A[输入大图 High-Res Image] --> B{是否需要重叠切片?} B -->|是| C[计算切片坐标: 3x3 矩阵] C --> D[执行切片: Slicing] subgraph Inference_Stage [并行/串行推理阶段] D --> S1[子图 1] D --> S2[子图 2] D --> S3[...] D --> S9[子图 9] S1 --> Y1[YOLO 推理] S2 --> Y2[YOLO 推理] S3 --> Y3[YOLO 推理] S9 --> Y9[YOLO 推理] Y1 --> T1[坐标还原: 局部 -> 全局] Y2 --> T2[坐标还原: 局部 -> 全局] Y3 --> T3[坐标还原: 局部 -> 全局] Y9 --> T9[坐标还原: 局部 -> 全局] end T1 & T2 & T3 & T9 --> E[结果汇总: Detection Boxes] subgraph Post_Processing [结果合并与后处理] E --> G[NMS/Soft-NMS: 抑制重叠框] end G --> H[输出最终结果图/JSON]

切片目标检测流程图

  • 切片 (Slicing) 切片策略

为了避免物体刚好在切割线上导致漏检,通常建议设置 Overlap(重叠率)。例如:3x3 切片时,每张子图边缘保留 15%-20% 的重叠区域。

  • 坐标映射 (Coordinate Mapping)

假设子图在原图中的左上角坐标为

\[(X_{offset},Y_{offset})\]

子图检测到的框为

\[(x_{1},y_{1},x_{2},y_{2})\]

还原全局坐标

\[X_{global}=X_{offset}+x_{local}\]
  • 结果合并 (NMS)

在切片重叠处,同一个物体会被重复检测出多次。解决:将所有还原后的坐标汇总,统一运行一次 NMS(非极大值抑制)。

评估系统验证

sequenceDiagram participant App as 上位机应用逻辑 participant RPC as RPC Client participant Edge as 下位机 (Model Engine) App->>App: 图像切片 (Split into 9 tiles) loop 对每一张子图 App->>RPC: infer(tile_data) RPC->>Edge: jsonrpc(infer, tile_data_b64) Edge-->>RPC: 返回 tensor_b64 RPC-->>App: tensor App->>App: getbox App->>App: 坐标偏移补偿 (Apply Offsets) end App->>App: 全局 NMS 过滤重叠框 App->>App: 绘制/输出结果

评估系统时序图

示例代码

示例文档

下位机部署完整示例

DSP端裸机部署示例工程


作者 @sq suiqiang@hngwg.com