如何在自定义数据集上微调 SAM 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(Segment Anything Model 3)能按文本提示检测并分割物体,但通用模型放到垂直领域往往力不从心:医学影像、工业质检、你自己的商品类别,都需要在自有数据上微调,mask 边界和文本对应关系才能稳定。这篇文章带你走一遍 SAM 3 微调的完整流程:准备 COCO 格式数据、改配置文件、用单卡/多卡/集群启动训练,最后跑评估验证效果。
先轻扫一遍模型结构
微调前不用深读论文,记住推理链路即可:文本编码器把 "a penguin" 这类 prompt 转成特征,图像编码器从当前帧提取视觉特征,检测器负责找出帧内新出现的物体,跟踪器把上一帧的 mask 传播过来,两路结果合并后输出,历史帧信息存入 Memory Bank 供后续复用。训练侧同样跑这套架构,损失主要作用在检测分支(box + presence),分割损失可配置开启。
开工前准备:环境、数据与配置三处路径
依赖安装
先克隆代码,再装训练依赖,trainextra 会带进 hydra-core、submitit、tensorboard 这些训练必需的包:
git clone https://gitcode.com/gh_mirrors/sam/sam3 cd sam3 pip install -e ".[train]"装完后能正常跑python sam3/train/train.py -c ...即说明环境没问题。
数据格式速查
训练数据走 COCO 格式:每个 split 要有图像(JPG/PNG)和标注 JSON 两类文件,JSON 里包含图像路径与尺寸、XYWH 边界框、RLE 或多边形掩码、类别名与文本描述。目录建议这样组织:
images/train/、images/val/:各 split 的图像目录annotations/train.json、annotations/val.json:对应的标注文件
sam3/train/configs/ 下自带 Roboflow-100 和 ODinW13 两套完整配置,数据组织方式可以直接照抄。SA-CO 数据集的标注效果见下图,每个实例都对应一条文本描述,这就是微调的目标样式:
配置文件改哪三节
拷一份现有配置放到 sam3/train/configs/,最小改动是三处。paths全是占位符,必须填成实际路径:
paths: odinw_data_root: <YOUR_DATA_DIR> # 改为你的数据根目录 experiment_log_dir: <YOUR_LOG_DIR> # 改为实验日志输出目录 bpe_path: sam3/assets/bpe_simple_vocab_16e6.txt.gz训练超参数集中在scratch节,最常动的几个字段:
scratch: resolution: 1008 # 输入分辨率,显存紧张时调低 max_ann_per_img: 200 # 单图最大标注数 train_batch_size: 1 # 每卡 batch size max_data_epochs: 40 # 训练轮数launcher节控制节点数与每节点卡数,但命令行参数--num-gpus/--num-nodes会覆盖它们,一般不用改文件。
训练启动三档:单卡、多卡、集群
训练入口是sam3/train/train.py,-c指定配置(相对sam3/train/目录),--use-cluster 0表示本地跑。
单卡启动命令
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml \ --use-cluster 0 --num-gpus 1执行后终端会先打印完整配置(同时写入日志目录的config.yaml),随后开始逐 epoch 训练,logs/下能看到 loss 打印。
多卡启动命令
同一台机器换卡数即可:
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml \ --use-cluster 0 --num-gpus 4内部走 torch.multiprocessing 的 spawn 方式每卡起一个进程,通信后端是 NCCL。🚀
SLURM 集群提交参数
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml \ --use-cluster 1 --partition gpu_partition \ --account your_account --num-gpus 8 --num-nodes 2提交成功后终端打印Submitit Job ID: ...,集群任务日志落在日志目录的submitit_logs/下,可用squeue查排队状态。
训练中的观测与调参
实验目录启动后是标准布局:config.yaml(原始配置)、config_resolved.yaml(展开全部变量后的最终配置,排错最有用)、checkpoints/、tensorboard/、logs/。默认只保存最后一个 checkpoint(save_freq: 0),要留中间产物就调这个值。
实时曲线建议直接开 TensorBoard:
tensorboard --logdir /path/to/experiment_log_dir/tensorboard重点盯训练 loss(bbox、giou、ce、presence 四条线)和学习率,验证集每 10 个 epoch 跑一次(val_epoch_freq: 10),出 COCO bbox 的 AP 指标。
常见调参方向:
- 验证 AP 不涨:先查标注覆盖是否足够,再下调
lr_scale,或换train_transforms里的数据增强组合 - 速度太慢:调低
resolution,把num_val_workers提到接近 CPU 核数除以卡数 - GPU 显存爆:降
resolution或train_batch_size;配置里默认已开 activation checkpointing(use_act_checkpoint_*系列) - 预测收集阶段 CPU 内存爆:把
gather_pred_via_filesys改为 true,预测改走文件系统聚合
评估验证:评估命令与指标
同一个入口也能当评估用,把配置的trainer.mode切到val,再跑对应的 eval 配置:
python sam3/train/train.py -c configs/roboflow_v100/roboflow_v100_eval.yaml执行完输出 COCO bbox 评测结果(AP 等指标),预测文件 dump 到日志目录的dumps/下,可以离线画图核对。微调后 mask 与真实标注的差距有多大,参考下面这张图:SA-CO 上三位标注者对同一批实例的分割对比,直观展示了边界精度要追的标杆:
踩坑速查
- 报找不到配置:
-c是相对sam3/train/的路径,从项目根目录按上文示例执行即可 - 配置里还有
<YOUR_DATA_DIR>占位符:所有占位符都要填实,用config_resolved.yaml核对展开结果 - 少量任务 loss 发散:官方 README 提到小样本场景个别 job 可能发散,取发散前最后一个 checkpoint 的结果即可
- 一次想刷多个数据集:Roboflow 配置带
submitit.job_array,num_tasks: 100时每个任务自动选一个 supercategory
延伸方向
- 打开 examples/ 里的图像与视频 notebook,用文本 prompt 验证微调后的实际效果
- 试 odinw13 配置,复现 10-shot few-shot 训练流程
- 看 README_TRAIN.md 里 job array 与三种子(seed 300/30/3)聚合评估的细节
- 往视频方向走:
sam3/model/下的 tracker 与 Memory Bank 组件支持跨帧 mask 传播,可迁移到视频分割任务
【免费下载链接】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),仅供参考