Mask R-CNN
Mask R-CNN 给 Faster R-CNN 加了一条按区域走的掩码分支,在它检测到的每个检测框旁边预测一张分割掩码。LibreYOLO 移植了 torchvision 的实现,用于目标检测和实例分割。
- 任务
- detection, instance segmentation
- 尺寸
- r50 at 800 px
- 安装
pip install libreyolo- 支持层级
- 仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
- 许可
- 代码采用 BSD-3-Clause,权重采用 BSD-3-Clause。商用
安装
Mask R-CNN 不需要任何可选 extra。它导入的一切都在基础安装里。
pip install libreyolo预测
权重在首次使用时从 Hugging Face 下载,并缓存在本地。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMaskRCNNr50.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # task="detect" 跳过掩码 head,从同一个检查点返回检测框,# 结果里不带掩码model = LibreYOLO("LibreMaskRCNNr50.pt", task="detect")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)返回的 Results 对象就是每个家族都返回的那一个,所以换用另一个检测器只是一行
改动。不带 task 参数加载检查点返回的是实例掩码,因为分割是这个家族的默认任务;
result.masks 这时会把它们和检测框一起带出来。传 task="detect" 则加载同样的权重
但不带掩码 head,只返回检测框。conf 和 iou 设置置信度阈值和 NMS 阈值;和基于
查询的检测器不同,Mask R-CNN 保留了它上游的 NMS 步骤。数据源、流式处理和结果处理见
预测。
变体
只有一种骨干:ResNet-50 加一个特征金字塔,用的是 torchvision 的 v2 Mask R-CNN builder。已发布的检查点采用 BSD-3-Clause 许可,同时服务于这个家族的两个任务,所以 没有尺寸需要在其中挑选。
验证
val() 返回一个由 metrics/ 键组成的字典。对这个检查点默认的分割任务来说,普通的
metrics/mAP50-95 键里放的是掩码分数,同一次运行还会在 (B) 后缀下报告检测框,
所以一次跑完两者都有。
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"]) # 掩码print(metrics["metrics/mAP50-95(B)"]) # 检测框libreyolo val model=LibreMaskRCNNr50.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:不支持 |
| Instance segmentation | Instance segmentation to ONNX:支持 | Instance segmentation to TorchScript:不支持 | Instance segmentation to ExecuTorch:不支持 | Instance segmentation to TensorRT:不支持 | Instance segmentation to OpenVINO:不支持 | Instance segmentation to Paddle:不支持 | Instance segmentation to MNN:不支持 | Instance segmentation to RKNN:不支持 | Instance segmentation to ncnn:不支持 | Instance segmentation to TFLite:不支持 | Instance segmentation to CoreML:不支持 | Instance segmentation to Core AI:不支持 |
Mask R-CNN 只能导出到 ONNX,批大小为 1。导出的计算图把上游的缩放和掩码粘贴步骤
保留在内部,所以无论传入什么,LibreYOLO 都会强制 dynamic=True,好让计算图对非
正方形的数据源依然有效。导出的 .onnx 文件按文件后缀经由 LibreYOLO() 重新加载,
返回同样的 Results。
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800from libreyolo import LibreYOLO, SAMPLE_IMAGE # 工厂按文件后缀分发,所以导出的产物加载方式和任何检查点一样,# 返回的也是同一个 Results 对象model = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)检查点
这个家族已发布的全部权重文件。下面这个唯一的检查点列在 detect 下面,但同一个文件
也能用于分割:不传 task 参数,它默认就返回掩码。
| 文件 | 输入(px) | 权重许可 |
|---|---|---|
| Detection | ||
| LibreMaskRCNNr50.pt | 800 | bsd-3-clause |
上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。
许可证
请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。
这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。
- 原始工作
- Mask R-CNN, PyTorch
- 上游许可
- BSD-3-Clause
- LibreYOLO 代码
- MIT
- 权重
- 采用 BSD-3-Clause 许可,重新发布在 huggingface.co/LibreYOLO
- 解读
- BSD-3-Clause is a permissive license, so this code can be used in commercial and closed-source products with no obligation on your own application code. It asks only that you keep the copyright notice and disclaimer with any copy you redistribute, and it carries no patent grant. The published checkpoint used for parity testing is not distributed in the LibreYOLO source tree: torchvision's own documentation notes that a pretrained model's terms may depend on its training data, so the Hugging Face mirror ships the BSD text on that implied basis and repeats the caveat rather than issuing an explicit checkpoint-specific grant.
Mask R-CNN 是作为 LibreYOLO 的 Faster R-CNN 包装器的子类构建的:它共用同样的 torchvision 源码和 BSD-3-Clause 许可,并从同一个移植过来的 commit 里加上了掩码 预测器和掩码 RoI head。