Yolo11Onnx——分割模型
YOLO11 分割模型 ONNX 输出
一、模型输出结构概览
YOLO11 分割模型在导出为 ONNX 格式后,通常会包含 两个输出分支:
- Output0:检测张量(Detection Tensor)
- Output1:掩膜原型张量(Mask Prototype Tensor)
二、Output0 —— 检测张量

以本例中模型输出 [1, 38, 21504] 为例:
-
第一维 (1):批量大小(batch size)。
-
第二维 (38):每个检测的特征数量。
-
前 4 个值:表示检测框的参数
- cx:检测框中心点 x 坐标
- cy:检测框中心点 y 坐标
- w:检测框宽度
- h:检测框高度
-
接下来的 2 个值:每个类别的置信度(对应两个类别)
-
剩余的 32 个值:掩膜权重(mask coefficients),用于与 Output1 中的掩膜原型结合生成目标分割掩膜。
-
-
第三维 (21504):表示预测到的对象数量(即 21504 个候选检测点)。
总结结构如下:
| 部分 | 数量 | 含义 |
|---|---|---|
| 0–3 | 4 | 检测框参数 (cx, cy, w, h) |
| 4–5 | 2 | 类别置信度(双类别) |
| 6–37 | 32 | 掩膜权重(Mask Coefficients) |
三、Output1 —— 掩膜原型张量
Output1 输出的形状通常为 [1, 32, W, H],如 [1, 32, 160, 160]。
- 这里的
32与 Output0 中的掩膜权重维度相对应。 - 每一层(channel)都表示一个掩膜原型(mask prototype)。
- 模型在推理时,会根据每个检测框的 32 个掩膜权重,对这些掩膜原型进行加权求和,从而生成每个目标的掩膜。
四、掩膜生成与还原流程
-
掩膜融合:
使用 Output0 中的掩膜权重(32 维)与 Output1 中的掩膜原型[32, W, H]做矩阵乘法:\[M_i = \text{sigmoid}(W_i \cdot P) \]其中:
- ( \(W_i\) ):第 i 个检测框的掩膜权重(1×32)
- ( \(P\)):掩膜原型(32×W×H)
- ( \(M_i\) ):生成的第 i 个掩膜(H×W)
-
上采样(Upsample):
将生成的掩膜上采样至原图尺寸(例如从 160×160 → 640×640)。除以缩放比例。掩膜还原需要经过两次图像方法。从输出掩膜数据到对应输入图像的尺寸,再从输入图像的尺寸到原图的尺寸。 -
掩膜裁剪(Crop):
按检测框边界裁剪掩膜,仅保留目标区域。再通过二值化找到掩膜部分。 -
生成掩膜图像(Graphics):
根据掩膜数据生成掩膜图像(ARGB),并通过Graphics将其与原图像叠加。
掩膜图像生成
private Bitmap MaskGenerationMethod(Mat maskData, Color color)
{
Bitmap mask = new Bitmap(maskData.Cols, maskData.Rows, PixelFormat.Format32bppArgb);
BitmapData maskImageData = mask.LockBits(new Rectangle(0, 0, mask.Width, mask.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
int height = maskData.Rows;
int width = maskData.Cols;
Parallel.For(0, height, i =>
{
for (int j = 0; j < width; j++)
{
float maskValue = maskData.At<float>(i, j);
if (maskValue == 1)
{
IntPtr startPixel = IntPtr.Add(maskImageData.Scan0, i * maskImageData.Stride + j * 4);
byte[] colorInfo = new byte[4] { color.B, color.G, color.R, color.A };
Marshal.Copy(colorInfo, 0, startPixel, 4);
}
}
});
mask.UnlockBits(maskImageData);
return mask;
}
五、常见输出格式对比
| 模型类型 | Output0(检测张量) | Output1(掩膜原型) |
|---|---|---|
| YOLO11-Seg 640×640 | [1, 38, 300] | [1, 32, 160, 160] |
| YOLO11-Seg 1024×1024 | [1, 38, 21504] | [1, 32, 256, 256] |
六、要点总结
- Output0: 包含检测框 + 类别置信度 + 掩膜权重。
- Output1: 提供基础掩膜原型,用于生成目标掩膜。
- 核心思想: 通过「掩膜权重 × 掩膜原型 → 上采样 → 裁剪」得到目标分割结果。
- 理解关键:
掩膜原型是通用的「基础形态」,而掩膜权重定义了每个目标在这些原型上的组合方式。 - 性能优化:
使用多线程操作处理返回的数据(Plinq、Parallel)。并注意多线程中的线程安全问题。 - 细节问题:
Bitmap中的数据是小端存放的。因此生成掩膜时要注意。
💡 提示:
YOLO 系列的分割模型(包括 YOLOv8、YOLO11)均采用类似的掩膜生成机制。理解这两个输出分支的关系,有助于在 ONNX 或自定义推理框架中正确解析分割结果。

浙公网安备 33010602011771号