资讯动态

从单类标注到多类分割:基于概率转移与EM的背景冲突解法

发布时间:2026/10/14 9:50:48 来源:尧图企业网站定制
刚才看到这个标题的时候第一反应是“又是CVPR论文笔记”但读完这篇之后我觉得很值得单独拿出来写一篇。因为它讨论的问题在工业界实在太常见了——多个数据集各标各的类每个都只有单类标注想合并起来训一个多类分割模型却总被“背景”标签搞到怀疑人生。这篇论文恰好给出了一套很优雅的解法而且思路可以直接迁移到很多实际项目里。这篇笔记我会从问题背景、方法拆解、实验细节到个人思考都过一遍重点讲清楚“背景冲突”为什么是致命问题以及作者是如何用一个概率转移框架把脏标注变成可控建模的。不管你是做自动驾驶、遥感解译还是通用分割这篇文章里的思路都值得反复咀嚼。1. 这篇论文在解决什么问题1.1 被逼到墙角的单类数据集做过语义分割的人都有体会像素级标注是全深度学习领域最烧钱的标注之一。画一个精细的分割掩码一个像素都不能含糊一小时能标完几张图就算不错的了。所以现实里绝大多数字段收集到的数据都是“单类标注”的形式。什么意思呢就是某个项目只关心一个前景类别其余的全部扔进背景。比如一个做行人的项目标注人员只把行人逐像素画出来其他所有东西——汽车、路面、建筑、树木、天空——全部归为背景。另一个项目做车辆检测与分割就只标汽车。单个项目内部这种单类标注完全够用反正模型只输出两个类前景和背景。但一旦你想把多个这样的单类数据集合并起来训练一个能够识别多种类别的统一分割模型麻烦就来了。每个数据集里的“背景”含义完全不同行人数据集的背景里包含汽车和道路车辆数据集的背景里包含行人和建筑。你把它们直接混合训练同一个像素在同一张图里叫背景在另一张图里可能对应另一个模型要学的前景类。这种标注空间的不一致会让模型学到非常扭曲的决策边界。这篇论文解决的就是这个问题给定多个只有单类标注的数据集每个数据集标注一个不同类别如何训练出一个能区分全部类别的多类分割模型并且在测试时不依赖于任何数据集的特定标注协议。1.2 背景标签背后的“暗物质”要理解这个方法得先理解背景标签的本质。在单类数据集里背景不是一个语义类别它是一个“补集”——不属于目标类的一切东西。这里的关键是“一切东西”里可能藏着其他数据集里被精心标注过的类别。我打个比方。你手上有一堆照片每张照片上都只圈出一个人。A组照片只圈“戴帽子的人”B组照片只圈“穿红衣服的人”。现在你想训练模型同时识别“戴帽子的”和“穿红衣服的”。麻烦在于A组照片里那些没戴帽子的区域很可能有人穿红衣服你在A组里把它们标为背景等于告诉模型“红衣服不是前景”。而B组又告诉你红衣服是前景。三次元空间里明明存在的人在两个数据集的背景里互相“隐身”了。这就是论文里反复强调的核心矛盾。更麻烦的是这种冲突不是简单二值的它是概率性的。某个像素在数据集A里被标为背景它可能是类别B、类别C或者真的是背景。我们不确定只知道它不是类别A。所以正确的建模方式不是把背景当成一个确定的“非前景”而是当成一个“未知”的类别集合。作者正是抓住这一点把标注生成过程建模成了一个概率过程用隐变量来估计真实标签。1.3 为什么简单拼接训练行不通有些人可能会想我直接把所有数据集放在一起训让模型自己学行不行答案是会出问题而且问题很明显。第一种做法是直接把每个数据集的标注当作二分类标签硬训。这样背景成了一个大杂烩模型会把各类别之间的差异磨平最终输出的多类概率非常不稳定。尤其当两个数据集采集环境差异大的时候模型会利用数据集本身的特性来偷懒效果更差。第二种做法是只取每个数据集的前景类把其他数据集标注的前景类对应的像素忽略掉。这其实就是对不同数据集有不同的损失掩码。但这样做等于主动丢弃信息而且背景类的定义依然互相污染模型对“背景”的学习是错乱的。第三种常见尝试是先用有完整多类标注的小数据集训一个老师模型然后用这个老师模型在单类数据集上生成伪标签。这个方法的问题是老师模型的类别空间与目标类别空间必须对齐如果目标类别里有某个类只有单类数据老师模型压根没见过这个类怎么蒸馏都是白搭。读到这里估计你也看出来了这本质上是一个标注空间对齐问题。论文作者没有去凑一个“看起来能用的损失函数”而是重新定义了标注生成过程然后用EM迭代去解。下面我来拆解具体的做法。2. 核心方案拆解把标注差异建模成概率转移2.1 重新理解标注是怎么来的论文把每个数据集的标注过程想象成这样一条链路存在一个真实的、完整的类别标签图 y我们看不到然后某个数据集 k 的标注者按照自己的标注协议把 y 转换成了标注图 z_k。这个转换不是确定性的而是服从一个概率分布 p(z_k | y)。具体来说如果 y 恰好等于数据集 k 标注的那个类别记作类别 c_k那么 z_k 一定等于 c_k也就是说这个像素被正确地标为前景。但如果 y 是其他某个类别或者是真正的背景这里记为类别 0那么 z_k 就等于背景因为标注者根本不会管这个像素是什么统一归入背景。这样一来标注过程就可以用一个条件概率表来描述。对于数据集 k只有两类标注输出c_k 和 背景。而隐藏的真实标签有 C 类加一个背景类。从真实标签到标注输出的映射关系本质是一个 C1 行 2 列的概率矩阵。这个矩阵里当真实标签等于 c_k 时标注为前景的概率是 1当真实标签是其他任何一个类别的时候标注为背景的概率也是 1。表面上看这是一个确定性的“坍缩”过程但它引出的逆问题才是重点给定标注为背景真实标签可能是什么这就需要一个逆向推理过程也就是后面的EM框架要做的事情。2.2 把“背景”拆成多个真实的类别既然每个数据集里的背景像素对应的真实标签可能是不同的类别那就不能把它当成一个整体来学习。论文引入了一个关键的建模选择用数据集特定的转移概率来表达这种不确定性。我重新用公式描述一下。假设总类别数是 M包含真正的背景类 0以及各类前景类别 1 到 M-1。对于数据集 k像素标注为背景的概率可以写成p(z_k bg | x) sum_{i ! c_k} p(y i | x) * p(z_k bg | y i)这里 p(y i | x) 就是分割网络对 x 像素的预测概率。当 i 等于 c_k 时转移概率为 0因为如果真实标签是这个数据集的前景类标注者一定会标它。当 i 是其他类时转移概率为 1因为其他所有类都会被归入背景。把这个式子反过来的意思是当我们在数据集 k 里看到一个背景像素时不能简单认为它“就是背景”而是要把网络预测出的所有非 c_k 类别的概率按比例分配给背景标签。网络预测哪个类别的概率高背景里的哪种类别的“嫌疑”就大。这就是从单类标注里挖掘多类信息的核心机制。2.3 网络输出与标注如何互相校准前面的建模提供了一个关键的桥梁网络输出概率 p(y i | x)与给定数据集的标注协议共同决定了观测到的背景标签的分布。反过来说观测到的背景标签也可以反过来修正网络对各类别概率的估计。论文使用期望最大化框架来做这件事。我把流程简化成三步方便理解第一步初始化。用最简单的方式训练一个初始模型损失只计算前景类 c_k 的交叉熵背景梯度直接忽略或按普通二分类处理。这个初始模型虽然对背景类学习混乱但至少对前景类已经有一定的判别能力。第二步E步。固定网络参数根据当前模型输出的各类别概率结合每个数据集的转移规则为每个像素计算一个“软标签”——也就是一个真实类别的后验概率分布。注意这个软标签是对 M 个类别而言的而不是数据集原始的 2 类。第三步M步。用这些软标签代替原始硬标签以标准的多类交叉熵损失更新网络参数。更新完之后再回到第二步循环迭代。这个流程听起来很直白但每一步都有很多细节值得注意尤其是E步里软标签的计算方式直接决定了方法能不能收敛。2.4 一个容易踩的项目设计雷区我在读这篇论文的时候最关心的一个细节是E步计算后验概率时需不需要对每个数据集分别维护一套概率论文的答案是需要因为每个数据集对“背景”的定义不同。一个像素在数据集 A 里被标为背景在数据集 B 里可能被标为前景 c_B。如果设计一个统一的背景类别强行让所有数据集的背景共享同一套标签分布那么冲突依然没有被解决。这就是很多弱监督方法失败的共同原因——它们把不同数据源的“不确定性”想得太简单了以为一个背景类就能囊括所有负样本的多样性。正确的做法是针对每个数据集 k把背景标签展开为 M-1 个候选类别上的概率分布。这个展开系数包括两部分一是网络输出的各类别先验概率二是该数据集标注协议给出的转移约束。两者相乘再归一化就得到后验软标签。这种“数据集感知”的建模方式是这个方法最核心的工程判断。它没有去硬生生地统一标注空间而是承认每个数据集的标注协议是独立且特殊的然后把这种特殊性建模进转移矩阵里。这个思想放到今天依然不过时。2.5 类别转移矩阵的初始化与危险信号转移矩阵不是随便设的。论文里初始化时对每个数据集 k前景类 c_k 对应的转移概率是确定性的其余类别对应的转移概率则初始化为一个均衡的先验——也就是说假设背景区域里各类别出现的概率相等再由网络预测数据去不断修正。这里有个危险信号值得提醒如果初始化时各类别概率完全均等EM算法很容易陷入一个次优平衡——所有类别概率都被平摊模型最后退化成一个只能区分前景和背景的二分类器。这是我在实际阅读时特别注意到的点。论文里虽然对初始化描述不多但背后肯定有处理措施比如对转移概率设置了最小置信度阈值或者在前期迭代中保留一部分原始硬标签的梯度防止软标签噪声过大导致模型漂移。按照我的经验这类隐式避坑设计往往比论文里写出的公式更重要。如果将来你要在自己的项目里复现这个方法务必先在初始化阶段多跑几个配置确保网络在早期迭代中不会坍缩成一个平凡解。3. 训练策略与实现细节3.1 网络架构选择与输出头设计论文使用的基础分割网络比较常规采用类似编码器-解码器结构的语义分割模型骨干网络用的是带空洞卷积的残差网络。输出层是一个 M 类的 softmax 头这一点和普通多类分割没有任何区别。但有个细节值得注意网络的输出类别数 M 必须事先固定而且包含了所有数据集标注过的类别之和加背景。在E步计算软标签的时候这个 M 类的概率向量是基础原料。如果后期想增加新的类别就需要重新初始化整个迭代过程没办法增量式地加入新类。这个限制在实际项目中需要注意。关于输出头我觉得有一个值得借鉴的点网络的最后一层激活值可以同时作为E步先验和M步监督这个设计让网络的两个更新来源保持了“自洽”。既不会出现网络已经被软标签说服、却还用原始硬标签来对抗的情况也不会出现伪标签过度自信、把网络直接带偏的失控。这种一致性设计比分步训练要稳定得多。3.2 迭代流程与收敛判断整个训练过程可以概括为一个双层循环。外层是EM迭代——每轮重新生成软标签内层是网络参数更新——用固定软标签训练若干轮。具体来说每轮EM迭代里先用当前网络跑一遍所有训练图像的预测再把每个数据集的标签与预测概率结合生成软标签最后用这批软标签进行一轮完整的分割网络训练。训练轮数是个超参数论文中提到大概每个阶段训练几十个迭代批次就切换到下一轮。收敛判断的标准一般是软标签的变化量降到某个阈值以下或者验证集上的mIoU类别平均交并比趋于稳定。我之前在类似项目里用过一个更实用的办法每轮EM之后稳定住网络另外挑一个完整标注的验证集做一次评估同时保留历史最好的模型。这样即便EM过程中有所震荡至少不会丢失最优状态。3.3 多数据集混合装填的工程细节数据集的混合采样是一个容易被忽视的环节。简单地把所有数据集的图片倒进一个训练队列会导致两个问题一是不同数据集的样本量差异大占比大的数据集会主导梯度方向尤其是背景部分的梯度二是不同数据集的采样顺序如果不够随机网络会在不同阶段之间“漂移”。论文里的处理思路比较稳妥采用按数据集分组、组间交替采样的方案。每个batch内部可以来自同一个数据集但batch之间的数据集轮换要均匀。这样每个batch的损失函数天然就带数据集特有的上下文避免不同标注协议之间的互相干扰。我在工程实践中的一个经验是每个batch里都混合多个数据集的效果往往不如分组交替。因为不同数据集的图像分布差异很大比如一个全是街道场景一个全是室内场景强行混在一个batch里会让网络的BN统计量乱七八糟反而伤害精度。如果网络里用了批归一化这个问题会更明显。论文里虽然没有详细展开这一点但我在实际工程项目中验证过很多次值得记下来。3.4 关于背景类别的样本量失衡背景像素永远是多类分割里的大头。在单类数据集里背景像素的占比甚至能到95%以上。如果用普通交叉熵训练模型很容易把所有像素都预测成背景因为收益最大。这篇论文的方法天然缓解了这个问题背景像素会被软标签拆解成多个非目标的类别概率梯度不再是单一的“背景方向”而是按照后验概率分布到所有类别上。这就把一个纯粹的类别不均衡问题转化为一个带概率先验的软分类问题。当然如果只用软标签仍然可能不够稳健。我建议在初始化阶段保留部分原始硬标签的监督损失尤其是在网络对前景类判别力还不强的时候。硬标签监督可以拉住模型不让它被过度平滑的软标签带偏。这类细节论文里写得很含蓄但在复现时几乎一定会遇到提前设计好能省很多调试时间。4. 实验效果与结果解读4.1 实验配置的整体印象论文的实验设计很干净。训练数据是多组单类标注的数据集每个数据集只标注一个前景类。测试数据则使用一个包含完整多类标注的数据集这样可以直接用标准mIoU评估。在这种配置下评测本身就有挑战性训练数据和测试数据的标签空间不同而且训练数据里没有任何一张图带有多类真值。能做到从单类标注无中生有地学出多类分割实验设计本身就很有说服力。我记得论文里比较了几个基线方法包括纯二分类训练、把多个单类数据集合并后按多类交叉熵训练、以及用伪标签进行多阶段训练。这些基线方法在多类测试集上的mIoU都不理想而论文的方法明显领先。这个结果并不意外因为基线方法要么没有处理背景冲突要么依赖不稳定的伪标签。4.2 消融实验到底回答了什么问题消融实验部分最有价值。作者主要做了四组对比去掉EM迭代、去掉数据集特定的转移概率、使用统一的背景标签建模、以及使用完整方法。每一个消融都指向一个关键设计。去掉EM迭代等价于只用初始化模型结果比完整方法差很多尤其是在同属“背景”却语义相近的类别之间比如“公交车”和“卡车”这种。这说明EM迭代对类别的精细化分离至关重要它让模型有机会从背景区域中重新挖掘出被忽略的类别证据。去掉数据集特定转移概率改成统一背景建模结果也会有明显下降。这个结果直接验证了我在前文强调的观点不同数据集对背景的定义差异太大用同一个背景标签去统一建模本质上仍然逃不开标注冲突。我也注意到完整的消融对比中某些类别增益特别大往往是那些在很多数据集中都作为背景出现的类别。这其实是一个很有意思的发现背景区域才是信息量最大的地方。4.3 方法边界在哪里任何方法都有边界这篇论文也不例外。最明显的限制是如果某个类别在所有单类数据集的背景区域里从未出现过那这个方法自然学不出来。比如所有数据集都在白天的城区拍摄你很难期望模型学到夜间场景的语义。这类问题不是方法本身能解决的而是数据覆盖面决定的。另一个边界是类别数量。随着类别增多背景转移矩阵的参数量也会增加EM迭代收敛会变慢。如果类别数量超过几十个概率估计的方差会变大对训练数据的消耗也会陡增。论文面向的场景主要是语义类别不算特别多的情况放到大规模开放词汇分割里还需要继续扩展。另外要注意的是方法假设每个数据集的背景区域与前景区域之间可能存在语义重合但这个重合概率需要在训练过程中动态估计。如果两个数据集的拍摄场景差异极大比如一个在室内一个在深海背景里根本没有相互重叠的类别那转移矩阵的估计就会失效方法会退化成普通的单类训练。5. 个人学习体会与扩展思考5.1 这篇论文真正的贡献点在哪里读完整篇论文我最大的感受是它把“标注不一致”这个问题从工程陷阱提升到了数学建模的层面。过去遇到多个数据集标注空间冲突大家的第一反应是数据清洗、类别映射表、手动调整损失函数权重。论文的做法完全不同不去洗数据而是直接对标注生成过程建模然后通过隐变量来还原真实标签。这种“把消耗标注格式问题转化为概率推断问题”的思路是值得收藏的思维模型。可以说这篇论文是弱监督分割和半监督分割研究里一个承上启下的节点。它降低了多数据集联合训练的门槛让带标注的单类数据可以像积木一样组合起来不需要担心彼此冲突。5.2 直接用到实际项目中的两个启发第一个启发是标签转移矩阵的复用价值。在实际项目中我们经常需要同时利用多个历史项目积累的单类分割数据来训练新的多类模型。这篇论文提供了现成的框架只要为每个历史项目建立一个转移矩阵就能在EM迭代中统一建模。我建议迁移时保留一个小的完整标注测试集来评估mIoU因为历史项目之间可能存在重叠类需要验证。第二个启发是对“背景类”的重新理解。很多兄弟团队做分割模型时习惯于把背景当成一个真的类别来建模。而这篇论文提醒我们背景不一定是同质的尤其在多数据集联合训练中背景其实是一个待拆解的混合体。如果你面对的项目里不同来源数据的背景含义差异很大不妨试着把它拆成概率分布来做而不是强制模型学习一个统一的背景特征。5.3 与伪标签和半监督方法的横向对比这篇论文的方法和现在流行的自训练、半监督分割有异曲同工之处都依赖模型自身的预测来生成额外的监督信号。区别在于自训练方法只用无标签数据避免使用可能错误的预测这篇论文则用数据集特定的转移矩阵来约束预测结果本质上相当于给伪标签加了一层“标注协议过滤器”。所以它比普通的自训练方法更稳健因为它不会盲目相信网络输出而是结合了每个数据集的实际标注规则。这个“标注协议过滤”的思路即使不做完整EM迭代也可以单独用在你的半监督管线里。比如用老师模型生成软标签时先剔除那些与数据集标注规则冲突的预测结果伪标签质量会显著上升。5.4 后续值得继续探索的方向一个自然延伸是动态的类别发现。论文固定了类别空间但现实中你永远会发现新类别。如果能让转移矩阵的类别维度也跟着数据扩展自动增长就能逼近“标注一点、增量全知”的目标。类似方法在持续学习领域也有一些探索可以和这篇结合来看。另一个值得探索的方向是把它和多模态信息结合起来。比如文本描述给定的单类标注可以参考图片与文本的一致性来辅助推断背景中其他类别是否出现。这类跨模态信息能提供比纯视觉更稳定的转移先验可以缓解EM在低文本级别上的崩溃问题。最后说点个人体会。看完这篇论文之后我在自己负责的某个数据整合项目里把“背景类别概率化”这个思路借鉴了过来。虽然很难完全复现论文里的EM细节但哪怕只是把背景按多个候选类别的概率拆解开最终的mIoU都提升了好几个点。这类小而关键的思想比一堆花哨的网络结构优化实用得多。我建议有类似项目的人在动手清洗数据之前先花一天时间读透这篇论文观察你的背景标签是否本身就在告诉你多类信息——读懂了背景离读懂整个数据集就不远了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑