恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
显著目标检测深度学习演进:从传统方法到Transformer
首页
资讯中心
/
显著目标检测深度学习演进:从传统方法到Transformer
显著目标检测深度学习演进:从传统方法到Transformer
发布时间:2026/10/14 17:19:14
第一次真正去抠“显著目标检测”这个词是在一次组内分享之前。当时我心里想的是目标检测我熟逐像素分割我也熟但“显著”这两个字总觉得有点虚。后来把从传统方法到深度学习时代的代表性论文按时间线啃了一遍才发现这个任务站在一条很有意思的交叉线上——它不关心物体是什么类别只关心“哪个东西最扎眼”。显著目标检测Salient Object DetectionSOD的标准定义很朴素给定一幅图像让模型输出一张与输入等尺寸的概率图图上每个像素的值代表该位置属于“显著目标”的可能性值越高说明越接近人类视觉优先注意的位置。这篇文章就是我的学习笔记整理版重点放在深度学习时代的方法演进上传统方法为什么走不到底、深度学习怎么把这个任务真正端到端地解掉、弱监督和Transformer各自改变了什么、以及我读论文和复现时踩过的坑。如果你正准备入门这个方向或者做图像预处理、内容感知裁剪、图像压缩这类下游应用这份笔记应该能帮你省掉不少自己摸索的时间。1. 显著目标检测到底在解决什么问题1.1 任务定义输出一张逐像素的“显著性图”SOD的输入是一张RGB图像输出是一张和输入等大的显著性图每个像素值表示该点属于显著目标的概率。训练时使用的监督信号通常是人工标注的二值图显著区域为1背景为0。注意这里输出的是“逐像素的概率”不是包围框也不是类别标签——这一点决定了后续所有的网络设计它本质上是一个密集预测任务和语义分割在输出形态上一致只是预测的目标完全不同。分割要知道每个像素属于哪个语义类别比如“第3类是人、第7类是车”SOD不关心这些它只回答“这里是不是显著”。所以SOD的模型天然是类别无关的它学的是一种更底层的视觉显著性规律而不是某个具体物体的外观。这也是为什么SOD很难直接拿目标检测模型改一改就交差——检测模型依赖“候选框类别打分”的范式对完整轮廓和像素级概率没有天然的处理能力。1.2 视觉注意机制给了这个任务什么底气我们人类看一幅复杂场景时并不会把画面里的信息均匀接收。视网膜中央凹的分辨率远高于周边视野眼球需要不停扫视把高分辨率区域对准感兴趣的位置。这条视觉通路天然决定了场景里总有一部分区域会被优先处理。这种优先性来自两个方向——一个是自底向上的、数据驱动的“弹出效应”比如颜色、亮度、纹理和周边差异很大时物体会自动吸引注意另一个是自顶向下的、任务驱动的主动搜索比如带着“找钥匙”的目标时人会主动注意金属色的小物体。SOD的设定更接近前一种情况没有具体任务约束只看图像本身时哪些目标会“自动弹出来”。这也是为什么很多早期方法会刻意模仿视觉通路里的中心-周边结构到了深度学习时代这个隐式的先验被直接学进了网络参数里不再需要手工设计。理解这一层背景再看后面各种网络模块的动机就会顺很多。1.3 别和几个邻居任务搞混刚开始读文献时最容易混淆的是下面这一组任务我花了很长时间才分清楚任务输入输出关键点显著目标检测单张图像逐像素显著性概率图类别无关、目标级、边界完整目标检测单张图像包围框 类别需要类别不需要精确轮廓语义分割单张图像逐像素类别标签需要类别显著性无关注视点预测单张图像稀疏热力图/注视点分布关注人眼会看向哪里不是完整目标其中“注视点预测”和SOD名字上都带“显著”最容易混淆。前者在学术文献里通常指眼动预测输出的是离散视觉焦点的热图SOD输出的是完整目标区域要求边界干净。很多下游应用内容感知裁剪、压缩需要的是后者这种整体区域如果直接把注视点热图拿来当显著图用效果会很差因为注视点只告诉你“眼睛看哪儿”没告诉你“这个物体完整占据哪些像素”。2. 深度学习入场前传统方法为什么走不到底2.1 手工特征时代的三条路线传统方法大致可以分成三类。第一类是从神经科学借来的生物学启发模型先抽取颜色、亮度、朝向等多通道特征在不同尺度上做中心-周边差分得到每个通道的“活跃度图”再做跨通道归一化融合成最终的显著性图。这类方法的最大贡献是把“中心-周边对比”这个概念带进了计算机视觉至今你仍能在很多深度学习网络的监督模块里看到它的影子。第二类是纯底层的对比度方法把图像分割成超像素或小区域计算某区域与周围区域、或者与整幅图在颜色直方图上的差异差异越大越显著。这类方法在背景干净、目标颜色突出的图片上效果相当不错实现也简单我在早期做工程原型时就用过类似思路属于最省事的一档基线。第三类开始引入“先验”核心是基于背景先验的图模型方法先假设图像四条边界上的区域大概率属于背景把它们作为背景种子再让显著性在像素图上通过图结构传播最后每个点的得分就是显著度。这个思路在当时非常有效因为绝大多数自然图像里显著目标确实很少紧贴边界。加上中心先验假设目标偏中间、对比先验目标与背景有差异这一套手工规则在当时已经算得上“智能”但也埋下了后面崩塌的伏笔。2.2 先验为什么是一把双刃剑传统方法看着合理一放到复杂场景里就露馅。背景先验最怕的是显著目标本身碰到图像边界——很多摄影构图里人物、建筑就是顶到画面边缘的此时边界区域里藏着一部分显著目标把它当成背景种子传播出去整个目标的显著值都会被拉低。中心先验则默认目标在画面中央遇到偏离中心的显著目标同样失效。再加上颜色对比、纹理差异这些手工特征在“目标纹理和背景非常接近”的图像上几乎没有区分度无论怎么调参数都很难同时把这几类场景处理好。更深层的问题在于这些方法没有“理解”图像内容的能力它们做的是低层特征的相似度计算。目标是一辆车还是一个人是与场景毫无关联的新奇物体还是摆放位置突兀的同类物体——这些高层语义完全进不了模型。所以传统方法的上限被手工特征焊死了这跟后来深度学习带来的“自动学习特征”是维度上的差距。我当时拿一批背影杂乱的街拍图去测传统算法的感受是第一眼觉得“有点意思”放大看边界、多目标、遮挡情况基本全线崩溃。2.3 两笔遗产值得记住传统方法并没有被完全推翻它留下了两笔重要的遗产。第一笔是“多尺度计算”的思想。早期生物学模型通过图像金字塔在不同尺度上计算对比度这个思想在深度学习时代演变成了多层特征金字塔融合几乎任何一个现代SOD网络都在做类似的事情只是尺度更多、特征换成自动学出来的了。第二笔是背景/边界先验本身。深度学习模型虽然不再依赖手工先验但很多后人把“背景”和“边界”作为额外的监督信号或网络分支重新注入了深度模型比如专门加一个边界预测分支、或者在损失函数里惩罚预测区域和图像边界的重叠度。先验从“写死的规则”变成了“网络自己学着约束自己”这是它最合适的归宿。3. 深度学习时代的主干线路编码器-解码器、注意力与边缘监督3.1 先解决“语义粗、细节糊”的矛盾多尺度与多层特征融合深度学习要想端到端解决SOD第一道坎是特征表达。用分类网络当主干时浅层特征分辨率高、边缘细节保留得好但语义弱深层特征语义强、能判断“这是不是显著物体”但分辨率低、边界糊。SOD偏偏两者都要既要高层语义判断“该看哪里”又要低层细节保证“边界清爽”。早期方法一上来走了一段弯路把图像切成超像素或小图块用分类网络对每个图块打分再把得分聚合成显著性图。这种做法表面上是“用深度学习”实际上还是图块级别的分类有个致命问题——一个图块的显著性恰恰由它周围的环境决定切成块之后等于把上下文切掉了。这就像不看灯光和舞台单看一个演员的证件照你根本判断不出他是不是全场焦点。这个路线很快就被全卷积网络风格的结构取代了。过渡到端到端之后主流的解法基本可以总结成三类跳连结构编码器不同阶段的特征通过跳跃连接直接送到解码器对应层让解码器既有高层语义引导又有低层细节补充。这是最有生命力的骨架设计几乎成了后续所有工作的默认底座。渐进式细化先把深层特征上采样得到一张粗糙的显著图再逐级和更浅的特征融合从粗到细地修正预测。这类设计符合“先定大区域、再描边”的直觉也方便在不同阶段加入监督。多尺度上下文模块用不同膨胀率的空洞卷积或金字塔池化在不降分辨率的前提下快速扩大感受野让每个位置看到更大的上下文。对小目标和巨大目标这两类极端情况尤其有用。实操层面有一个很值得记的细节主干的分类预训练参数到底冻结还是微调效果差异很大。冻结能省显存和训练时间但显著图质量通常不如微调。我最初为了省时间把主干冻结了结果在复杂背景测试集上测出来的F值比微调版本低了将近3个点后来改成先微调整个网络再把任务层单独精调才把分数追回来。如果你的显存允许别省这一步。3.2 注意力机制让网络学会选择性聚焦等特征融合成为标配后大家关注点开始转向“怎么让网络更聪明地决定看哪儿”这波的核心是注意力机制。在SOD里它的典型用法有这么几种空间注意力学习一张权重图告诉后续层“这些区域更重要”。直观理解就是网络内的焦距调节。通道注意力重新校准每个特征通道的重要程度决定该多依赖纹理通道还是语义通道。反向注意力这招很有意思。常规注意力是“网络觉得哪里重要就加强哪里”反向注意力则是先产生一张粗显著图把已经被判定为高置信度的区域擦掉再强迫网络去关注剩余不清楚的区域。相当于考试做完一遍后遮住已经确定写对的题专门回头检查漏掉的部分。这个思想对多目标、目标部分被遮挡的场景特别有效很多方法靠它补回了大量“漏检的尾巴”。渐进式注意力在解码器每一级都用注意力模块把上一级的信息再提炼一遍实现逐层修正。我的体会是注意力在SOD里真正的作用不是锦上添花而是把发散的多尺度特征收敛到显著目标所在的空间位置。没有注意力时多尺度融合容易出现背景响应过强的问题——某些背景纹理可能刚好在一个尺度上像目标加上注意力之后网络会学着用高层语义压制低层里和显著目标无关的强响应。调试时你可以把注意力权重图可视化出来看看通常能直接看出网络“在犯什么傻”。3.3 边界监督与混合损失边缘是SOD的命门像素级二分类最直接的损失是二值交叉熵BCE但只用BCE训练出来的显著图普遍边界模糊、小块结构容易错。原因不复杂BCE逐像素独立计算完全忽略了像素之间的空间关系网络没有动力去保持边缘的一致性。这就好比一个人背单词时只盯单个单词是否拼对完全不看句子通不通顺。后来这个方向基本形成了“损失函数三件套”的共识BCE或加权BCE保证每个像素的预测倾向正确是整个训练的底子。IoU损失不逐像素算误差而是看预测显著区域和真值显著区域的重叠率。网络优化时等于把“完整覆盖目标”和“别把背景卷进来”同时作为目标区域级的错判会被更直接地惩罚比BCE更契合了“区域完整”这个需求。结构相似度SSIM损失在局部窗口里比较预测和真值的亮度、对比度、结构三个维度能抓住边缘附近的局部结构一致性。把三种损失按权重组合起来用边界质量会有肉眼可见的提升但权重怎么配需要自己在数据上调不同论文给出的组合差异很大。除了损失另一个常见做法是在解码器旁边接一个边缘预测分支用真值图导出的边缘做监督让网络“被迫”显式学习边缘表征测试时再把边缘信息倒灌回主分支。这里有个工程上的提醒早期论文喜欢在最后加一步CRF后处理锐化边界现在的绝大多数工作已经不用CRF了。一是深度模型输出本身就够干净二是CRF在推理时很慢对实时应用非常不友好。如果你复现老论文发现“差一口气”先别急着加CRF优先检查训练时有没有用混合损失。4. 监督信号从哪来全监督、弱监督到无监督的演进4.1 像素级标注有多贵全监督就有多受限制深度学习SOD在很长一段时间里都是全监督主导也就是每个训练样本都要有人工逐像素标注的显著目标掩膜。这种标注的质量还依赖标注者对“显著”的理解不同人画出来的边界会有差异需要多轮质检才靠谱。所以主流数据集里大规模那批也只有万张量级和分类任务动辄上百万张的数据完全不是一个量级。监督数据贵自然就有人开始琢磨能不能只用图像级标签、甚至完全不要标签把SOD模型训出来这个想法放在整个视觉大背景下也不陌生——语义分割领域同样被标注成本困扰了很久弱监督分割、点监督分割这些路子都是同一个动机长出来的。4.2 从弱信号到密集预测伪标签与自训练弱监督SOD的典型打法分三步走第一步拿到种子。用图像级类别标签训练一个分类网络通过CAM这类工具把“哪些位置能激活某个类别”变成一张粗糙的空间响应图。它很模糊只能标出物体的判别性部位标不出完整轮廓但好歹是像素级信号的雏形。第二步把种子变稠密。把CAM图和传统显著性方法的输出结合起来——传统方法的对比度、背景先验在局部区域上是可信的——再通过区域生长或聚类这类的操作把响应扩散到整个显著目标上得到相对完整的伪标签。第三步用伪标签训练并迭代。让SOD网络在这份伪标签上训练然后把网络预测中那些高置信度的样本重新筛出来当作标签训练下一轮也就是自训练。这条路真实可行。我在某个模拟项目X上试过只给它图像级标签初代伪标签相当粗糙很多目标的轮廓都是歪的但迭代两轮之后SOD网络已经能学会修正掉不少伪标签里的噪声区域最终生成的显著图比初始伪标签干净得多。这说明深度模型在拟合自身预测的过程中实际上起到了“标签去噪”的作用。完全无监督的做法也类似只是把第一步的CAM换成了传统显著性算法当“老师”让深度学生网络去学学生再反哺老师。这里有一个反直觉的结果学生网络往往能超过老师因为深度模型学到的特征比手工特征鲁棒得多。4.3 现实差距与性价比弱监督SOD到底能不能打以我看到的几个代表性工作来估计在常见基准上好的弱监督方法能达到全监督方法的九成左右MAE指标上的差距更小但一旦测试集里出现“显著目标很小、背景很乱”的困难样本弱监督方法还是会明显发虚本质是伪标签在困难样本上质量不行模型学不到足够强的判别特征。如果让我给实际项目一个建议别急着全线转弱监督。更划算的路线是用少量高质量像素级标注哪怕只有几百张加上弱监督预训练做冷启动让第一版模型去标注大量简单样本人工只审阅困难样本省下来的标注成本非常可观。这也是我在实际工作中觉得SOD方向最有工程价值的一条经验。5. Transformer进来之后全局建模带来的范式变化5.1 CNN的一个构造性软肋到这里为止的SOD模型骨架基本都是CNN。CNN靠卷积核在空间上滑动聚合信息要看到“全图”就得层层堆叠扩大感受野。但显著目标检测恰恰很吃全局信息一个人站在杂乱市场里单独看局部纹理根本判断不了他是否显著必须把整幅图的上下文编码进来才能得出“这是最突出的目标”这个结论。膨胀卷积、金字塔池化都是在救这个急可要么计算量上去了要么只是近似全局长距离像素之间的依赖关系始终不是CNN的显式能力。这就给Transformer留了舞台。5.2 ViT做SOD的真实收益与代价把视觉Transformer结构搬到SOD后最直观的变化是编码器每一层都在做全图范围的自注意力任意两个位置可以直接交互全局上下文从“近似拿到”变成了“结构上就有”。在复杂背景抑制上这个收益尤其明显——背景里那些和显著目标纠缠不清的局部纹理很容易骗过CNN的局部感受野但自注意力能通过全局对比判断出哪些是干扰。不过代价也很实在。第一是训练数据需求变大纯Transformer结构在只有万张级训练集上容易过拟合很多人不加强数据增强根本训不动第二是计算复杂度全图注意力是平方级的原图分辨率根本跑不动早期模型都得把输入缩到224或384这跟SOD要求的“边界精细”天生有点矛盾第三是位置编码的迁移问题测试时如果输入分辨率和训练时不一致注意力里的位置信息会错位显著图可能冒出奇怪的网格感。提示用视觉Transformer做SOD输入分辨率一定要固定推理时最好和训练完全一致否则先别怀疑模型坏了先检查分辨率。5.3 混合架构成了主流原因很现实目前这个方向的共识其实是混合架构用CNN或分层式Transformer负责从细到粗提取局部细节再在几个关键阶段插入全局注意力模块做长距离建模解码器仍然沿用CNN式的逐级上采样。这样既拿到Transformer的全局视野又保住局部纹理和边界精度训练开销也压得住。我个人的复现感受是如果手里只有单卡且时间紧不建议一上来直接上大规模纯Transformer方案。先拿一个轻量CNN主干加一个全局注意力模块做性能基线往往花更少的代价就能追平很多花哨结构。等基线稳定了再考虑把编码器逐步换成分层式视觉Transformer。这种“从馒头到蛋糕”的升级路线比一上来就挑战最难配置要靠谱得多。6. 数据集、评测指标与“不可复现”的陷阱6.1 数据集是怎么一步步“变难”的SOD的数据集演进有一个很清晰的趋势从简单到复杂。最早一批只有几百张图片目标往往居中、单一、背景干净标注也相对好做后来出现了上千张、包含多个目标、目标贴边或者背景杂乱的数据集专门用来考验模型的鲁棒性。再往后大家意识到训练集规模才是模型性能的天花板开始构建上万张的大规模训练集并固定一套“在该训练集上训练、在其它公开测试集上评估”的协议方法之间的比较这才有了意义。我在用这些数据时最在意的两个坑一是训练集和测试集的分布重合。有些数据集本身是从同一个源头收集的直接拿它又训又测指标会虚高。二是“显著”这个标注本身就带主观性不同标注者画的边界差异可能相当大。训练时如果发现损失降不下去先去看看是不是某些样本的标注本身存在分歧。这两个问题经常不会写进论文的实验章节但都实打实影响复现效果。6.2 四类指标各看什么各有什么盲区评测SOD有一套约定俗成的指标每个指标的视角不一样读懂它们之间的差异很重要PR曲线与F-measure把显著性图按不同阈值二值化算每个阈值下的查准率P和查全率R画出PR曲线F-measure是两者的加权调和平均加权系数习惯取β方等于0.3让查准率占更重权重因为在该任务里“把背景误标成显著”的代价通常比“漏掉一点显著目标尾巴”更高。现代论文普遍用自适应阈值也就是取每张显著性图的平均像素值当阈值再算平均F值。这里有个小坑早期文献用固定阈值两种口径得到的数据不能直接对比。MAE显著图和真值之间逐像素绝对误差的平均。它最直观但对大图小目标非常不敏感——当背景占绝大多数且被正确预测为0时MAE天然很低目标区域即使错得离谱也可能被淹没。我见过MAE很漂亮、实际显著目标几乎完全漏掉的图所以MAE一定要配合结构类指标一起看。S-measure衡量预测显著图和真值之间的结构相似度分成目标级结构和区域级结构两部分。它对“整体形状对不对”很敏感是判断“这张图画得像不像样”的好指标。E-measure把局部像素统计和全图均值统计融合进一个公式同时兼顾局部和全局是几个指标里近年被认为最具区分度的一个。真正的经验是别只盯一个指标。指标之间经常互相“打架”——A方法F值高但MAE差说明它可能是位置对了但边界糊B方法MAE好但S-measure差很可能是背景压得干净但目标形状歪了。两个都看了才能判断一个方法真实的状态。6.3 为什么很多高分论文复现出来对不上凡是复现过SOD论文的人大概率都经历过“按论文描述复现指标差一大截”的崩溃。据我观察最常见的原因有这么几类训练协议不一致用了哪个主干预训练版本、优化器超参、批大小、图像增强策略论文正文里一笔带过的地方差异可能巨大。多尺度测试没写清楚推理时把输入缩放成多个尺度分别预测再平均是普遍存在的“隐性涨点”但很多论文只在实验章节提一句甚至不提。复现时按单尺度跑自然差一截。后处理没交代少数方法其实依赖CRF或形态学操作做最后的边界清理但主流程示意图里看不出来。随机性与早停规则固定随机种子、选择最佳checkpoint的规则也会影响最终数字。我对付这种问题的办法是先复现一个公开实现齐全、口碑好的基线确认自己的训练和评测流程是通的再去动新方法的模块。流程通了才能分辨新方法带来的提升是真实的还是实验噪声。7. 收个尾如果让我重学一遍我会这样读综述7.1 先搭时间线再抠模块我第一次啃SOD论文是沿着发表时间一篇篇读的效率很低。后来发现更有效的方式是先按时间线建立坐标传统方法、早期深度端到端、注意力与边界细化、弱监督、Transformer与混合架构。每个阶段只精读两三篇代表作把它们在特征提取、特征融合、监督设置、损失设计四个维度上拆开比较很快就能看出这个领域是怎么一步一步走到今天的。7.2 复现一个基线的优先级高于读十篇论文纸上得来终觉浅在SOD这个领域体现得特别明显。很多论文的卖点其实是一套组合拳换了主干、改了损失、加了注意力、还用了多尺度测试。你不拆开做变量对照根本不知道涨点来自哪里。我的建议是先复现一个有公开实现的成熟基线跑通“训练评估”全流程然后逐个替换模块看指标变化。这个习惯会给你带来“什么才是有效涨点”的直接体感比读一百页相关工作都管用。最后再分享一个让我印象很深的实践细节有一次我把训练集里的标签直接拿来统计发现相当一部分真值图在人工标注者之间本身就存在明显分歧。后来我再看到某些“在某数据集上碾压一切”的结果第一反应就不再是羡慕而是去查它的训练集、评测协议和代码。做研究也好做工程也罢能复现出来的涨点才是真涨点。这份笔记先记到这里后面如果继续往下啃视频显著性检测和RGB-D显著检测我再回来写第二篇。