SAM 3 微调实操指南:改 3 处配置,一条命令训出领域专属分割模型
【免费下载链接】sam3The repository provides code for running inference and finetuning with the Meta Segment Anything Model 3 (SAM 3), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/gh_mirrors/sam/sam3
SAM 3 在 SA-CO 基准上已经做到人类标注者 75%–80% 的水平,但「通用强」不等于「你的领域强」。做 SAM 3 微调(也就是自定义训练)的价值在于:把它当起点而不是终点——喂一批自己的数据,就能得到一个懂你业务的专属分割模型,文本提示进、像素级掩码出,视频里还能直接跟踪。
整条链路比想象中短:备一份 COCO 格式的数据,改 3 处配置,跑一条命令。全程只用仓库自带的 训练入口 和 Hydra 配置系统,本地单卡到 SLURM 集群走的是同一个脚本。
📌 环境一行带过:Python 3.8+(官方建议 3.12)、PyTorch 1.10+、CUDA 11.3+,强烈建议 GPU。克隆仓库后安装训练依赖即可开工:
git clone https://gitcode.com/gh_mirrors/sam/sam3 && cd sam3 pip install -e ".[train]"🧠 能力全景:为什么选 SAM 3 做领域适配
SAM 3 是一个统一的提示可分割(promptable segmentation)基础模型:文本编码器把「红衣服的球员」这类短语翻成特征向量,图像编码器提取视觉特征,检测器负责定位所有匹配实例,跟踪器把结果沿视频帧延续,内存银行则复用前几帧的信息省算力。
它做领域适配有两个杀手锏。一是开放词汇能力——官方数据引擎自动标注了 400 万+ 概念,270K 唯一概念比已有基准多 50 倍以上,模型天生会「认没见过的词」,微调只是让它认得更准。二是 presence token 加解耦的检测器–跟踪器设计:既能区分「白衣球员」和「红衣球员」这类近似提示,又让检测与跟踪互不干扰,数据越多涨得越快。
换句话说:零样本已经能打,微调负责把最后 20%–25% 的差距吃进你的领域。
🚀 实战落地:从数据集到一条命令
数据集三件套怎么备
SAM 3 的训练数据只认 COCO 格式,每个 split 一个目录,图像和一份_annotations.coco.json放一起:
custom_dataset/train/ # 图像 + _annotations.coco.json custom_dataset/valid/ custom_dataset/test/标注文件里要有四样东西:图像路径与尺寸、边界框(XYWH)、分割掩码(RLE 或多边形坐标)、类别标签和对应的文本描述。官方 Roboflow / ODinW 配置里每个 supercategory 都是train/valid/test三段式结构,照着摆就行。想直观感受一下数据长什么样,SA-CO 是这个体系里最典型的样本集:
配置里必改的 3 处
配置目录 下有 roboflow_v100、odinw13 等现成模板,复制一份后只需动 3 处:
paths:数据集根目录、experiment_log_dir(日志落盘位置)、bpe_path(仓库自带sam3/assets/bpe_simple_vocab_16e6.txt.gz,直接指过去)。- 数据指针:
trainer.data.train/val里的img_folder和ann_file,通常已经用${paths.xxx}变量串好,改完第 1 处这里自动生效——没串上的话手动填路径。 launcher/submitit:gpus_per_node、num_nodes、use_cluster,决定任务是本地跑还是丢给 SLURM。
其余参数有合理默认值:scratch.train_batch_size(默认 1,显存够再加)、trainer.max_epochs(默认 20)、scratch.lr_scale(默认 0.1,各参数组学习率由它统一缩放)。调参前建议先跑通再动它们。
一条命令跑通训练
本地单卡:
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml --use-cluster 0 --num-gpus 1多卡或集群,改参数即可:--num-gpus 4;上 SLURM 则加--use-cluster 1 --partition <分区> --account <账号> --num-gpus 8 --num-nodes 2。
跑起来后打开 TensorBoard 盯盘,命令是tensorboard --logdir <experiment_log_dir>/tensorboard。日志目录里自动备好了config.yaml(原始配置)、config_resolved.yaml(变量展开后)、checkpoints/、tensorboard/和文本logs/。重点看三条曲线:总损失(含分类与分割分项)、验证集 AP、学习率——损失平稳下降、AP 稳步爬升就是健康信号。
⚡️ 避坑速查:训练中的 4 个高频问题
| 症状 | 大概率原因 | 处理动作 |
|---|---|---|
| 训练/验证损失背离 | 过拟合,数据量相对模型太小 | 加强transforms数据增强、早停、冻结部分层或调大wd(weight decay) |
| 训练速度慢 | 单卡 + 小 batch + 数据加载瓶颈 | 开多卡、确认混合精度(默认bfloat16AMP 已开)、调大num_train_workers |
| CUDA OOM | 分辨率或标注量超标 | 调低scratch.resolution(默认 1008)、调小max_ann_per_img(默认 200)、设gradient_accumulation_steps攒梯度 |
| 损失中途发散(inf) | 小数据 + 高学习率组合,少数 job 会翻车 | 官方复现方案也是「用发散前最后一个 checkpoint」,降低lr_scale可进一步减少发生 |
💡 一个经验值:数据量小于 1000 张时,先把lr_scale从 0.1 压到 0.05,发散概率明显下降。
✅ 训练完怎么验:一条命令出评估指标
评估复用同一个训练脚本,把 job 配置里的trainer.mode设为val即可:
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_eval.yaml跑完会给你 IoU、AP、框精度、掩码质量一套完整指标;SA-CO 类基准的官方指标是 cgF1,评测器会对照 3 个人类标注分别计算并取最优(oracle 设定),人类一致率本身就是模型性能的上界参考。下面这张图就是 SA-CO 的标注形态:每张图一行短语,三个标注者的掩码并排摆出,边界分歧和实例数分歧都能直接看出来——你的微调模型的目标,就是逼近这条人类上界。
🛣️ 进阶路线:下一步能做什么
跑通第一个领域后,有三条现成的路可以走:
- 复现 few-shot 设定:用 ODinW13 配置,把
odinw_train.train_file在seed300 / seed30 / seed3三个 10-shot 种子间切换、三 seed 聚合出结果——这是衡量「少量标注能不能打」的标准动作。 - job array 批量扫数据集:在
submitit里开job_array(num_tasks: 100),一次提交让集群按索引自动挑数据集,并行训 100 个领域模型。 - 升级输出能力:把
scratch.enable_segmentation和模型配置里的enable_segmentation一起置为true,损失里挂上Masks项(focal + dice),模型就从「只会画框」升级到「直出掩码」。
再往后,SAM 3.1 的多目标共享内存跟踪和更新版 checkpoint 也值得跟进——微调权重和推理代码都来自同一个仓库,迁移成本几乎为零。你的领域数据就是最后的护城河,现在可以开工了。
【免费下载链接】sam3The repository provides code for running inference and finetuning with the Meta Segment Anything Model 3 (SAM 3), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/gh_mirrors/sam/sam3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考