尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

分割方向论文精读全流程:从语义分割到点云实例分割的实战拆解

分割方向论文精读全流程:从语义分割到点云实例分割的实战拆解 搞学术研究的人尤其是刚进CV计算机视觉这个坑的同学十有八九都逃不过“分割”这道坎。语义分割、实例分割、全景分割光是搞清楚这几个词的区别就够喝一壶的更别提那些层出不穷的新框架、新Loss、新trick。我自己刚读研那会儿看分割论文完全是“看天书”的状态一篇论文啃一周合上PDF还是说不清楚作者到底改了什么。后来被导师逼着做了大半年论文复现又自己动手写了十几篇精读笔记才算摸到点门道。这篇东西不是什么“论文共读”活动的广告就是单纯想把我自己总结的这套“分割方向论文精读”的完整流程和思考方式掰开揉碎讲清楚。标题写的是论文精读但我更想把它定位成一套“分割方向的科研入门自查手册”。无论你是刚拿到语义分割任务不知道怎么下手还是已经在做点云分割、实例分割但总觉得读论文没效率这篇文章应该都能给你一些能直接用的招。我会从为什么你读不懂分割论文、这个方向到底在解决什么问题、一篇论文拿到手应该按什么顺序拆解到代码复现时那些没人明说的坑一条线捋下来全是实操层面的经验。1. 为什么你总觉得读懂了分割论文但一动手就废先说个扎心的现象。我见过不少同学读论文的时候觉得“作者思路很清晰”“方法也不复杂”但真到要自己讲给别人听或者要基于这篇论文做个实验的时候就开始支支吾吾。问题通常不出在理解能力上而出在你根本不知道论文里哪些信息是真正重要的哪些只是包装。分割方向的论文尤其是顶会论文普遍套路是把一个不算特别复杂的思想用一整套看似严密的数学公式和消融实验包装起来。比如最典型的很多语义分割论文本质上就是在HRNet、ResNet这些骨干网络上加一个注意力模块或者在特征融合方式上做文章。但论文会把这个模块描述成“自适应上下文感知聚合模块”配上三页公式。如果你第一次读论文就陷进公式细节里很容易把最核心的改动给漏掉。我自己精读分割论文的第一个习惯是先搞清楚它属于哪个任务子方向再判断它的核心贡献点是什么级别。分割这个方向看着大但论文的核心贡献通常逃不出这几类贡献层级具体表现典型例子网络结构设计换了骨干网络、设计了新的特征融合模块U-Net、PSPNet、DeepLab系列训练策略/损失函数针对类别不平衡、边界不清晰设计新LossDice Loss一系列变体、Ohem Cross Entropy注意力/上下文建模引入全局上下文、通道注意力、空间注意力DANet、OCNet、Non-local数据策略/后处理半监督、伪标签、CRF后处理、Test-Time Augmentation各类半监督分割工作新任务/新范式把分割转成其他问题或者提出了新的分割任务MaskFormer掩码分类范式、PointNet点云分割有了这个判断框架再去读论文就不容易“一视同仁”。你会发现一篇结构创新和一篇Loss创新的论文你精读的侧重点完全不同。结构创新你要盯住特征图的尺寸变化和感受野变化Loss创新你要盯住梯度回传的路径和它对难样本的影响。再说一个常见的认知误区。很多人以为“精读”就是把论文从头到尾每个公式都推导一遍。但分割方向的论文公式多不代表信息量大。像很多上下文模块的公式本质就是几个张量运算的拼凑你把维度变化写清楚比背那个公式有意义得多。我理解的精读是把一篇论文拆成你也能复现、能向别人讲清楚、能移植到自己任务上的信息块而不是做全文翻译。2. 分割方向全景地图从二维图像到三维点云你得先知道自己站在哪既然要精读分割方向的论文脑子里先得有张地图。分割不是一个单点技术它是一组任务的总称。而不同任务之间虽然底层的深度学习原理相通但问题的难点、评测指标、常用数据集差异非常大。如果地图没建立起来你很容易用语义分割的思路去套实例分割的论文读什么都觉得别扭。2.1 二维图像分割里的三个核心子任务二维图像分割是入门的起点也是大部分论文的试验田。这里头有三个经常被拎出来比较的词语义分割Semantic Segmentation、实例分割Instance Segmentation、全景分割Panoptic Segmentation。语义分割解决的是像素级分类问题就是把图像里的每个像素都打上一个类别标签。比如一张街景图人、车、道路、天空都按像素分出来。但它不管同类别里的个体差异所有车都算“车”这一类。经典的FCNFully Convolutional Network是开山之作后来的U-Net、DeepLab系列都是这个方向的里程碑。实例分割则更进一步它不仅要给像素分类还要把同一类里的不同个体区分开。比如图像里有三辆车实例分割要把车1、车2、车3的像素分别抠出来。这个问题比语义分割难不少因为模型既要“分类”又要“区分个体”。YOLO系列里的YOLOv5-seg、YOLOv8-seg还有更早的Mask R-CNN都是把目标检测和分割结合起来的典型方案。全景分割是前两者的结合要求对图像里每个像素既给出语义类别又区分实例。像街景里的“人”这种可数物体要区分个体而“天空”“道路”这种不可数物体只要语义类别就行。这个任务更贴近真实场景理解但也更复杂。读论文的时候我建议是先从语义分割入手把骨干网络和特征金字塔这些基本功打牢再去看Mask R-CNN这类实例分割框架就顺了。反过来的话很容易被两个分支的网络结构绕晕。2.2 点云分割、地面分割与“占位栅格”这条容易被忽视的技术线热搜词里出现了“dbscan用于点云分割”“古月居occ地面分割”以及“点云分割”这个词说明很多读者已经不是停留在二维图像了。点云分割是自动驾驶、机器人感知里的核心问题它面对的输入不再是规则的图像网格而是一堆无序的三维点处理方式跟图像分割完全不同。点云分割里有一个经典组合先地面分割、再非地面聚类。地面分割把地面点云去掉以后剩下的障碍物点云就可以用DBSCAN这类密度聚类算法做实例级别的分割。古月居的occ地面分割我印象里是讲Occupancy Grid Map占据栅格地图的做法是把三维空间投影到二维栅格上再通过栅格高度差等信息判断哪些栅格属于地面。这套东西虽然不像深度学习分割那么“时髦”但在实际工程里极其常用因为它轻量、可解释、实时性高。精读这方面的论文我会额外关注它们的数据预处理和坐标系变换这往往是论文中最不显眼但最决定成败的部分。很多点云分割论文的公式并不复杂但如果你不知道它输入的是体素Voxel化后的点云还是原始点云不知道它用的坐标系是雷达坐标系还是车体坐标系复现起来就是灾难。2.3 别混淆的业务场景字符串分割、局域网分割、渔网分割、内电层分割和DataX字段分隔符热搜词里还混了一批完全不属于计算机视觉方向的“分割”我猜可能是很多做开发、做硬件、做 GIS 的人也在搜“分割”这个词。这里我顺带做个区分免得有读者点进来发现货不对板。字符串分割是编程里的基础操作按指定分隔符把字符串拆成数组。二层交换机实现同一网段分割局域网属于网络工程范畴核心是VLAN隔离广播域。渔网分割shp是GIS领域的事把渔网矢量数据按范围切分成多个shapefile文件。嘉立创内电层分割是PCB设计里的电源层网络划分。DataX字段分隔符则是数据同步工具里配置列分隔符的问题。这些“分割”和论文精读里的图像分割完全是两码事但它们的共同点是都涉及“把一个整体拆分为有意义的组成部分”这一抽象逻辑。我在读跨学科内容的时候发现这种抽象层面的共性其实挺有意思——理解了一个领域的“分割”再去理解另一个领域的“分割”思维迁移会很快。3. 拿到一篇分割论文我建议你按这个顺序拆解前面铺垫了背景现在进入正题一篇具体论文拿到手里精读的流程应该是怎样的。我不是那种主张“从头到尾读三遍”的人太虚了。我自己的习惯是先把论文拆成几个独立的信息块然后按依赖关系逐个击破。3.1 第一遍用十分钟建立“问题-方法-验证”的三角框架精读的第一步不是逐字看而是快速翻阅目标是在十分钟内回答三个问题论文解决什么问题Problem、作者提出了什么方法Method、用什么实验证明有效Evaluation。对应的你要去找论文里的三个部分Introduction和Related Work看问题Method看方法Experiments看验证。这一遍最重要的是判断这篇论文值不值得精读。说实话顶会论文也有水货普通期刊也有被埋没的好工作。不值得精读的论文花几个小时去啃纯属浪费生命。我的判断标准有两条一是看它解决的问题是否真实存在、是否够痛二是看它的方法是否具有可迁移性还是说只能在这一个数据集、一个任务上生效。我自己有个很土但有效的筛选方法先看论文里的可视化结果图再看消融实验表格。如果可视化结果对比明显且消融实验不是只调最后一行的参数刷出来的这篇论文大概率值得精读。反之如果可视化结果看不清差异或者消融实验只报告了某个数据集上的mIoU而没有定性分析我基本会跳过。3.2 第二遍逐段精读Method部分把每个模块的输入输出张量维度写到纸上精读的核心发力点永远在Method部分。但这里有个特别多人踩的坑——只关注模型结构图忽略了维度的流转。分割模型本质上是张量变换的流水线一个模块输入是什么形状、输出是什么形状中间经过了哪些上采样、下采样、跳跃连接这些信息才是复现代码的关键。我读Method部分的时候手边会放一张A4纸。我会把整个流程按数据流向画出来输入图像或者点云经过骨干网络特征图尺寸怎么变化然后进入你设计的模块模块输出的特征图又怎么回到原图分辨率最后通过什么Head输出预测图。每一步我都把特征图的通道数、高、宽标在旁边。举个具体的例子读PSPNet的时候它的核心是金字塔池化模块Pyramid Pooling Module。如果你只看论文里的结构图会觉得它就是把特征图分别做了1x1、2x2、3x3、6x6的池化然后融合。但你要真去复现代码就必须搞清楚Original features本来是多少通道四条分支池化后各自变成多少通道Concat之后维度怎么对齐最后经过的卷积层又把通道数降回多少。这些细节论文里往往不会写得很明确需要你结合代码或者实验去推测。这一步其实就是精读论文和泛读论文的最大分水岭。3.3 第三遍读实验设计和消融实验理解作者是怎么“证明自己有效”的很多初学者读论文不爱看实验部分觉得就是堆数据。但实验设计恰恰是一篇论文作者研究品味和工程能力最真实的体现。精读实验部分我通常会问自己这么几个问题对比方法是否足够强论文里的Baseline基线方法是当前公认的最好方法还是只是几个老掉牙的模型如果作者只跟两年前的模型比那效果再好在说服力上也是打折扣的。消融实验是否回答了核心问题好的消融实验是逐个模块去掉看对最终指标的影响。如果一篇论文的消融实验只是几十个超参数组合的大杂烩说明作者自己都没想清楚哪个改动是最重要的。在哪些数据集和指标上验证语义分割常见的指标是mIoU平均交并比实例分割常用mAP平均精度。另外要注意数据集大小和领域差异。只在Cityscapes上work的模型放到医学图像分割的息肉分割数据集上可能拉胯。息肉分割数据集这个方向这几年很火规范化程度高有很多专门的数据集比如Kvasir-SEG、CVC-ClinicDB。如果你要精读的是医学图像分割论文除了看它有没有在这些公开数据集上测试还要特别关注它有没有做跨数据集泛化测试。因为医学图像分割领域有个老大难问题模型的泛化能力很差在A医院的数据上训练到B医院数据上性能就崩。好的论文会正面面对这个问题而不是只在你自己的测试集上刷个漂亮数字。大概在精读数量到了十几篇的时候你会发现一个规律顶会论文的实验设计普遍是很工整的每个实验都有的放矢不是为了凑数而是为了回答问题。读多了以后你自己设计实验的品味也会跟着上去。4. 从论文到代码复现那些论文里不会明说但复现时一定会踩的坑精读论文绝对不能只停留在文字层面不落到代码复现上你对论文的理解永远隔着一层。但代码复现这件事恰恰是信息差最大的地方。论文里轻描淡写的一句话可能对应着几百行工程代码。我把自己复现分割论文时的几个高频坑整理出来这些经验都是拿无数个调不通的夜晚换来的。4.1 数据预处理细节Normalization、Resize策略和类别像素占比决定你能否复现论文数字的第一道坎分割任务的复现第一个坑往往不在模型结构而在数据预处理。我见过太多人模型结构一模一样但就是复现不出论文的mIoU最后发现是Normalization的均值和标准差设置不一致。图像分割常用的Normalization参数是ImageNet统计出来的那一套均值和标准差但也有不少论文用的是自己数据集上重新统计的。如果你不修改模型可能收敛慢甚至训练崩掉。另外Resize策略也很关键。有些论文训练时会用固定尺寸输入比如把图片resize到512x512但测试时用的是原始尺寸做滑窗预测有些论文用的是随机裁剪加多尺度训练。这些策略如果不一致最终指标差个两三个点太正常了。还有一个隐蔽问题是类别像素占比。语义分割的类别往往极不均衡比如街景里“道路”可能占了一整张图一半以上的像素而“摩托车”可能只有一小点。论文如果用了带权重的损失函数或者用了Ohem在线困难样本挖掘你得确认你设置的那些超参比如Ohem的top-k比例是不是和论文一致。这个不一致也是复现失败的重灾区。4.2 点云分割里的DBSCAN参数敏感性这不是一个“标配参数”的事如果你精读的是点云分割方向的论文尤其是基于DBSCAN做实例聚类的那我要特别提醒一个坑DBSCAN的eps邻域半径和MinPts最小样本数这两个参数对结果极其敏感。有些论文会把DBSCAN描述成“使用DBSCAN对前景点云进行聚类”但不会告诉你它在实际调试时eps是从0.3试到2.0才找到最优值的。这个参数跟点云的密度直接相关不同的激光雷达型号、不同的距离范围最优eps都不一样。同一个自动驾驶数据集上调试好的参数拿到另一个数据集上直接用分割出来的实例形态可能完全无法看。所以复现这类论文时我建议先行用一小部分数据把聚类参数进行网格搜索确定适合自己数据配置的组合再跑完整实验。另外点云分割的评测也不是简单的查准率和查全率。我自己会在复现时额外关注聚类结果和真实实例之间的匹配问题。基于聚类的实例分割和基于深度学习的实例分割在评测指标的计算方式上有本质区别mIoU和mAP这两类指标都不能直接套用。你要先确认论文的评测脚本里是怎么处理“预测出的实例和标注的实例做匹配”这一步的——是用了IoU阈值匹配还是用了匈牙利算法做最优匹配这会直接影响最终数值。4.3 输出层设计从语义分割的逐像素分类到实例分割的掩码回归从语义分割论文跳到实例分割论文复现时最容易卡住的是输出层的设计。语义分割的输出通常就是一个和原图分辨率一样的特征图每个位置的数值是类别概率用Cross Entropy Loss训练就行。但实例分割要麻烦得多像候选掩码生成、分类分支和掩码分支的组合方式不同论文差异巨大。Mask R-CNN的思路是先检测出候选框然后在每个候选框内部做二分类掩码预测。而YOLACT则引入了ProtoMask原型掩码和掩码系数通过线性组合生成最终掩码。至于YOLO系列的seg版本是在检测头之外再加一个分割头把检测和分割用多任务的方式耦合起来。这些不同的输出设计决定了你在实现时是“检测分支和分割分支各自独立算Loss”还是“掩码结果直接受检测框影响”。这几者的Loss权重怎么配比学起来经验性太强了论文里通常只给一个最终结果中间调参的过程全靠自己摸索。4.4 训练技巧多尺度训练、Ohem、BN的冻结与同步效果差异远超你想象分割模型训练是个“无底洞”同样的模型结构用了不同的训练技巧精度差距能到5个点以上。这些技巧论文里有时会写有时只字不提但它却能直接决定复现成败。多尺度训练是很常见的一个手段。在训练时随机把输入图片缩放到0.5倍到2倍之间参与训练在测试时再用多尺度推理做平均mIoU通常能提升1到2个点。但是多尺度训练会显著增加训练时间如果你机器资源有限这个trick可能就得取舍。另一个特别坑的是BN层Batch Normalization。如果你用单卡训练BN的batch size一般不会太大导致统计量不稳定。很多分割论文在训练时会把骨干网络里的BN层冻结也就是保持预训练模型的统计量不变。这个细节论文里经常只是轻描淡写一句“we freeze the BN layers”但如果你没冻结在单卡小batch的情况下整个训练过程都可能不稳定最终性能和论文的差距会非常明显。最后一个容易被忽略的是BN的同步问题。如果用多卡训练PyTorch默认的BN是每张卡独立统计的。但在分割这种batch size一般比较小的任务里每张卡独立统计会导致统计量差异很大。用SyncBN同步批归一化也就是跨卡同步统计对分割模型精度的提升往往比调模型结构更显著。这一点在复现时必须留意论文里写没写、用的什么框架都值得先确认。5. 精读的终点不是读完而是形成自己的“方法工具箱”精读很多论文以后你会遇到一个很爽的临界点开始发现不同论文之间是有隐藏关联的。比如你读了一篇用Transformer做语义分割的再读一篇用Transformer做点云分割的会发现它们在如何处理无序输入、如何引入位置编码这些问题上有惊人的一致性。这时候你就不再是“一篇篇读论文”而是在“拼自己的知识拼图”。我自己的做法是每精读完一篇论文就在自己的笔记里维护一个“方法工具箱”表格。这个表格不按论文来索引而是按“问题”来索引。比如你面临的问题可用的解决方案出自哪些论文可迁移性评价小目标分割效果差多尺度特征融合PSPNet、DeepLab v3高适用于大多数分割任务类别不平衡严重Dice Loss、Focal Loss、Ohem各类医学分割论文高但需要调参边界模糊粗糙引入边缘监督信号部分医学图像分割论文中增加训练复杂度点云实例分割难先聚类再分类的级联方案各种基于聚类的点云分割论文中依赖传感器配置维护这个工具箱最大的好处是你换了个数据集、换了个任务方向不需要从零开始重新读论文。你需要什么直接打开工具箱找方案然后去查对应论文里的细节。这比“我记得好像有篇论文做过类似的事但我不记得是哪篇”要高效得多。另外我还有个比较个人化的习惯把论文里的图重画一遍。不是照着抄而是不看原图只凭理解把模型结构图画出来然后跟原图做对比。别小看这一步它能暴露出很多你没有真正理解的地方比如某个模块的输入是不是来自主分支的共享特征、某个跳跃连接到底连在哪个层级上。一旦你画出来的结构跟原图有出入大概率这里有理解偏差。与其死记硬背论文里的流图不如亲手画一遍这个过程的“夹逼”效果很神奇。6. 给刚入坑分割方向的同学一些关于读论文节奏和工具链的实在建议最后这部分是给刚入坑的同学的说几个关于时间分配和工具使用的实在建议。这些都是我自己踩过坑以后总结出来的不是书本上教的。6.1 关于读论文的节奏刚开始读分割方向的论文不要贪多。每周精读两篇比每天泛读五篇有价值得多。我见过不少同学天天在arXiv上刷论文标题和摘要看了一大堆但真正能详细讲清楚方法细节的一篇都没有。精读的本质是“把一篇文章里有效的信息内化成自己的工程直觉”这需要时间沉淀。我建议是按主题读比如这个月专注读语义分割里的上下文建模方向下个月专注读实例分割里的检测框架。这样读下来你会发现一个方向的论文之间是有“谱系”的后写的论文一定会引用之前的工作继承和批判的脉络会很清晰。比一篇新论文读一遍效率高得多。6.2 关于笔记工具工具上我不推荐非得用什么复杂的知识管理软件。我自己用的是Markdown 本地文件夹保存笔记每篇论文一个md文件文件名格式是“年份_作者_论文标题_关键词”。笔记里固定几个板块要解决的问题、方法的骨架结构附上我重画的结构图、关键公式的维度和解释、复现过程踩过的坑、可迁移到其他任务的点。保持这个习惯半年以后你手里就会有一个非常宝贵的个人知识库。这东西比你在小本本上摘抄十遍都好用因为当你需要的时候搜索是关键。比如新接到一个任务是“搞掂息肉分割”你可以直接搜“小目标”“医学”“边界”这些关键词把以前读过的论文笔记翻出来是最高效的开始方式。6.3 关于和代码的配合读论文和跑代码一定要交替进行。如果有人只读论文不跑代码读十篇也摸不透那些关键的维度变化如果有人只跑代码不读论文代码看懂了一大堆但永远是“知道怎么做、不知道为什么要这样做”。最理想的状态是拿到一篇论文先花半小时浏览一遍然后直接去看官方开源代码里的模型结构定义和训练配置带着代码里的细节再回去精读论文的Method部分。这个过程看起来可能会慢但实际上会比你纯读论文快得多而且你记住的知识点会很“立体”不只是抽象的公式而是跟张量实际流动的图像绑定在一起就像我在之前的博客里写过的“让代码与论文互相充当彼此的注脚”。最后再分享一个小技巧读实验部分的时候打开一个搜索引擎查一下论文里对比的那些Baseline方法在今天还有没有人用。如果某个方法在最近的顶会上已经彻底消失了那说明这个方法可能已经过时论文的实验对比设计也要打问号。反过来如果一个方法虽然老但依然高频被引用那它一定有很强的可迁移性和工程价值值得你花更多时间精读。这种“用时间线筛信息”的意识看多了以后你会越来越快。
返回列表