
Segment Anything小白入门Windows一键运行SAM目标分割Segment Anything小白入门Windows一键运行SAM目标分割一、SAM到底是什么二、SAM为什么与普通分割模型不同三、SAM使用了多大规模的数据四、为什么本文使用ViT-B五、运行前需要准备什么六、代码包中有什么七、第一次怎样安装7.1 有NVIDIA显卡7.2 没有NVIDIA显卡八、怎样判断运行成功九、最推荐的小白方式鼠标点击分割十、点提示分割代码怎样理解十一、矩形框提示怎样运行十二、怎样自动分割整幅图十三、自动分割参数是什么意思十四、怎样使用自己的图片十五、CPU和GPU有何区别CPUNVIDIA GPU十六、为什么第一次运行最慢十七、常见错误17.1 找不到Python17.2 CUDA available为False17.3 模型下载失败17.4 输出目标不正确17.5 自动掩膜太多、太碎17.6 内存或显存不足十八、SAM能不能直接用于遥感影像十九、SAM有哪些局限二十、SAM 1和SAM 2是什么关系二十一、总结Segment Anything小白入门Windows一键运行SAM目标分割一句话读懂给SAM一张图片再点击目标、画一个矩形框或者让它自动扫描整幅图SAM就可以输出目标对应的二值掩膜。本文不训练模型只使用Meta公开的预训练ViT-B模型让小白在Windows中完成第一次图像分割。本文配套代码包已经处理Windows安装步骤分散不知道怎样下载模型不知道点坐标和框坐标怎样输入CPU与GPU环境容易混淆中文压缩包解压后乱码官方Notebook不方便直接双击运行。一、SAM到底是什么SAM全称为Segment Anything Model中文通常称为“分割一切模型”。图像分类回答图片里有没有汽车目标检测回答汽车在哪里给出一个矩形框。图像分割回答汽车具体由哪些像素组成SAM输出的核心结果是掩膜目标像素 1 背景像素 0因此SAM可以用于提取物体轮廓、制作训练标签、从背景中抠出目标以及为分类、面积统计和变化检测提供对象掩膜。二、SAM为什么与普通分割模型不同传统语义分割模型通常需要准备某一类目标的标注数据再进行训练。SAM的核心思路是“可提示分割”。用户可以提供一个前景点一个背景点一个矩形框一个已有的粗掩膜。模型根据提示返回目标掩膜。输入图片 ↓ 图像编码器提取整幅图特征 ↓ 输入点、框或掩膜提示 ↓ 提示编码器理解提示位置 ↓ 掩膜解码器输出目标掩膜SAM并不是先判断“这是一辆汽车”再找汽车轮廓。它更接近根据用户指出的位置找出那里最合理的完整对象。三、SAM使用了多大规模的数据SAM论文配套发布SA-1B数据集包含约1100万幅图片和超过10亿个掩膜。大规模数据使SAM能够以零样本方式迁移到许多新图像和新任务中但这不代表它在所有专业图像上都一定准确。在遥感、医学、显微镜和SAR图像中目标尺度、纹理以及成像机理可能与自然照片有明显差异因此结果仍需人工核验、领域适配或微调。四、为什么本文使用ViT-B官方SAM 1提供三种主要模型模型特点适合人群ViT-B体积最小、资源占用较低小白入门ViT-L模型更大有较好GPUViT-H模型最大高显存设备本文固定使用sam_vit_b_01ec64.pth文件约375 MB。选择ViT-B不是因为它一定最好而是因为它最容易下载和运行。五、运行前需要准备什么需要Windows 10或Windows 11 Python 3.11或Python 3.12 至少约2 GB可用磁盘空间 能够联网有NVIDIA显卡更好但不是必须。安装Python时必须勾选Add Python to PATH六、代码包中有什么Remote sensing knowledge for Everyone_SAM.zip ├── START_HERE.txt ├── README_FIRST.md ├── Install_CPU.bat ├── Install_NVIDIA_GPU.bat ├── Run_Click_to_Segment.bat ├── Run_Point_Prompt.bat ├── Run_Box_Prompt.bat ├── Run_Automatic_Masks.bat ├── 00_Download_Model.py ├── 01_Check_Environment.py ├── 02_Point_Prompt.py ├── 03_Box_Prompt.py ├── 04_Automatic_Masks.py ├── 05_Click_to_Segment.py ├── sam_utils.py ├── input ├── models └── outputs所有文件名和文件夹名均使用英文避免Windows不同解压软件对中文ZIP文件名的编码处理不一致。中文文章和说明统一保存为UTF-8 with BOM。七、第一次怎样安装7.1 有NVIDIA显卡双击Install_NVIDIA_GPU.bat7.2 没有NVIDIA显卡双击Install_CPU.bat安装脚本会自动完成创建.venv虚拟环境 安装PyTorch和TorchVision 安装OpenCV、NumPy和Matplotlib 从官方GitHub压缩包安装segment-anything 下载官方ViT-B权重 检查运行环境 运行点提示示例这里使用GitHub ZIP安装因此电脑不需要额外安装Git。八、怎样判断运行成功第一次安装结束后打开outputs/point_prompt_result.png图片中会显示原始图片黄色提示点绿色半透明分割区域。同时会生成outputs/point_prompt_mask.png这是黑白二值掩膜白色 目标 黑色 背景九、最推荐的小白方式鼠标点击分割双击Run_Click_to_Segment.bat窗口打开后鼠标左键点击需要分割的对象 S执行SAM分割 R清除提示点并重新选择 Q或Esc退出结果自动保存到outputs/click_result.png outputs/click_mask.png这种方式不需要手工计算坐标是最适合小白的使用方式。十、点提示分割代码怎样理解核心代码fromsegment_anythingimportSamPredictor,sam_model_registry samsam_model_registry[vit_b](checkpointmodels/sam_vit_b_01ec64.pth)sam.to(cuda)predictorSamPredictor(sam)predictor.set_image(image)masks,scores,logitspredictor.predict(point_coordspoint,point_labelslabel,multimask_outputTrue,)point_coords保存提示点坐标。例如point[[680,325]]表示从图片左边向右680个像素、从顶部向下325个像素。point_labels1表示前景点也就是这个点位于我想要的目标内部。multimask_outputTrue表示模型返回多个候选掩膜代码再根据预测IoU分数选择最佳结果。十一、矩形框提示怎样运行双击Run_Box_Prompt.bat框提示由四个坐标组成[x1, y1, x2, y2]其中x1, y1左上角 x2, y2右下角核心代码boxnp.array([x1,y1,x2,y2])masks,scores,logitspredictor.predict(boxbox,multimask_outputFalse,)框提示比单个点提供更多空间约束。当多个对象靠得很近、单点容易选错时矩形框往往更稳妥。十二、怎样自动分割整幅图双击Run_Automatic_Masks.bat核心类为SamAutomaticMaskGenerator它会在整幅图上布置多个提示点生成大量候选掩膜再根据预测IoU、稳定性、重叠关系和最小区域面积筛选结果。输出包括outputs/automatic_masks_overview.png outputs/automatic_masks/mask_000.png outputs/automatic_masks/mask_001.png outputs/automatic_masks/metadata.csv自动分割不是只运行一次点提示而是要测试许多提示点因此比点提示和框提示慢得多。CPU环境下可能需要较长时间。十三、自动分割参数是什么意思SamAutomaticMaskGenerator(modelsam,points_per_side16,pred_iou_thresh0.86,stability_score_thresh0.92,min_mask_region_area100,)参数小白解释points_per_side每一边布置多少个提示点pred_iou_thresh预测质量低于该值时删除stability_score_thresh不稳定掩膜低于该值时删除min_mask_region_area删除面积过小的区域掩膜太多时可以降低points_per_side或提高后三个阈值。掩膜太少时反向调整。十四、怎样使用自己的图片将图片放入input例如input/my_photo.jpg在代码包目录打开命令行.venv\Scripts\activate python 02_Point_Prompt.py --image input/my_photo.jpg --x 400 --y 300矩形框分割python 03_Box_Prompt.py --image input/my_photo.jpg --x1 200 --y1 150 --x2 700 --y2 500自动分割python 04_Automatic_Masks.py --image input/my_photo.jpg不想计算坐标时直接使用鼠标点击程序。十五、CPU和GPU有何区别CPU优点没有NVIDIA显卡也能运行安装简单。缺点图像编码较慢自动生成掩膜尤其慢。NVIDIA GPU优点图像编码速度明显提高自动分割更实用。缺点需要较新的NVIDIA驱动并正确安装PyTorch CUDA版本。代码会自动判断devicecudaiftorch.cuda.is_available()elsecpu因此不需要手工修改设备名称。十六、为什么第一次运行最慢第一次运行包含下载和安装Python依赖下载约375 MB的ViT-B权重第一次加载模型并编码图片。模型下载后保存在models/sam_vit_b_01ec64.pth以后不会重复下载。同一张图片使用不同提示时可以复用图像编码结果。本文的鼠标交互程序只在启动时执行一次predictor.set_image(image)后续点击主要运行轻量级掩膜解码器。十七、常见错误17.1 找不到Python错误类似python is not recognized重新安装Python 3.11或3.12并勾选Add Python to PATH。17.2 CUDA available为False可能原因没有NVIDIA显卡、驱动过旧、安装了CPU版PyTorch或.venv中残留旧环境。处理方法更新NVIDIA驱动删除代码包中的.venv重新双击Install_NVIDIA_GPU.bat。17.3 模型下载失败执行.venv\Scripts\activate python 00_Download_Model.py也可以手动下载https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth放入models文件夹。17.4 输出目标不正确可以尝试把提示点放在目标中心使用矩形框约束范围避免点击目标边缘使用更清晰、对比度更高的图片对专业遥感影像分块处理对结果增加人工筛选和后处理。17.5 自动掩膜太多、太碎提高pred_iou_thresh、stability_score_thresh和min_mask_region_area。17.6 内存或显存不足先使用ViT-B不要直接改成ViT-H一次只处理一张图关闭其他占用显存的软件对超大影像先切片。十八、SAM能不能直接用于遥感影像可以用于候选对象提取和辅助标注但不能把它当作无需验证的遥感专题分类器。SAM可以尝试提取水体斑块 建筑轮廓 农田地块 道路或河道候选区 洪水边界候选区 滑坡体候选区但需要注意遥感影像尺度与自然照片不同小目标可能低于模型有效表达尺度多光谱数据需转换为三通道图像SAR散斑与自然影像纹理不同SAM只输出对象掩膜不自动给出语义类别大幅影像需要切片、重叠和拼接洪水、阴影、永久水体和湿土仍需专业规则区分。更可靠的遥感流程是遥感影像预处理 ↓ 指数、SAR或变化检测确定候选区域 ↓ SAM根据点或框细化对象边界 ↓ 规则或分类器赋予语义类别 ↓ 形态学处理和人工核验 ↓ 输出专题产品十九、SAM有哪些局限SAM输出掩膜但不一定知道对象类别相似或相邻目标可能被合并很小、很细或边界模糊的目标可能分割不准专业领域图像存在域差异自动分割可能产生重复或碎片掩膜大图和自动掩膜需要较多计算资源结果必须结合业务规则与精度验证SAM 1主要面向静态图片不是视频目标持续跟踪模型。二十、SAM 1和SAM 2是什么关系本文是SAM 1。SAM 2进一步支持图片和视频中的可提示分割并加入跨帧记忆能力。本文没有把SAM 1代码替换成SAM 2避免仓库、模型权重和API混用。学习SAM 1仍有价值因为它API简单、资料丰富点提示、框提示和自动掩膜流程清晰许多已有工程仍使用SAM 1。二十一、总结小白运行SAM只需要第一步安装Python 3.11或3.12 第二步解压代码包 第三步按硬件双击CPU或GPU安装脚本 第四步打开outputs查看结果最推荐的交互方式双击Run_Click_to_Segment.bat 左键点击目标 按S执行分割成功标志模型成功下载 segment-anything导入成功 输出point_prompt_result.png 输出二值mask.png到这里就完成了第一次Segment Anything目标分割。