尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Segment Anything 核心架构拆解:从一张图到分割掩码的完整链路

Segment Anything 核心架构拆解:从一张图到分割掩码的完整链路 Segment Anything 核心架构拆解从一张图到分割掩码的完整链路【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything给一张图点一下Segment AnythingSAM就吐出一块贴合物体的掩码。传统分割模型每接一个新类别都要重新标注、重新训练SAM 把这件事变成了提示驱动的任务。这篇文章沿着数据流把一张图从进入模型到掩码输出走一遍再拆开其中两个最关键的机制。项目定位SAM 是 Meta 开源的提示驱动图像分割基础模型仓库提供推理代码、三档规格vit_b / vit_l / vit_h的模型权重加载入口和示例笔记本。和同类分割方案最大的差异在通用性不为特定类别训练靠点、框或掩码提示分割任意物体同一套权重也能对整图自动产出掩码。模型由 Sam 类统一组装三个子模块。主线走查一张图进来掩码怎么出去以点一下选中的狗为例子按时间顺序走完整条流水线入口是 SamPredictor进图set_image先把图缩放到长边 1024、按 ImageNet 均值方差归一化、补齐正方形交给图像编码器——一个 ViT 骨干vit_h 为 32 层、1280 维每 8 层插一次全局注意力。出口是一张64×64×256 的特征图会被缓存在 predictor 上同一张图连续点几次编码器只跑一次这是交互响应快的关键。进提示你点下的像素坐标按同一缩放规则变换后被编码成稀疏向量点/框加稠密特征掩码或无掩码占位见 prompt_encoder.py。出掩码掩码解码器拿缓存特征图 提示向量经两层双向 Transformer 融合、上采样输出低分辨率掩码 logits 和每个掩码的质量分实现见 mask_decoder.py。回原图裁掉填充边、双线性插值回原图尺寸、按阈值二值化返回(masks, iou, low_res_logits)三元组。其中低分辨率 logits 还能作为下一轮的mask_input传回模型形成迭代细化闭环。关键机制拆解提示位置编码随机频率为什么够用为什么点、框是离散坐标特征是稠密网格要把第 312 行第 57 列的像素这种提示翻译到特征空间里必须给每个位置一个可区分的编码。怎么做SAM 不用固定频次的正弦编码而是先随机采样一个 2×64 的高斯矩阵当频率基底。坐标归一化后投影到随机频率上再取 sin/cos相邻位置的编码差异被拉开任意分辨率的输入都能生成同一套编码。# 坐标归一化到 [0,1] 后随机频率 sin/cos 拼接 coords 2 * coords - 1 coords coords self.positional_encoding_gaussian_matrix coords 2 * np.pi * coords return torch.cat([torch.sin(coords), torch.cos(coords)], dim-1)提示侧还有一个统一接口的设计点加正/负可学习嵌入框拆成两个角点各加角点嵌入掩码走一段 4 倍下采样卷积压成稠密特征没有掩码时填充可学习向量见_embed_points/_embed_boxes/_embed_masks。无论哪种提示最后都收敛为稀疏向量 稠密特征两个固定形状解码器永远只对接这两个输入。多掩码解码超网络与质量分为什么单击一个点它可能落在物体上也可能落在背景里。SAM 的做法是一次给 3 个候选掩码对应大/中/小目标再让模型自己给每个候选打分调用方按分数取优。怎么做4 个可学习 mask token 加 1 个 iou token 作为查询与图像特征进两层双向 Transformer上采样后的特征不直接出图而是和每个 mask token 驱动生成的一组权重做内积得到 logits——这是超网络思路模型预测的不是像素值而是生成掩码的参数。# 查询 token 提示向量进双向 Transformer hs, src self.transformer(src, pos_src, tokens) iou_token_out hs[:, 0, :] # 质量查询 mask_tokens_out hs[:, 1 : 1 4, :] # 4 个掩码查询 upscaled self.output_upscaling(src) # 转置卷积上采样 masks (hyper_in upscaled.view(b, c, h * w)).view(b, -1, h, w) iou_pred self.iou_prediction_head(iou_token_out) # 逐掩码质量分最后multimask_output为假只取第 0 个掩码为真取后 3 个调用方用iou_pred选最优。工程化视角ONNX 导出与批量生成两阶段拆分部署。scripts/export_onnx_model.py 只把提示编码器和掩码解码器导成 ONNX图像编码器留在 PyTorch 侧先把特征图算好。ONNX 部分因此足够轻可以跑在浏览器这类受限环境里——仓库 demo/ 下的 React 应用就是加载这个 ONNX 文件点图出掩码组合用法见 onnx_model_example.ipynb。导出脚本还支持动态点数量轴、--quantize-out动态量化和--gelu-approximate用 tanh 近似 GELU照顾 erf 算子慢的运行时。批量无提示生成。automatic_mask_generator.py 默认在图上一边采样 32 个点共 1024 个点批量过模型再用预测 IoU 阈值和稳定性分数双重过滤可选裁剪多层加 NMS 去重。命令行入口 scripts/amg.py 对单图或整个目录跑批量生成掩码写 PNG、元数据写metadata.csv加--convert-to-rle则输出 COCO RLE。SAM 只产出前景掩码、不带类别信息细小目标和发丝级边缘受 16×16 patch 粒度限制工程上通常要配合更密的提示或裁剪。留一个延伸问题这套特征算一次、提示随时追加的缓存设计如果输入从单张图换成连续视频帧图像编码器和提示接口分别要怎么改【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表