SAM2发布之后社区里聊推理的教程遍地都是真正把训练讲明白的却很少。我在这系列的前两篇分别拆了SAM2的模型结构和流式跟踪流程这一篇集中回答和“训练”相关的疑问训练数据怎么来、训练分几个阶段、视频里物体消失和遮挡怎么处理、损失函数怎么配、记忆模块是怎么被训出来的以及普通开发者到底能不能自己微调。如果你一直只跑官方权重做推理没认真看过训练相关的内容这篇可以把“模型是怎么学会跟踪的”这条线补全。我不打算把论文复述一遍而是站在复现和使用者的角度把这些问题的答案用大白话串起来顺带把社区里踩过的坑也列出来。1. 训练之前先把SAM2的结构变化捋清楚1.1 从SAM到SAM2模型身上到底改了什么很多人以为SAM2就是SAM加了个时序模块这个理解太粗糙了。训练策略的设计完全取决于结构改动所以得先把结构差异讲清楚。SAM2沿用SAM的prompt交互范式——点、框、mask、甚至文本都能作为输入——但从单帧模型改成了流式视频模型改动集中在三块。第一块是图像编码器。SAM用的是MAE预训练的ViT大模型SAM2换成了Hiera骨干。Hiera是层级式Transformer同样用MAE方式做预训练能直接输出多尺度特征。SAM2在Hiera之上又加了一个多尺度特征融合模块把不同层的特征合并成统一的表示再往下游送。为什么换两个原因SAM的ViT-H在1024分辨率输入下计算量太大视频是逐帧处理的算力撑不住层级结构天然适合多尺度特征融合对大小目标同时检测更友好。第二块是记忆机制这是SAM2的灵魂。memory bank里存的是前若干帧的预测mask和对应的特征每来一个新帧memory encoder把历史信息压缩一遍然后在所有的Transformer block里插入memory attention——当前帧的token作为query历史记忆作为key-value把时序信息融进当前帧的特征里。没有这套机制SAM2跟SAM逐帧跑没有任何区别。第三块是mask decoder的轻量化。decoder的隐藏维度比SAM小但在更强编码器的支撑下分割精度没降速度还上去了。1.2 视频训练的难点从来不是分割是时间一致性单帧分割学的是“这个像素属于哪个物体”视频训练学的是“这个物体连续几秒都是同一个目标”。所以后面讲到的数据设计、损失函数、抽样策略、记忆填充方式全部围绕一个目标在转保持时间维度上的同一性。这一点先想清楚了后面所有细节就都串起来了。2. 第一道坎SA-V数据集是怎么造出来的2.1 规模与构成SAM2的视频训练依赖SA-V数据集截至目前它还是最大的视频分割数据集之一大约5.1万段视频、64.3万个masklet、累计超过3500万个逐帧mask。masklet是SAM2论文里提出的概念通俗理解就是一个物体在一段视频里连续帧的mask序列它本身就是训练时的基本监督单元。对比一下图像侧的SA-1B——1100万张图像、超过11亿个mask——就能直观感受到视频数据的稀缺程度。视频训练集在数量级上比图像集少了两个数量级以上这意味着训练策略必须精打细算单帧分割能力先在图像上练扎实视频阶段集中学时序信息不能指望视频数据把什么都教会。2.2 人工加模型辅助的标注流水线SA-V不是纯人工标注出来的那成本没人扛得住。官方的大致流程是先用一个初始模型在视频里自动生成候选mask序列标注员只在关键帧上做修正修正过的关键帧作为锚点模型再向中间帧传播最后人工在抽样帧上做二次校验把传播错的地方修掉。这种人在回路的标注方式把每分钟视频的标注成本压到了个位数分钟的级别。虽然官方没有完整公开过最终的每分钟耗时但社区普遍认可一个结论这套流程比逐帧全人工标注节省了一个数量级的成本。这里有个很值得注意的细节辅助mask生成质量会直接影响标注员的行为。如果辅助mask边界太差人工修正成本高如果太好标注员容易路径依赖不再仔细推敲边界。SA-V最终呈现的mask边界质量很高说明流水线里的抽样审查和二次修正是非常关键的环节。2.3 对想自己收数据的人的三条启发如果你想用自己场景的数据微调SAM2有几点可以直接抄作业。第一场景多样性比数量更重要几百条视频都拍同一个机位、同一个角度模型学到的只是“背诵”而不是泛化。第二标注mask的边界必须严格mask带毛刺训出来的模型就学不到锐利边界推理时边缘会黏糊。第三一定要覆盖遮挡和物体离场这类“麻烦帧”模型没见过这些东西推理时就容易在这些场景里放飞自我——要么跟丢要么幻觉出根本不存在的mask。3. 三阶段训练流程图像预训练、视频训练、联合微调3.1 阶段一SA-1B图像预训练SAM2的训练是一个三阶段接力。第一阶段是纯图像训练模型先被训练成一个通用的“任意目标分割器”。输入是图像加prompt——一个点、一个框、一张粗糙的mask——输出是精细mask。这个阶段记忆模块完全不参与模型学到的是单帧分割能力。图像训练阶段的核心技巧在prompt采样策略。训练时生成点prompt是随机的有时候点在目标中心附近有时候点在物体边缘甚至点在不那么准的位置目的就是让模型学会“给一个点也能抠出完整物体”。这个随机性直接决定了模型在真实交互时的鲁棒性——用户不会每次都点得那么准。3.2 阶段二在SA-V上练视频能力第二阶段才上视频。训练时从视频里随机抽一段clip社区复现时普遍用8帧左右官方完整配置没有公开过。第一帧给prompt后续帧由模型自己传播mask同时把历史帧的预测写进memory bank。这里有一个非常关键、又很容易被忽略的细节训练的早期阶段memory bank里到底填什么。如果一上来就填模型自己的预测误差会沿着时间步一路放大训练很快崩溃。官方用的思路是课程学习式的过渡训练早期用oracle memory——直接把GT mask塞进memory bank作为历史信息让模型只学“在正确历史条件下预测下一帧”随着训练推进逐渐用模型自己的输出替换GT。这和自回归语言模型训练里的teacher forcing、scheduled sampling是同一个思想目的都是先让模型在一个稳定的前提条件下学会预测再逐步放开到自驱状态。3.3 阶段三图像视频联合微调最后一个阶段把SA-1B和SA-V混在同一个batch里做联合微调防止模型在视频训练过程中把单帧分割能力丢掉。这是典型的防灾难性遗忘措施效果非常直接——跳过这一步模型在静态图像上的分割质量会肉眼可见地下降。我自己的观察是很多复现项目到第二阶段就停了结果只跑视频数据看着还行一测试图像交互分割就露馅根因基本都在这里。4. 训练中的魔鬼细节损失、遮挡、记忆和增强4.1 损失函数focal加dice的老组合SAM2的mask预测损失是focal loss和dice loss的加权和这个组合在SAM时代就验证过SAM2原样沿用。为什么这两个组合这么能打focal loss解决的是正负样本极端不平衡的问题——视频里背景像素永远比前景mask像素多得多普通交叉熵损失会被背景梯度淹没。focal loss通过调制因子压低易分类样本的权重让模型把注意力放在难分的前景像素上。dice loss则直接优化mask的IoU对目标大小不敏感小目标也照顾得到。两个一组合训练梯度稳了优化的目标和评估指标也对齐了。分割任务里其实还有boundary loss、hausdorff loss这类更精细的损失可选但SAM2不用的原因也很简单在数据标注质量足够高的时候focal加dice已经能把边界训得很好引入更复杂的损失徒增调参成本。4.2 视频里物体消失了损失怎么算视频跟踪最麻烦的场景是目标出画或者完全被遮挡。这时的处理原则非常朴素GT不存在的帧对应的loss直接mask掉不参与梯度回传。如果这一帧不mask会怎样模型为了降低loss会硬生生预测一个“可能存在”的mask长期下来就被训练成了幻觉生成器。这个坑在复现社区里太常见了——很多人loss降不下去、预测mask乱跳查到最后几乎都是遮挡帧loss masking的处理方式不对。另外还有个配套细节如果整个clip里目标从头到尾没出现这个训练样本可以直接丢弃不然模型会学到“没有目标也要输出mask”的坏习惯。4.3 记忆模块是怎么训出来的memory attention训练时的梯度会沿着时间步回传显存消耗随clip长度近似线性增长这是训练clip不能设太长的硬约束。与此同时训练时memory bank的容量也要做随机截断模拟推理长视频时记忆被淘汰的实际状态。如果训练时永远用“无限记忆”模型就只会依赖完整历史一上长视频立刻露馅。这个“训练时模拟推理约束”的思路跟我调过的很多序列模型是相通的关键是要让训练和推理时的条件分布尽量一致。4.4 数据增强里的时间维度单帧增强和SAM差不多随机缩放、裁剪、颜色扰动、mask随机膨胀腐蚀。视频数据增强的额外空间在时间维度——随机化起始帧、随机抽帧间隔让模型见过不同运动起止状态的组合。举例来说同一段跑步视频有时从第1帧开始看有时从第13帧开始看模型就不会把“跑步的起点姿势”和“目标本身”绑死。这些技巧看起来不起眼但对时序鲁棒性的提升是实打实的而且几乎不增加训练成本。5. 普通开发者想训练或微调SAM2现实吗5.1 先算一笔资源账必须实话实说SAM2从头训练的入门门槛比绝大多数视觉模型都高。官方训练用了数百张A100级别GPU加数周时间数据规模是TB级的个人开发者和小团队基本不用考虑从头复现。但微调是另一回事分两种情况图像分割方向的微调一张RTX 4090级别显卡就能跑主要靠降低batch size来适配显存。视频跟踪方向的微调显存压力集中在记忆模块和时间维梯度回传最低建议40GB起步的卡比如A100或更大显存的型号。5.2 常见问题速查表我在复现和轻量微调的过程中把社区里高频出现的问题整理成了下面这张表。症状优先排查方向训练loss不降或震荡检查学习率和batch size再核对数据mask是否与图像对齐训练正常但推理漂移严重scheduled sampling过渡比例是否合理记忆容量设置是否过小输出无中生有的mask遮挡和离场帧的loss masking是不是没做训练OOM降batch、缩短clip长度、开gradient checkpointing微调后单帧分割变差图像和视频数据的混合比例是否漏了联合微调阶段5.3 我的一些微调实操建议第一先冻结图像编码器只训练decoder和记忆相关模块。这样能大幅降低显存占用也减少过拟合风险。第二数据宁精勿滥我自己在收集数据时吃过亏一开始图省事用了一批网上抓的视频标注粗糙、边界不齐训出来的模型各种抽风后来换成精标数据才稳住。第三评估不要只看单帧dice还得看跟踪稳定性业界常用的JF这类视频分割指标就很好用。单帧dice高但帧间预测乱跳等于白训。最后说点个人体会。跟踪SAM2这段时间训练部分给我最大的触动不是哪个技术细节多精妙而是他们把“视频数据难搞”这件事解决得非常务实——人在回路标注、oracle到预测的过渡、联合微调防遗忘每一招都是工程上很朴素的手段但组合起来就撑起了这个量级的效果。如果你准备在自己的数据上折腾我强烈建议先把三板斧吃透数据质量、课程式记忆填充、遮挡loss masking。这三样做到位你的结果大概率不会差。