| --- |
| license: apache-2.0 |
| datasets: |
| - detection-datasets/coco |
| base_model: |
| - microsoft/resnet-50 |
| --- |
| |
| # SSD300 (Single Shot MultiBox Detector) |
|
|
| 本仓库提供标准 **SSD300** 目标检测模型的 ONNX 与昇腾离线模型文件。SSD300 是经典的一阶段目标检测网络,全称为 **Single Shot MultiBox Detector**:模型在一次前向推理中同时完成候选框位置回归和类别置信度预测,不需要像两阶段检测器那样先生成 region proposals。 |
|
|
| 这里的“300”表示模型固定使用 **300 x 300** 的输入分辨率。仓库中的模型采用标准 SSD300 的检测头、默认框数量和输出形式,并提供不同 ResNet 骨干网络版本,便于在速度、模型大小和检测精度之间做取舍。 |
|
|
| ## 模型特点 |
|
|
| - **一阶段检测**:直接在特征图上预测目标类别和边界框,推理流程简单,适合实时或边缘端部署。 |
| - **多尺度特征预测**:SSD300 会在多个不同分辨率的特征层上进行检测,高分辨率特征更适合小目标,低分辨率特征更适合大目标。 |
| - **默认框机制**:每个特征图位置预设多个不同尺度和宽高比的 default boxes,也常称为 anchors。模型输出的是这些默认框对应的位置偏移和类别分数。 |
| - **固定输入尺寸**:输入张量为 `1 x 3 x 300 x 300`,对应 batch、通道、高、宽。 |
| - **COCO 类别设置**:输出类别维度为 `81`,通常表示 COCO 的 80 个目标类别加 1 个背景类。 |
| - **标准候选框数量**:SSD300 共预测 `8732` 个默认框,这是标准 SSD300 结构的典型配置。 |
|
|
| ## 网络结构概览 |
|
|
| SSD300 由三部分组成: |
|
|
| 1. **骨干网络** |
| 用于提取图像特征。本仓库提供 ResNet-18、ResNet-34、ResNet-50、ResNet-101 和 ResNet-151 版本。骨干网络越深,特征表达能力通常越强,但模型体积和计算量也会增加。 |
|
|
| 2. **多尺度检测特征层** |
| SSD 不只在最后一层特征上检测目标,而是在多个尺度的特征图上同时预测。这样可以兼顾小目标、中等目标和大目标。 |
|
|
| 3. **分类与回归检测头** |
| 每个检测位置都会输出两类信息: |
| - `boxes`:默认框的位置回归结果,用于还原最终边界框。 |
| - `scores`:每个默认框在各个类别上的置信度分数。 |
|
|
| 推理后通常还需要进行解码、置信度筛选和 NMS(Non-Maximum Suppression,非极大值抑制),得到最终检测框、类别和分数。 |
|
|
| ## 可用模型 |
|
|
| | 骨干网络 | ONNX 文件 | OM 文件 | ONNX 大小 | OM 大小 | |
| |---|---|---|---:|---:| |
| | ResNet-18 | `ssd300_resnet18.onnx` | `ssd300_resnet18.om` | 53.60 MB | 27.95 MB | |
| | ResNet-34 | `ssd300_resnet34.onnx` | `ssd300_resnet34.om` | 76.21 MB | 39.43 MB | |
| | ResNet-50 | `ssd300_resnet50.onnx` | `ssd300_resnet50.om` | 87.32 MB | 45.28 MB | |
| | ResNet-101 | `ssd300_resnet101.onnx` | `ssd300_resnet101.om` | 159.71 MB | 81.97 MB | |
| | ResNet-151 | `ssd300_resnet151.onnx` | `ssd300_resnet151.om` | 219.34 MB | 112.29 MB | |
|
|
| ## 输入与输出 |
|
|
| 所有 ONNX 模型的接口一致: |
|
|
| | 名称 | 类型 | 形状 | 说明 | |
| |---|---|---|---| |
| | `input` | `float32` | `1 x 3 x 300 x 300` | 输入图像张量,NCHW 格式 | |
| | `boxes` | `float32` | `1 x 4 x 8732` | 每个默认框对应的边界框回归输出 | |
| | `scores` | `float32` | `1 x 81 x 8732` | 每个默认框对应的类别分数输出 | |
|
|
| 说明: |
|
|
| - 输入图像需要缩放到 `300 x 300`。 |
| - 输入通道顺序为 `C x H x W`。 |
| - `scores` 为原始类别分数,后处理时通常需要按训练导出方式配合 softmax 或等价逻辑使用。 |
| - `boxes` 不是直接可视化的最终框,通常需要结合 SSD300 的默认框进行解码。 |
|
|
| ## 推荐推理流程 |
|
|
| 1. 读取原始图像,并记录原图宽高。 |
| 2. 将图像 resize 到 `300 x 300`。 |
| 3. 按模型训练时的预处理方式完成通道转换、归一化和 NCHW 排布。 |
| 4. 运行 ONNX Runtime 或昇腾 OM 推理。 |
| 5. 对 `boxes` 和 `scores` 做 SSD 解码。 |
| 6. 根据置信度阈值过滤低分结果。 |
| 7. 对同类别检测框执行 NMS。 |
| 8. 将检测框坐标映射回原图尺寸。 |
|
|
| ## 模型格式 |
|
|
| - **ONNX (`.onnx`)**:通用神经网络交换格式,可用于 ONNX Runtime、TensorRT、OpenVINO 等推理后端,也可作为进一步转换部署格式的中间模型。 |
| - **OM (`.om`)**:华为昇腾 NPU 使用的离线模型格式,通常由 ATC 工具基于 ONNX 模型转换得到,适合在 Ascend 310、Ascend 910 等设备上部署。 |
|
|
| ## 适用场景 |
|
|
| SSD300 结构轻量、推理链路短,适合以下场景: |
|
|
| - 通用物体检测 |
| - 边缘设备实时检测 |
| - 视频流逐帧检测 |
| - 对延迟敏感的检测任务 |
| - 需要 ONNX 或 Ascend OM 格式快速部署的项目 |
|
|
| 如果优先考虑速度,可以选择 ResNet-18 或 ResNet-34 版本;如果更关注特征表达能力,可以选择 ResNet-50、ResNet-101 或 ResNet-151 版本。 |
|
|