FCN
一个逐像素的稠密分类器,把检测器的全连接层换成卷积,于是输出的是全分辨率的类别图,而不是检测框。LibreYOLO 只把它用于语义分割。
- 任务
- semantic
- 尺寸
- r50, r101 at 520 px
- 安装
pip install libreyolo- 支持层级
- 仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
- 许可
- 代码采用 BSD-3-Clause,权重采用 BSD-3-Clause。商用
安装
FCN 不需要任何可选 extra。它导入的一切都在基础安装里。
pip install libreyolo预测
权重在首次使用时从 Hugging Face 下载,并缓存在本地。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreFCNr50.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape) # (H, W) 类别 idprint(mask.classes) # 图像中出现的类别 id,已排序libreyolo predict model=LibreFCNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True语义分割返回的是每个像素一个类别 id,而不是检测框,所以 result.semantic_mask
在 .data 上带一个 (H, W) 数组,在 .classes 上带图像中出现的类别 id 列表。
conf、iou 和 max_det 为了 API 一致而被接受,但不起作用:模型用 argmax 给
每个像素分配一个类别,没有置信度阈值,也没有 NMS 步骤。数据源、流式处理和结果
处理见预测。
变体
两种 ResNet 深度,输入都固定为 520 px。库里的推理图是 torchvision 的膨胀 ResNet FCN,而不是原论文那个基于 VGG、带跳跃连接的 FCN-8s 网络。
LibreYOLO 不训练 FCN:对这个家族调用 train() 会抛出 NotImplementedError,
上面的支持层级把它标为仅推理。已发布的两个检查点(checkpoint)
是 torchvision 自己的、在 COCO 上训练的权重,为 LibreYOLO 的加载器做了转换。
验证
val() 返回 metrics/mIoU 和 metrics/pixel_accuracy,在任何采用你训练所用
格式的数据集上测量。
from libreyolo import LibreYOLO model = LibreYOLO("LibreFCNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])libreyolo val model=LibreFCNr50.pt data=my-dataset.yaml导出
| 任务 | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX:支持 | semantic to TorchScript:支持 | semantic to ExecuTorch:不支持 | semantic to TensorRT:支持 | semantic to OpenVINO:支持 | semantic to Paddle:不支持 | semantic to MNN:不支持 | semantic to RKNN:不支持 | semantic to ncnn:不支持 | semantic to TFLite:不支持 | semantic to CoreML:不支持 | semantic to Core AI:不支持 |
导出的产物按文件后缀经由 LibreYOLO() 重新加载,所以一个 .onnx 或 .engine
文件的表现和检查点一样,返回同样的 Results。导出列出了每种
格式接受的参数。
from libreyolo import LibreYOLO model = LibreYOLO("LibreFCNr50.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreFCNr50.pt format=onnxlibreyolo export model=LibreFCNr50.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # 工厂按文件后缀分发,所以导出的产物加载方式和任何检查点一样,# 返回的也是同一个 Results 对象model = LibreYOLO("LibreFCNr50.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)检查点
这个家族已发布的全部权重文件。
| 文件 | 输入(px) | 权重许可 |
|---|---|---|
| semantic | ||
| LibreFCNr50.pt | 520 | bsd-3-clause |
| LibreFCNr101.pt | 520 | bsd-3-clause |
上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。
许可证
请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。
这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。
- 原始工作
- FCN, PyTorch
- 上游许可
- BSD-3-Clause
- LibreYOLO 代码
- MIT
- 权重
- 采用 BSD-3-Clause 许可,重新发布在 huggingface.co/LibreYOLO
- 解读
- BSD-3-Clause is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the copyright notice, license text and a non-endorsement clause with any copy you redistribute. LibreYOLO's inference graph is torchvision's dilated-ResNet FCN, not the original VGG-based FCN-8s skip-fusion network from the paper. The two published checkpoints are torchvision's official COCO-trained weights; their separate LibreYOLO Hugging Face mirrors carry BSD-3-Clause on an implied basis disclosed by torchvision rather than an explicit checkpoint-specific grant, and torchvision's own documentation notes that pretrained-model terms can depend on the training data, leaving that determination to the user.