想象你是一位小学美术老师,布置了一份“照片拼图”作业。每个孩子交上来的是一张把图片涂满颜色的“答案纸”——汽车涂蓝色、行人涂红色、天空涂黄色。你手里也有一张标准答案图。要判断谁涂得好,你不可能只数“涂对的格子总数”,因为天空占了半张纸,只要天空涂对,总分就虚高。聪明的做法是:对每一类色块,分别看“孩子涂的范围”和“标准范围”的重叠程度,再把所有类别的得分平均起来。这就是 mIoU——图像分割领域最权威的“批改规则”。 在多模态大模型时代,模型不仅要“看懂”图片,还要把“某个区域”精确地圈出来。mIoU 成了衡量这种“视觉-语言”能力是否靠谱的标尺——它就像一把全校统一的“视力表”,让不同模型的“圈画水平”可以公平比较。

岗位关联

对 AI 从业者而言,掌握 mIoU 等于掌握一套通用的“模型视力体检表”,能从算法、评测、基准对齐三个层面把模型能力说清楚,是进入多模态评估领域的必备基本功。

目录
  1. 可视化演示
  2. 任务定义
  3. 指标原理
  4. 计算流程
  5. 评测意义
  6. 基准评测
  7. 多模态应用
  8. 工程实践
  9. 发展趋势
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示IoU交并比计算原理、多类别mIoU平均计算过程、以及mIoU对边界质量不敏感的局限性分析。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+_captions.iou+'

任务定义

小美老师把一张街景照片复印成空白底稿,要求孩子们给每个像素涂上颜色:汽车涂蓝、行人涂红、天空涂黄、路面涂灰。这种“给每个像素发一张类别身份证”的任务,在 AI 领域就叫图像分割。它与目标检测最大的区别是:检测只画一个方框把物体“框住”,而分割要画出物体精确的轮廓,像剪纸一样把每个物体从背景中“抠”出来。

图像分割内部还分为两种主流玩法。语义分割只关心“这是什么类别的区域”,比如把整片天空看成同一个类,哪怕天空被电线杆切成了几块;实例分割则更进一步,要求区分“同一个类别里不同的个体”,比如左边这辆车和右边那辆车虽然都是“车”,但它们是两个不同的对象,要分别涂成两种深浅不同的蓝色。

无论哪种玩法,模型的输出本质都是同一件事:对输入图片的每一个像素,给出一个类别编号。这就像把所有像素点都送进一个“分类考场”,每个考生都要交出自己的答案。

回到拼图比喻:孩子们交上来的涂色纸,就是 Y;小美老师手里的标准答案,是真实的 Y。而 mIoU 要解决的,正是“怎么公平地给这些涂色纸打分”这个核心问题。

Seg:  I∈RH×W×3 ⟼ Y∈{1,2,…,C}H×W\text{Seg}:\ \ I \in \mathbb{R}^{H \times W \times 3}\ \longmapsto\ Y \in \{1,2,\ldots,C\}^{H \times W}
这个式子的意思是:模型把一张 H 行 W 列、3 个颜色通道的彩色图,逐像素地翻译成一张同样大小的“类别编号图”。
  1. 输入图像 II 表示一张待分割的照片,尺寸是 H(高)×W(宽),每个像素由红绿蓝 3 个通道描述,所以记作 H×W×3。
    I∈RH×W×3I \in \mathbb{R}^{H \times W \times 3}
  2. 映射箭头长箭头表示“模型执行翻译动作”,把一种形式的数据变换成另一种形式,就像学生把照片临摹成涂色画。
    ⟼\longmapsto
  3. 输出标签图 YY 是与输入同尺寸的一张“标签图”,每个像素位置上是一个类别编号,比如 1=汽车、2=行人、3=天空。
    Y∈{1,2,…,C}H×WY \in \{1,2,\ldots,C\}^{H \times W}
  4. 类别总数 CC 是数据集里所有类别的数量,编号从 1 取到 C,每个类别对应一种“颜色涂法”。
    CC

指标原理

小美老师打分的第一个困惑是:不能只看“涂对了多少格”,因为天空占了大半张纸。她改用了一个更聪明的办法——对每个色块,把“孩子涂的范围”和“标准答案的范围”都拿出来,先算它们重叠的部分(交集),再算它们总共覆盖的部分(并集),用重叠面积除以总覆盖面积。这个比值就是 IoU(Intersection over Union,交并比)。

IoU 的直觉非常好懂:如果孩子的涂色和标准答案完全一致,交集等于并集,比值就是 1,满分;如果两张图完全没有重叠,比值就是 0,零分。它既惩罚了“漏涂”(真实区域没覆盖到),又惩罚了“多涂”(把背景也涂了进去),是一把很全面的尺子。

在正式计算时,我们针对每一个类别 c 单独算一次 IoU:把模型预测为类别 c 的像素集合记为 P_c,把真实标注为类别 c 的像素集合记为 G_c,再做交并比。这样一来,每个色块都得到自己独立的分数,互不干扰。

IoU 把“这孩子涂得怎么样”变成一个 0 到 1 之间的分数。1 分是完美复刻,0 分是完全跑偏,0.5 分意味着“对了一半,也错了一半”——就像拼图只拼上了半块区域。

IoUc=∣Pc∩Gc∣∣Pc∪Gc∣IoU_c = \frac{|P_c \cap G_c|}{|P_c \cup G_c|}
这个分数表示:预测区域和真实区域的重叠面积,占两者加在一起的总面积的比例。
  1. 预测集合 P_cP_c 是模型“认为”属于类别 c 的所有像素的集合,相当于孩子涂成某种颜色的所有格子。
    PcP_c
  2. 真实集合 G_cG_c 是标准答案中真正属于类别 c 的像素集合,相当于小美老师手里的标准色块。
    GcG_c
  3. 交集符号 ∩ 表示“两者共同拥有的像素”,即孩子和标准答案都涂成这个类别的格子。
    Pc∩GcP_c \cap G_c
  4. 并集符号 ∪ 表示“只要任意一方涂了这个类别的格子都算进来”,包含交集、孩子多涂的部分、以及真实存在但孩子漏涂的部分。
    Pc∪GcP_c \cup G_c
  5. 竖线与比值两对竖线表示“统计集合里有多少像素”,比值就是重叠面积占总覆盖面积的比例。
    ∣Pc∩Gc∣∣Pc∪Gc∣\frac{|P_c \cap G_c|}{|P_c \cup G_c|}

计算流程

小美老师发现,每个孩子交上来的涂色纸里通常有七八种颜色(类别),只算一张色块的分数不够公平,必须把每个色块都单独批一遍,最后再求平均。这个“逐类算 IoU,最后取平均”的过程,就是 mIoU(mean Intersection over Union,平均交并比)的计算流程。

计算前要先建一本“记分册”——混淆矩阵。矩阵的行表示模型预测的类别,列表示真实类别,每个格子 M[i][j] 记录“真实是 j 类却被预测成 i 类的像素个数”。主对角线上的格子就是预测正确的像素,其余格子都是各种“认错”。有了这本记分册,每一类的 TP(正确预测)、FP(多预测)、FN(漏预测)都能直接数出来。

接着对每一类算一次 IoU,最后把所有类的 IoU 加起来除以类别数 C,就得到 mIoU。它给每个类别平等的投票权——哪怕“行人”在整张图里只占巴掌大,它的分数和占半张天的“天空”一样重要。

这套流程就像小美老师批完全班作业后,把每个色块的平均分再算一遍总评。mIoU 越高,说明这个孩子(模型)在“各种颜色的涂法”上都比较靠谱,而不是只有大片天空涂得好。

mIoU=1C∑c=1CIoUcmIoU = \frac{1}{C}\sum_{c=1}^{C}{IoU_c}
mIoU 就是把所有类别的 IoU 分数加总后取算术平均,因此每个类别对最终分数的贡献完全相同。
  1. 类别求和∑ 符号表示“从第 1 类一直加到第 C 类”,把每个类别的 IoU 全部累加起来,就像把所有色块的批改分汇总。
    ∑c=1CIoUc\sum_{c=1}^{C}{IoU_c}
  2. 倒数系数前面的 1/C 是平均系数,把总和平均分摊到 C 个类别上,得到每个类别的“平均待遇”。
    1C\frac{1}{C}
  3. 整体平均把求和结果乘以 1/C,等价于“总分 ÷ 类别数”,这就是 mIoU 的完整含义。
    1C∑c=1CIoUc\frac{1}{C}\sum_{c=1}^{C}{IoU_c}

评测意义

有人说,直接数“涂对的格子占总格子的比例”(像素精度)不是更简单吗?但小美老师发现这个指标有个大漏洞:如果天空占全图 70%,只要把天空涂对,正确率就有 70%,哪怕行人、汽车全涂错也能拿到高分。mIoU 按类别平均,正好堵住了这个漏洞。

不过 mIoU 也不是万能的。它对所有类别一视同仁,但现实中有些类别出现的频率极低,比如“摩托车”可能一百张图里才出现一次,它的表现对总分影响仍然是 1/C。为了更细致地评估,业界还设计了频率加权 IoU(FWIoU):按每个类别在真实标注中的像素占比给 IoU 加权,占比大的类别对总分影响更大。

在实际评测中,mIoU 和 FWIoU 往往一起报告。mIoU 反映“模型对小类别的良心”,FWIoU 反映“模型在大面积类别上的整体表现”,两者互补,就像老师既要看“偏科生的短板科目”,也要看“全班平均分”。

FWIoU=∑cwc⋅IoUc∑cwc,wc=∣Gc∣∑k∣Gk∣FWIoU = \frac{\sum_{c} w_c \cdot IoU_c}{\sum_{c} w_c}, \qquad w_c = \frac{|G_c|}{\sum_{k}|G_k|}
权重 w_c 表示类别 c 的真实像素占全部真实像素的比例,加权后让“常见类别”的分数在总分中更有话语权。
  1. 权重定义 w_cw_c 是类别 c 在数据集中出现的“面积占比”,占的面积越大权重越高,就像小美老师统计这个色块在班级作业里出现的总次数。
    wc=∣Gc∣∑k∣Gk∣w_c = \frac{|G_c|}{\sum_{k}|G_k|}
  2. 分子为加权 IoU 和每个类别的 IoU 先乘上自己的权重再求和,常见类别对总分的贡献自然变大。
    ∑cwc⋅IoUc\sum_{c} w_c \cdot IoU_c
  3. 分母为权重的总和除以所有权重之和,保证结果仍然落在 0 到 1 之间,相当于做了一次“规模归一化”。
    ∑cwc\sum_{c} w_c

基准评测

每个孩子涂完色,总得有个统一的考场。图像分割领域最著名的考场就是 PASCAL VOC、COCO、Cityscapes 这几个经典数据集。它们提供了大量带像素级标注的图片,每一张都相当于“标准答案拼图”。PASCAL VOC 有 20 个物体类别,COCO 的标注细到 80 类,Cityscapes 则专注城市街道场景,专门为难自动驾驶里的“路况拼图”。

在这些基准上,官方发布评测协议:参赛者把模型预测的掩码图提交到服务器,由官方统一计算 mIoU。这个设计非常关键——就像小美老师手里攥着标准答案,绝不让学生自己给自己打分。为什么?因为“自己改自己的卷子”很容易手滑,官方统一评测才能保证公平。

排行榜按 mIoU 从高到低排序,成了行业公认的“英雄榜”。模型在榜单上每前进 0.1 个百分点,都需要在数据结构、训练策略、损失函数上做不少文章。mIoU 因此成为衡量模型强弱的硬通货。

这份“官方考卷”的存在,让 AI 社区的比拼有了公认的坐标系。小美老师只需要宣布“按 VOC 的 mIoU 排名”,所有孩子就都清楚规则:涂得全、涂得准、不漏涂、不多涂,才有高分。

mIoUbench=1C∑c=1CTPcTPc+FPc+FNcmIoU_{bench} = \frac{1}{C} \sum_{c=1}^{C} \frac{TP_c}{TP_c + FP_c + FN_c}
在官方评测里,每一类的 IoU 都用“正确预测数 ÷ (正确数 + 多预测数 + 漏预测数)”来计算,本质上仍是交集除以并集。
  1. TP_c 正确预测数TP_c 是真实为类别 c 且模型也预测为 c 的像素数,即“孩子涂对的那部分”。
    TPcTP_c
  2. FP_c 多预测数FP_c 是模型预测为 c 但真实不是 c 的像素数,即“孩子多涂出去的部分”。
    FPcFP_c
  3. FN_c 漏预测数FN_c 是真实为 c 但模型没预测为 c 的像素数,即“孩子漏涂的部分”。
    FNcFN_c
  4. 三者之和作分母TP + FP + FN 恰好等于并集的像素数,与 IoU 的“交集 ÷ 并集”完全等价,只是换了一套记号。
    TPc+FPc+FNcTP_c + FP_c + FN_c

多模态应用

如今拼图玩法升级了:老师不再直接给照片,而是说一句“请把右边那辆红车圈出来”,孩子要根据这句话去照片里找到目标并涂色。这就是多模态分割任务,典型如参照分割(Referring Segmentation)模型,输入是“图片 + 文本描述”,输出是描述对应区域的掩码,本质上跨了“语言”和“视觉”两道关口。

这类模型的评测难点在于:文本描述五花八门,“红车”“左边的店员”“戴帽子的人”都可能是目标。评测时需要把文本和图片配对成一个样本,对每个样本单独计算预测掩码与真实掩码的 IoU,再在所有样本上平均。这样既能测出模型“听不听得懂话”,也能测出它“圈得准不准图”。

mIoU 在这里扮演了“跨模态考官”的角色:它不关心模型内部用了什么花哨的对齐技巧,只看最终“圈出来的区域”和标注是否吻合。这正是多模态评测最需要的中立标尺。

回到比喻:孩子从“看图涂色”变成了“听指令涂色”,小美老师的批改标准却没变——依然用交并比看涂得全不全、准不准。mIoU 把语言理解和图像分割这两门功课的成绩,合并成了同一个分数。

RefSeg-mIoU=1N∑n=1N∣Y^n∩Yn∣∣Y^n∪Yn∣\text{RefSeg-mIoU} = \frac{1}{N}\sum_{n=1}^{N} \frac{|\hat{Y}_n \cap Y_n|}{|\hat{Y}_n \cup Y_n|}
对 N 个“图文样本对”分别计算掩码交并比,再取平均,就得到多模态参照分割任务的 mIoU 分数。
  1. 样本编号 nn 表示第 n 个样本,每个样本由一张图和一句描述组成,是评测的最小单位。
    nn
  2. 预测掩码 Ŷ_nŶ_n 是模型根据第 n 张图和文本输出预测的区域掩码,相当于孩子听了老师的描述后涂出的色块。
    Y^n\hat{Y}_n
  3. 真实掩码 Y_nY_n 是人工标注的标准区域,即老师心里的标准答案。
    YnY_n
  4. 样本数 N 与平均把所有样本的 IoU 求和后除以 N,得到该模型在整批多模态样本上的平均表现。
    1N∑n=1N\frac{1}{N}\sum_{n=1}^{N}

工程实践

在真实代码里实现 mIoU,第一件事就是根据预测结果和真实标签构建混淆矩阵。假设预测掩码 pred 和真实掩码 gt 都是尺寸相同的整数数组,类别总数是 num_classes,那么遍历图像里所有像素、按“预测 i 行真实 j 列”计数,就能得到矩阵。这个矩阵是一切指标的数据源头。

编写实现时要小心两类细节。第一是类别不均衡:如果某个类别在训练数据里像素极少,模型可能直接放弃预测它,导致该类别 IoU 偏低,必须在分析报告里单独指出。第二是空类别:如果某个类别在真实标注里从未出现,有的实现直接跳过它,有的则记为 0 分,两种口径得出的 mIoU 不同,提交论文时必须写清楚。

更稳健的做法是:除了报 mIoU,同时给出每个类别的 IoU 明细和混淆矩阵热力图。这样能一眼看出模型是“整体平庸”还是“偏科严重”,为下一步优化指明方向——就像小美老师在评语里写“全景图不错,但行人涂色总是偏右”。

在工程代码里,这个矩阵往往是几十行代码就写完的“小事”,但决定了模型评估的所有结论。小美老师深知:记分册如果记错了格子,后面所有评语都是空谈。

Mij=∣{p∈image : y^p=i, yp=j}∣M_{ij} = \left|\left\{ p \in \text{image}\ :\ \hat{y}_p = i,\ y_p = j \right\}\right|
M_ij 表示“真实类别为 j、模型却预测成 i”的像素个数,主对角线上的 M_ii 就是各种类别的正确预测像素数。
  1. 像素位置 pp 遍历图像上的每一个像素位置,是统计的最小单元。
    p∈imagep \in \text{image}
  2. 预测类别ŷ_p 是模型在 p 处的预测类别,对应混淆矩阵的行索引 i。
    y^p=i\hat{y}_p = i
  3. 真实类别y_p 是该像素的真实类别,对应混淆矩阵的列索引 j。
    yp=jy_p = j
  4. 集合计数外层两条竖线和花括号表示“把所有满足条件的像素收集成一个集合,再数个数”。
    ∣{p:⋯ }∣\left|\left\{ p : \cdots \right\}\right|

发展趋势

mIoU 用了几十年,小美老师也发现它有些“钝感”:两个模型整体 mIoU 相同,但一个边界模糊、边缘像狗啃过,另一个边界锐利、线条顺滑——普通 IoU 看不出差别。为此研究者提出边界 IoU(Boundary IoU):只取真实掩码和预测掩码边界周围一小圈像素,在这个“边境地带”算交并比。边界越整齐的模型,这一项得分越高。

另一条发展路线上,评测正在从“单图打分”走向“多模态统一”。新的多模态分割基准开始把“文本描述 + 图片 + 掩码”成套发布,既测分割精度,也测文本理解;同时评测协议越来越规范,统一了空类别处理、样本筛选、提交格式等细节,让各家报告的 mIoU 真正可对比。

这些新指标并不是要取代 mIoU,而是在它基础上“加考”更细的科目。就像老师既保留总平均分,又增加了“书写工整分”和“听题理解分”,多个维度拼在一起,才构成完整的能力画像。

拼图界的新潮流是:“涂得全”还不够,还要“涂得齐”。mIoU 作为基础分继续存在,而边界 IoU、多模态统一基准等新规则,正在让 AI 的“拼图能力”考试变得越来越严格、越来越立体。

BoundaryIoU=∣P∂∩G∂∣∣P∂∪G∂∣BoundaryIoU = \frac{|P_{\partial} \cap G_{\partial}|}{|P_{\partial} \cup G_{\partial}|}
P_∂ 表示预测掩码边界附近的像素集合,G_∂ 表示真实掩码边界附近的像素集合,边界 IoU 只看这些“边界地带”的重合度。
  1. 预测边界带 P_∂P_∂ 是把预测掩码的轮廓往外扩张几圈后得到的像素集合,只关心“边境线附近”。
    P∂P_{\partial}
  2. 真实边界带 G_∂G_∂ 同理,来自真实掩码的轮廓扩张,构成标准答案的“边境线”。
    G∂G_{\partial}
  3. 交集与并集两个边界带的交集是“双方边缘重合的像素”,并集是“任一边缘触及的像素”,二者相除就是边界 IoU。
    ∣P∂∩G∂∣∣P∂∪G∂∣\frac{|P_{\partial} \cap G_{\partial}|}{|P_{\partial} \cup G_{\partial}|}

AI 应用场景

自动驾驶语义分割评测

阶段:模型评测与基准测试

解决的问题:自动驾驶系统需要实时识别道路、车辆、行人、交通标志。传统评测靠司机主观感受或少量测试,既不全面也不可复现。用 mIoU 在 Cityscapes 等道路数据集上量化评估每一个类别(尤其是行人和骑行者这类小目标),能客观比较不同分割模型的优缺点,让选型有据可依。

具体案例:某自动驾驶团队在 Cityscapes 验证集上对比了两个分割模型:模型 A 的 mIoU 是 74.5%,模型 B 是 73.8%。查看逐类 IoU 后发现模型 A 的“骑手”类别高出 6 个百分点,而“建筑”略低,团队据此选择模型 A 并追加了骑手数据的训练样本。

多模态大模型统一评测

阶段:多模态能力评估与基准对齐

解决的问题:指令分割模型要根据一句自然语言描述圈出图中对应物体,比如“左数第二件红色外套”。传统做法只做定性展示,难以量化。使用 mIoU 对图文样本对逐对计算掩码重合度,再在全部样本上取平均,就能给“听指令圈图”能力打一个公平可比的分数。

具体案例:某大模型团队参加 RefCOCO 参照分割基准评测,提交模型的 mIoU 为 68.2%,而基线模型为 62.5%。团队利用逐类 IoU 分析发现差距主要来自“多个同色物体”的歧义场景,于是针对性加入对抗样本微调,一个月后 mIoU 提升到 71.3%。

医学影像分割临床验证

阶段:模型评估与临床验证

解决的问题:CT/MRI 影像中肿瘤区域的勾画直接关系治疗方案。传统人工勾画费时费力且医生间一致性有限。用 mIoU 作为金标准指标,可评估自动分割模型与资深医生标注的一致性,辅助医院决定模型能否进入临床辅助诊断流程。

具体案例:某医疗 AI 公司在肝脏肿瘤 CT 分割项目中,以资深放射科医生标注为真实掩码,测得模型 mIoU 为 0.87;进一步按肿瘤尺寸分组后发现小肿瘤(<2cm)的 IoU 仅 0.71,团队据此优化了小目标特征提取,最终整体 mIoU 提升到 0.89。

Python 演示

python52 行
import numpy as np def compute_confusion_matrix(pred, gt, num_classes):    cm = np.zeros((num_classes, num_classes), dtype=np.int64)    for i in range(num_classes):        for j in range(num_classes):            cm[i, j] = np.sum((pred == i) & (gt == j))    return cm def compute_miou(pred, gt, num_classes):    cm = compute_confusion_matrix(pred, gt, num_classes)    ious = []    for c in range(num_classes):        tp = cm[c, c]        fp = cm[c, :].sum() - tp        fn = cm[:, c].sum() - tp        union = tp + fp + fn        if union == 0:            ious.append(float('nan'))        else:            ious.append(tp / union)    valid_ious = [x for x in ious if not np.isnan(x)]    miou = float(np.mean(valid_ious))    return miou, cm def compute_fwiou(cm, ious):    total = cm.sum()    weights = cm.sum(axis=0)    valid_pairs = [(w, i) for w, i in zip(weights, ious) if not np.isnan(i)]    total_w = sum(w for w, _ in valid_pairs)    if total_w == 0:        return 0.0    return float(sum(w * i for w, i in valid_pairs) / total_w) if __name__ == "__main__":    np.random.seed(42)    pred = np.random.randint(0, 3, (128, 128))    gt = np.random.randint(0, 3, (128, 128))    miou, cm = compute_miou(pred, gt, 3)    ious = []    for c in range(3):        tp = cm[c, c]        fp = cm[c, :].sum() - tp        fn = cm[:, c].sum() - tp        union = tp + fp + fn        ious.append(0.0 if union == 0 else tp / union)    fwiou = compute_fwiou(cm, ious)    print("混淆矩阵:")    print(cm)    print("逐类 IoU:", [round(x, 4) for x in ious])    print("mIoU  =", round(miou, 4))    print("FWIoU =", round(fwiou, 4))
目的:实现图像分割中最核心的 mIoU 与 FWIoU 计算,从混淆矩阵出发,逐类统计 TP/FP/FN 并聚合得到最终指标。
  1. cm[i, j] = np.sum((pred == i) & (gt == j))统计“预测为 i、真实为 j”的像素个数,构建混淆矩阵,这是所有后续指标的数据基础。
  2. tp = cm[c, c]主对角线上第 c 类预测正确的像素数,相当于“孩子涂对的那块拼图”。
  3. fp = cm[c, :].sum() - tp第 c 行去掉主对角线的和,是多预测出去的像素,对应“多涂的部分”。
  4. fn = cm[:, c].sum() - tp第 c 列去掉主对角线的和,是漏预测的像素,对应“漏涂的部分”。
  5. union = tp + fp + fn三个数相加恰为并集,IoU 就是 tp/union,与交集除以并集完全等价。
  6. valid_ious = [x for x in ious if not np.isnan(x)]过滤掉真实与预测都不存在的空类别,避免 NaN 污染平均值。
  7. weights = cm.sum(axis=0)按列求和得到每个类别的真实像素总数,作为 FWIoU 的权重。
  8. miou = float(np.mean(valid_ious))对所有有效类别的 IoU 取平均,得到最终 mIoU 分数。

常见误区

误区我直接统计预测正确的像素数占总像素数的比例,这难道不就是 mIoU 吗?模型准确率 98%,指标不是挺高吗?

正解像素精度(PA)被大类别主导,当背景占 95% 时,把行人、汽车全部漏掉也能达到 95% 的 PA。mIoU 逐类平均,每个类别权重相同,小物体一旦漏掉,分数会显著下降。就像全班平均分被一个好学生拉高,看不出其他人的真实水平,必须看“每个学生的分数”(逐类 IoU)才算数。

为何常见:PA 的定义简单直观,字面上就是“正确率”,初学者很容易想当然地把它等同于模型质量。

误区测试集里没有“轮船”这个类别,那我在算 mIoU 时直接跳过它不就行了?这样分数还能好看一些。

正解要区分“真实标注中不存在”与“预测中不存在”两种情况。若某类在真实标注中从未出现,而模型却预测出了该类像素,说明模型产生了“幻觉”,按严格协议应记 0 分。主流实现(如 mmsegmentation)默认对空类记 0,若选择跳过,必须在报告中声明,否则不同模型之间的 mIoU 无法公平比较。

为何常见:跳过空类能让分数“变好看”,不少实现为了省事默认忽略,导致口径混乱。

误区mIoU 和 Dice 系数差不多吧,都是衡量分割重叠程度的东西,用哪个不都一样?

正解Dice = 2|P∩G| / (|P|+|G|) 与 IoU 虽然有单调对应关系,但数值并不相同,IoU 对“过分割”(多涂出去)更敏感。精确率和召回率则是另外两个方向:一个看“预测出来的东西有多少是对的”,一个看“真实的东西有多少被抓到了”,IoU 是综合两者的总账,不能混为一谈。

为何常见:这些指标都描述“预测与真实的重叠”,公式结构相似,缺乏公式推导经验的初学者很容易把它们当成同义反复。

误区在验证集上试了很多次效果都一般,那我直接在测试集上迭代几次,哪个 mIoU 高用哪个,分数变高说明模型确实改进了。

正解排行榜的 mIoU 基于固定测试集,反复用它调参等于把测试集答案“背”给了模型,得到的分数无法反映真实泛化能力。正确做法是把测试集当作“期末考卷”,只能在验证集上反复实验,最终提交一次。就像小美老师不可能把期末答案先给学生讲一遍再考试。

为何常见:追求榜单名次、急于看到“提升”,让人容易对测试集越界使用,这是学术诚信与工程规范的双重红线。

面试题

Q1. 图像分割中,IoU(交并比)的正确含义是什么?

单选题 · easy

  • A.预测正确像素数占总像素数的比例
  • B.预测与真实交集面积除以并集面积← 正确答案
  • C.预测像素面积占真实标注面积的比例
  • D.真实标注面积占预测像素面积的比例

答案:B。IoU 是交集除以并集,即预测与真实重叠的面积占两者总覆盖面积的比例。A 是像素精度;C 是“预测像素占真实像素”的比例,接近召回率;D 接近精确率的倒数关系。就像批改拼图时不能只数涂对的格子,要看“重合区域 ÷ 总区域”。

Q2. 某分割模型在 3 个类别上的 IoU 分别为 0.9、0.6、0.3,其 mIoU 等于多少?

单选题 · easy

  • A.0.90
  • B.0.60← 正确答案
  • C.0.45
  • D.0.30

答案:B。mIoU 是把所有类别的 IoU 加起来再除以类别数,(0.9 + 0.6 + 0.3) / 3 = 0.6。它给每个类别平等的投票权,所以 0.3 这个“小类别低分”不会被 0.9 完全掩盖。

Q3. 混淆矩阵 M 中,M[i][j] 表示的含义是什么?

单选题 · mid

  • A.真实类别 i 被预测为 j 的像素数
  • B.真实类别 j 被预测为 i 的像素数← 正确答案
  • C.预测类别 i 与真实类别 i 的像素交集
  • D.所有类别中第 i 类的像素总数

答案:B。约定行索引 i 为预测类别、列索引 j 为真实类别时,M[i][j] 就是“真实 j 被预测成 i”的像素数。主对角线 M[i][i] 是预测正确的像素,其他位置都是“认错”的像素。混淆矩阵是统计 TP、FP、FN 的基础。

Q4. 评测时某类别在真实标注中从未出现,但模型预测中出现了该类别像素,官方严格协议下该类 IoU 应记为多少?

单选题 · mid

  • A.该类别 IoU 记为 0← 正确答案
  • B.跳过该类别取其余类别平均
  • C.把该类别并入背景类再计算
  • D.自动补一个极小数值避免除零

答案:A。模型输出了真实标注中根本不存在的类别,说明产生了“幻觉”像素,交集为 0,IoU 应记 0 分。跳过会掩盖这种错误,并入背景或补小数值都会扭曲指标口径。严格实现(如 mmsegmentation 默认)会把空类记 0 并给出警告。

Q5. 数据集类别分布极不均衡时,单独报告 mIoU 而无视像素精度的风险是什么?

单选题 · mid

  • A.mIoU 一定低于 PA 且结果不可信
  • B.mIoU 与 PA 的排序必然完全相反
  • C.两者类别权重有别,易忽略背景整体正确率← 正确答案
  • D.像素精度无法衡量任何类别的真实性能

答案:C。mIoU 按类别平均,每个类别同等权重;PA 按像素平均,大面积背景主导。二者评估视角不同,容易给出矛盾结论。最稳妥的做法是同时报告两者,并配合逐类 IoU 明细,才能看清模型是“整体靠谱”还是“偏科严重”。

Q6. 频率加权 IoU(FWIoU)与 mIoU 的关键区别是什么?

单选题 · hard

  • A.FWIoU 只计算背景类别
  • B.FWIoU 用各类别像素占比对 IoU 加权平均← 正确答案
  • C.FWIoU 使用预测面积而非真实面积加权
  • D.FWIoU 不再依赖混淆矩阵

答案:B。FWIoU 的权重 w_c 来自类别 c 的真实像素占所有真实像素的比例,常见类别权重高、对总分影响大。它和 mIoU 互补:mIoU 给小类别平等发言权,FWIoU 反映“常见类型”的整体表现,两者都基于混淆矩阵计算。

Q7. 评估“根据文本描述分割图像”的模型时,下列做法正确的有哪些?

多选题 · mid

  • A.对每个图文样本对分别计算预测掩码与真实掩码的 IoU← 正确答案
  • B.将所有样本掩码合并后再计算一次全局 IoU
  • C.汇总所有样本的逐类 IoU 后取平均得到 mIoU← 正确答案
  • D.直接比较文本嵌入的余弦相似度代替掩码评测

答案:AC。多模态分割评测以“图文样本对”为最小单位逐对计算 IoU,再在所有样本上平均得到 mIoU。A 和 C 正确。B 把所有样本混合会掩盖单样本的严重错误;D 衡量的是文本语义相似度,与“圈得准不准”没有直接关系。

Q8. 关于边界 IoU(Boundary IoU),下列说法正确的有哪些?

多选题 · hard

  • A.只选取预测掩码的边缘像素计算交并比
  • B.对真实与预测掩码边界附近区域计算交并比← 正确答案
  • C.对细长物体的评价比普通 IoU 更敏感
  • D.边界 IoU 结果不一定小于普通 IoU← 正确答案

答案:BD。边界 IoU 同时对预测和真实掩码的边界区域做膨胀,取两者边界附近像素计算交并比,B 对,A 把真实边丢掉了。它对边缘质量敏感,细长物体一旦边界偏差就会被放大,C 对。由于只统计边界带,数值通常与整体 IoU 不同但并非必然更小,D 对。

Q9. 在 PASCAL VOC 等标准分割基准中,官方 mIoU 评测通常要求参赛者怎么做?

单选题 · easy

  • A.提交预测图片由官方统一评测← 正确答案
  • B.自行计算并直接报告最高分数
  • C.将验证集与测试集混在一起评测
  • D.把所有类别像素数相加求比例

答案:A。标准基准的测试集标注不公开,参赛者只能提交预测掩码,由官方服务器统一计算 mIoU。这是为了防止“自己给自己批卷”,保证分数可复现、可对比。验证集仅供调参,绝不能混入测试集。

Q10. 处理类别不均衡的分割任务时,以下哪些策略是合理的?

多选题 · hard

  • A.同时报告 mIoU 与 FWIoU← 正确答案
  • B.使用加权损失配合加权指标← 正确答案
  • C.忽略小类别只优化大类别
  • D.用混淆矩阵分析小类别误差来源← 正确答案

答案:ABD。mIoU 与 FWIoU 分别从“类别平等”和“面积加权”两个视角评估,互补使用更稳健;加权损失能缓解小类别被淹没的问题;混淆矩阵能定位小类别到底是被“漏了”还是“认错成别类”。忽略小类别只会让 mIoU 虚高、实际部署露馅。