SSD
SSD(Single Shot MultiBox Detector)在一次前向传播中,从一张稠密的默认框(default box)网格上算出每个检测框和类别分数,没有单独的候选区域生成阶段。LibreYOLO 以仅推理的检测器形式提供基于 VGG16 的 SSD300 检查点。
- 任务
- detection
- 尺寸
- 300 at 300 px
- 安装
pip install libreyolo- 支持层级
- 仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
- 许可
- 代码采用 BSD-3-Clause,权重采用 BSD-3-Clause。商用
安装
SSD 不需要任何可选 extra。它导入的一切都在基础安装里。
pip install libreyolo预测
权重在首次使用时从 Hugging Face 下载,并缓存在本地。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSSD300.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreSSD300.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True返回的 Results 对象就是每个家族都会返回的那一个,所以换成另一个检测器只是改
一行的事。SSD 用逐类别分数解码它的默认框网格,然后跑非极大值抑制(non-maximum
suppression),所以 conf、iou 和 max_det 在这里都真的起作用,这一点和本库
里基于 query 的检测器不同。数据源、流式处理和结果处理见预测。
变体
SSD 只提供一个检查点:基于 VGG16 的 SSD300 网络,跑在它固定的原生画布上。这个 家族里没有尺寸或规模可选;预测、验证和导出用的都是那一张计算图。
权重文件是 LibreSSD300.pt,即家族前缀加上它唯一的尺寸键 "300"。它背后的类是
LibreSSD,所以直接构造的写法是 LibreSSD(size="300"),而不是一个以文件名命名
的类。
验证
val() 返回一个由 metrics/ 键组成的字典,涵盖查准率、查全率、mAP 50 和
mAP 50-95,在任何采用你训练时所用格式的数据集上测量。
from libreyolo import LibreYOLO model = LibreYOLO("LibreSSD300.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreSSD300.pt data=my-dataset.yaml导出
| 任务 | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX:支持 | Detection to TorchScript:不支持 | Detection to ExecuTorch:不支持 | Detection to TensorRT:不支持 | Detection to OpenVINO:不支持 | Detection to Paddle:不支持 | Detection to MNN:不支持 | Detection to RKNN:不支持 | Detection to ncnn:不支持 | Detection to TFLite:不支持 | Detection to CoreML:不支持 | Detection to Core AI:不支持 |
SSD 只能导出到 ONNX;这个家族的其他格式目前全部被屏蔽。导出始终使用检查点的原生
画布,而且计算图暴露的是 SSD 未经处理的打包 head,而不是融合了非极大值抑制的输
出,所以导出时不接受 nms=True。LibreYOLO 自己的后端会在把计算图加载回来之后,
再跑解码和抑制这一步。
from libreyolo import LibreYOLO model = LibreYOLO("LibreSSD300.pt") # 这里故意不写 imgsz:SSD300 会在它检查点的原生画布上追踪,# 传任何其他值都会在导出开始前抛出异常model.export(format="onnx")libreyolo export model=LibreSSD300.pt format=onnxfrom libreyolo import LibreYOLO # 工厂按文件后缀分发,所以导出的产物加载方式和任何检查点一样,# 返回的也是同一个 Results 对象model = LibreYOLO("LibreSSD300.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)检查点
这个家族已发布的全部权重文件。
| 文件 | 输入(px) | 权重许可 |
|---|---|---|
| Detection | ||
| LibreSSD300.pt | 300 | bsd-3-clause |
上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。
许可证
请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。
这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。
- 原始工作
- SSD, UNC Chapel Hill, Zoox, Google and University of Michigan
- 上游许可
- BSD-3-Clause
- LibreYOLO 代码
- MIT
- 权重
- 采用 BSD-3-Clause 许可,重新发布在 huggingface.co/LibreYOLO
- 解读
- BSD-3-Clause is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its copyright notice and disclaimer with any copy you redistribute, and it places no obligation on your own application code. The official SSD300 COCO checkpoint carries no separate, checkpoint-specific license: LibreYOLO's mirror applies BSD-3-Clause on an explicitly disclosed implied basis, the same basis torchvision states for its own pretrained SSD300 weights. The VGG16 backbone the graph is built on traces back to Oxford's fully convolutional reduced VGGNet, released under CC BY 4.0 by Karen Simonyan and Andrew Zisserman.
LibreYOLO 的 SSD300 代码不是从论文作者自己的 Caffe 版本移植来的;它派生自 torchvision 采用 BSD-3-Clause 许可的 SSD300 实现,上面链接的上游来源就是那个仓 库。骨干的 VGG16 权重还能再往前追溯到牛津大学的全卷积精简版 VGGNet,由 Karen Simonyan 和 Andrew Zisserman 以 CC-BY-4.0 许可发布。
引用
@inproceedings{liu2016ssd,
title = {{SSD}: Single Shot MultiBox Detector},
author = {Liu, Wei and Anguelov, Dragomir and Erhan, Dumitru and Szegedy, Christian and Reed, Scott and Fu, Cheng-Yang and Berg, Alexander C.},
booktitle = {ECCV},
year = {2016}
}复制自作者在 github.com/weiliu89/caffe/tree/ssd#citing-ssd 上提供的引用块。