十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Segment Anything 实操教程:从提示词推理到 ONNX 导出的完整指南

Segment Anything 实操教程:从提示词推理到 ONNX 导出的完整指南 Segment Anything 实操教程从提示词推理到 ONNX 导出的完整指南【免费下载链接】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-anythingSAMSegment Anything Model是一个用点或框提示就能输出图像掩码的分割模型。本文带你从装环境、一条命令生成第一张掩码到交互提示推理、自动掩码调参最后完成 ONNX 导出今天就能在自己的图片上跑出结果。适用场景你想快速验证 SAM 的分割效果但不知道检查点和入口脚本在哪需要用点/框提示交互式地挑选物体而不是整图生成想把整图自动掩码转成 COCO 格式作为下游任务的训练数据计划把轻量掩码解码器部署到浏览器或 ONNX Runtime 环境快速体验三步拿到第一组掩码文件先看到结果再深入# 1. 获取代码并安装 git clone https://gitcode.com/GitHub_Trending/se/segment-anything cd segment-anything pip install -e . pip install opencv-python matplotlib # 2. 从 README 的 Model Checkpoints 一节下载检查点如 sam_vit_b_01ec64.pth放到仓库根目录 # 3. 对仓库自带图片一键生成全图掩码 python scripts/amg.py --checkpoint sam_vit_b_01ec64.pth \ --model-type vit_b --input notebooks/images/dog.jpg --output masks打开masks目录你会看到若干张 PNG每张对应狗图上的一个自动分割掩码。这就是 SAM 的核心输出后面所有内容都是围绕如何控制它展开的。装环境与加载模型先建好 Python 环境再确认模型能正常加载这是后面所有步骤的前提。用 Python 3.8装好 PyTorch 后执行pip install -e .安装本仓库。按任务下载检查点三个版本对应 ViT-H / L / B 三种骨干链接在 README 的 Model Checkpoints 一节。验证加载是否成功from segment_anything import SamPredictor, sam_model_registry sam sam_model_registryvit_b predictor SamPredictor(sam) print(model loaded, input size:, sam.image_encoder.img_size) # 1024关键点只有一个model_type必须和检查点文件匹配vit_b 的权重不能塞给 vit_h 的结构。用点和框提示指定物体SamPredictor的流程是set_image一次算好图像嵌入之后每次predict只跑轻量的掩码解码所以换提示几乎零开销。点提示的坐标是 (x, y)标签 1 表示前景点、0 表示背景点import cv2, numpy as np image cv2.imread(notebooks/images/dog.jpg) predictor.set_image(image, image_formatBGR) # cv2 读出来是 BGR务必声明 point np.array([[400, 300]]) # 点在物体上 label np.array([1]) masks, scores, low_res predictor.predict( point_coordspoint, point_labelslabel, multimask_outputTrue, ) print(masks.shape) # (3, H, W)返回 3 个候选掩码multimask_outputTrue时返回 3 个掩码和各自的质量分scores取scores.argmax()那个就是最佳掩码。单个点提示往往有歧义这时可以加第二个点或一个背景点来消歧并把上一轮的low_res作为mask_input传入下一轮predict做迭代细化。如果物体位置明确直接用框提示xyxy 格式更稳此时可以关掉多掩码输出box np.array([200, 150, 600, 450]) # x1, y1, x2, y2 masks, _, _ predictor.predict(boxbox[None, :], multimask_outputFalse)上面的效果来自 notebooks/predictor_example.ipynb点、框、多轮迭代都有现成代码可以参考。全图自动掩码生成与调参不想要提示就想要整图所有物体用SamAutomaticMaskGenerator它在图上布点网格批量预测再自动过滤低质量与重复掩码。from segment_anything import SamAutomaticMaskGenerator gen SamAutomaticMaskGenerator( modelsam, points_per_side32, # 网格点数越大越细越慢 pred_iou_thresh0.86, # 模型自评质量过滤线 stability_score_thresh0.92, # 稳定性过滤线 crop_n_layers1, # 额外裁剪层数提高召回 min_mask_region_area100, # 去小区域需 opencv ) masks gen.generate(image) # list[dict] print(len(masks), masks[0].keys()) # segmentation / bbox / area 等每个 mask 是一个 dictsegmentation是 HxW 二值掩码用output_modecoco_rle可换成 COCO RLE 编码配合 pycocotools 直接写标注。参数怎么选见下一节。把掩码解码器导出为 ONNXSAM 的推理成本大头在图像编码器掩码解码器很轻。官方脚本只导出提示编码器 掩码解码器图像编码器仍用 PyTorch 算嵌入所以 ONNX 模型不含骨干体积小、跑得快。python scripts/export_onnx_model.py \ --checkpoint sam_vit_b_01ec64.pth \ --model-type vit_b \ --output sam_decoder.onnx \ --return-single-mask--return-single-mask让 ONNX 只回一个最佳掩码高分辨率图下能省掉多掩码上采样的时间。导出成功后脚本会自动用 ONNX Runtime 跑一遍验证看到 Model has successfully been run with ONNXRuntime 即可。后续怎么用 ONNX 模型推理照抄 notebooks/onnx_model_example.ipynb仓库里的demo/目录则给出了完整的浏览器端 React 应用示例。选择与调参版本取舍model_type骨干规模体积建议vit_b最小约 375MB批量实验、CPU 推理、调参首选vit_l中等约 1.2GB精度和速度折中vit_hdefault最大约 2.4GB最终交付、追求最高质量自动掩码关键参数参数推荐值调整范围依据points_per_side3216~48点数按平方增长显存不够就降到 16pred_iou_thresh0.86~0.880.8~0.95调高减少冗余掩码调低提高召回stability_score_thresh0.920.90~0.95同上两者搭配微调crop_n_layers0~10~20 时对裁剪区补跑找回被网格漏掉的小物体min_mask_region_area0 或 1000~500场景噪声多时设 100 去碎块output_modebinary_maskcoco_rle要落盘/存标注就选 coco_rle调参顺序建议先用 vit_b 默认参数跑通再动points_per_side最后才碰两个阈值。避坑指南现象原因处理办法报 An image must be set with .set_image(...)没设图就调了 predict先predictor.set_image(image)同一张图只需设一次掩码和图像对不上、颜色异常cv2 读的是 BGR 但按 RGB 传入调用时显式写set_image(image, image_formatBGR)generate 时 OOM 或 MemoryErrorpoints_per_side 过高或输出 binary_mask 占内存降到 16或output_modecoco_rle或换 vit_b掩码数量太多、大量重复过滤阈值太松调高pred_iou_thresh/stability_score_thresh检查box_nms_thresh加载检查点报权重形状不匹配model_type 与检查点不一致保持命令行/注册表里的 type 与下载的 .pth 一致ONNX 导出失败或算子报错opset 太低或 PyTorch 版本旧用最新稳定版 PyTorch--opset 17必要时加--gelu-approximate进阶方向浏览器里跑 SAM导出的 ONNX 解码器可以直接在浏览器多线程执行demo/目录就是一个现成的单页 React 应用照 demo/README 起服务即可体验点击出掩码的交互。掩码转训练数据SamAutomaticMaskGenerator的output_modecoco_rle输出可以直接配合 pycocotools 解码、补上category_id后写入 COCO 标注文件作为目标检测或实例分割的标注底稿省去手工描框。要点回顾最短路径pip install -e .后一条python scripts/amg.py就能出全图掩码。交互推理set_image一次、predict多次点用 (x, y) 加标签 1/0框用 xyxy。单点提示有歧义就用multimask_outputTrue按scores取最佳再迭代加点和背景点。model_type永远和检查点保持一致这是最高频的报错来源。ONNX 只导出解码器图像编码器留在 PyTorch 侧算嵌入。相关资源README、提示词推理示例、自动掩码示例、浏览器 demo。【免费下载链接】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),仅供参考
返回列表