SAM和SAM2——“分割一切“到底是神话还是真功夫
聊到今天这个份上终于到了最炸的一个话题——SAMSegment Anything Model。2023年Meta发布SAM的时候整个CV圈都炸了。一个模型用1100万张图像的10亿个掩膜做训练能分割一切——不管你给什么图、点一下什么东西它都能给你抠出精确的轮廓来。Demo视频里操作者鼠标随便点一下图片里的任何物体SAM就能自动画出那个物体的边缘而且精度高得吓人。这东西的震撼程度有点像当年你第一次看到GPT能写文章、画图——你知道它背后是大规模数据大规模算力但你还是会被它的通用性吓到。SAM到底做了什么SAM本质上是一个提示驱动的交互式分割模型。你给它一个图像再给它一个提示点一个点、画一个框、或者直接说给我分割所有东西它就能输出对应的分割掩膜。技术架构分三块图像编码器用了一个巨大的ViT-H约600M参数来提取图像特征输出一个高维的特征图提示编码器把用户的点、框、文本等提示信息编码成向量掩膜解码器把图像特征和提示特征结合起来预测输出掩膜训练方式极其暴力——Meta构建了一个数据飞轮先用一个初始模型在公开数据集上训练然后用这个模型去辅助标注新的图像人机交互标得快把新标注的数据再喂进模型训练反复迭代最终搞出了10亿个掩膜的史上最大分割数据集。SAM的魔力在哪儿SAM最让人震撼的是它的泛化能力。你给一张它从来没见过的图点一下上面的任何物体——不管是在水下拍的、显微镜里拍的、卫星上拍的、还是游戏截图的它基本上都能分割出来。这在以前的模型上是不可想象的——DeepLabv3在Cityscapes上训好了拿去做遥感分割精度直接腰斩。这种泛化能力的来源就是那10亿个掩膜的训练数据。模型看过的图像多样性太丰富了各种光照、各种视角、各种物体形态、各种分割难度——它见过了足够多的数据以至于见过一次的东西基本上等于见过所有了。SAM在医学图像分割上的表现尤其让人震惊。医学图像的分割数据本来就少、标注成本极高、而且每个器官的形态变异很大。SAM用通用的分割能力在很多医学数据集上零样本zero-shot就达到了接近全监督微调U-Net的水平。这相当于一个从没看过医学书的人第一次做医学考试就考了80分——你说厉不厉害。SAM的死穴——它到底有哪些干不了的事儿但是我作为一个在工业界被各种牛皮方案坑过无数次的人看到SAM的第一反应不是太牛了而是这玩意儿在真实项目里到底能用不答案是有条件地能用而且限制条件不少。第一SAM不是开箱即用的分类器。SAM只做分割——把东西抠出来但它不告诉你抠出来的是什么。它输出一个掩膜但不知道那是狗还是猫。你要做图像分割把每类东西标出来光有SAM是不够的你还得给它配一个分类器或者用CLIP这类模型来做分类。这就是为什么SAM叫Segment Anything而不是Recognize Anything——它只管抠图不管认图。第二SAM的推理速度太慢了。SAM的ViT-H编码器有600M参数处理一张1024x1024的图大概需要1-2秒在A100上。这在需要实时处理的场景比如自动驾驶里完全不可用。虽然后来SAM2提速了一些但跟YOLO那种实时检测的速度比还是差了一个数量级。第三SAM在难例上也会翻车。如果物体的边界极其模糊、或者物体之间遮挡严重、或者背景跟物体颜色几乎一样SAM也会出错。我在一个工业质检的项目里试过SAM分割划痕——金属表面上的细微划痕光照不对的时候肉眼都看不清SAM也完全分不出来。它再强也强不过物理限制——像素不够的地方就是不够什么模型都救不了。第四SAM的数据偏见。SAM的训练数据里有大量的日常物体——人、动物、家具、车辆、食物。但在一些非日常场景里比如遥感航拍里的建筑物、工厂流水线上的零部件、显微镜里的细胞结构SAM的泛化能力会明显下降。它见过的日常物体太多了但它没怎么见过卫星视角下的屋顶或者400倍放大的细胞核。SAM2——迭代了但没翻天覆地2024年Meta发布了SAM2主要改进在几个方面引入了视频分割能力——不光是单图分割了还能做视频里的连续物体分割有了时序信息后跟踪更稳定推理速度提升——在编码器上做了一些优化速度快了大概30%精度微调——在一些难例上有小幅提升但SAM2的核心哲学没变——它依然是提示驱动大规模预训练的范式不是端到端的语义分割模型。它也不是你传统意义上的语义分割或者实例分割模型——它更像一个交互式标注工具。工业界怎么用SAM实事求是地讲SAM直接替换你现有的分割模型在大多数工业场景里是行不通的。速度太慢、没有分类能力、体积太大。但SAM在几个间接用途上极其有价值第一辅助数据标注。这是SAM最大的商用价值。以前标注一张复杂图像的分割掩膜可能要10分钟有了SAM之后标注员点几下鼠标就搞定了标注效率提升了5-10倍。很多数据标注公司已经开始把SAM集成到他们的标注工具里了。第二作为基础模型提取通用特征。你可以把SAM的图像编码器当作一个通用特征提取器在它上面接一个轻量级的分割头用少量的任务特定数据做微调。这样你既享受了SAM的泛化能力又不用承担它全部的计算负担。第三零样本分割的兜底方案。当你面对一个完全没有训练数据的新场景时SAM可能是唯一能给出差不多能用的分割结果的方案。虽然精度不一定高但总比什么都没有强。我的判断SAM改变的是范式不是模型SAM最大的贡献不是一个模型能分割一切而是它证明了在足够大的数据上预训练的基础模型可以适应几乎没有见过的新任务和新场景。这种基础模型提示驱动的范式正在改变整个计算机视觉的研究和工程范式。以前我们是每个任务训一个模型以后可能是一个基础模型服务所有任务。但这个过程不会是一键替换——它需要新的工具链、新的部署架构、新的用户交互范式。SAM只是这条路的开端远不是终点。