ARTICLE DETAIL

资讯详情

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

Bëtum Tool SAM 3 模块实战:Promptable 基础分割与 Mask 转 BBox 的 COCO AP@50 评估管线

Bëtum Tool SAM 3 模块实战:Promptable 基础分割与 Mask 转 BBox 的 COCO AP@50 评估管线 人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本文是 Bëtum Tool 仓库中 SAM 3Segment Anything Model 3模块的完整技术指南。该模块面向 Artemis Workshop 的植物表型视觉提取任务利用 SAM 3 的稠密实例分割能力以文本提示Prompt驱动的概念分割PCS方式输出像素级掩码再通过最小/最大坐标提取将其转换为统一的目标检测格式COCO 边界框最终用 COCOEval 以 AP50 单一指标与其他分组OWL-ViT、YOLO26、DiffusionDet横向对比。读完本文你将掌握SAM 3 在 Bëtum Tool 中的目录结构与执行流程、mask_to_bbox的源码级实现与单元测试验证、端到端推理 Notebook 的分步用法、共享评估入口evaluate_coco的参数语义以及提示词工程、置信度阈值扫描等关键实验变量。1. 模块定位为什么要用分割基础模型做目标检测models/sam3/README.md明确了本模块的定位实现SAM 3的稠密实例分割并构建一条掩码 → 边界框的转换管线以对齐 Workshop 的目标检测评测目标。其核心任务有两类重推理heavy inference直接利用 SAM 3 的零样本能力对图像中所有匹配提示概念的实例输出掩码微调掩码解码器fine-tune mask decoder冻结图像编码器只针对掩码解码器进行下游适配以提升特定农业概念如未成熟腰果的分割质量。之所以走分割→检测路线是因为在 Bëtum Tool 的整体设计中见 betum_tool/README.md四个小组共享同一评测指标AP50COCOEval分组模型技术路线1OWL-ViT开放词汇零样本检测2YOLO26实时监督检测3SAM 3可提示分割 → 边界框4DiffusionDet / InstructPix2Pix生成式感知因此 SAM 3 组面临的科学问题是一个以提示驱动的分割基础模型能否在定位任务上匹敌专门设计的检测模型为了回答这个问题模型输出的像素级掩码必须被转换为标准边界框纳入统一评测框架。2. 目录结构与交付物SAM 3 模块遵循每组只在自己的models/name/目录下工作的约定目录结构如下与 README 中声明一致betum_tool/models/sam3/ ├── README.md # 本模块说明文档 ├── notebooks/ │ └── template_inference.ipynb # 推理 Colab 模板端到端管线 ├── scripts/ │ └── masks_to_bboxes.py # SAM 掩码 → COCO 边界框转换 ├── results/ │ └── ablations.md # 每次实验的 AP50 记录日志 └── tests/ └── masks_to_bboxes_test.py # 转换工具的单元测试各交付物的职责Notebook可一键在 Google Colab 中打开覆盖依赖安装、数据下载、HF 认证、推理、评估、阈值扫描、可视化与结果保存全流程详见第 4 节脚本核心转换工具同时提供掩码分数 → COCO 预测条目的批量接口消融日志以 Markdown 表格记录每次运行的 AP50、提示词集与后处理参数供组内汇报与跨组对比。3. Mask → BBox 转换管线源码与测试印证README 给出了管线的核心调用方式# Extract bounding box from a binary mask from scripts.masks_to_bboxes import mask_to_bbox bbox mask_to_bbox(binary_mask) # Returns [x_min, y_min, width, height]对应实现位于 betum_tool/models/sam3/scripts/masks_to_bboxes.pymask_to_bbox第 36-56 行。其原理是对二值掩码做两次逐行/逐列投影找出非零区域的最小/最大行列坐标def mask_to_bbox(mask): Convert a binary mask to COCO-format [x_min, y_min, width, height]. rows np.any(mask, axis1) cols np.any(mask, axis0) if not rows.any(): return None # Empty mask y_min, y_max np.where(rows)[0][[0, -1]] x_min, x_max np.where(cols)[0][[0, -1]] return [ int(x_min), int(y_min), int(x_max - x_min 1), int(y_max - y_min 1), ]实现要点输入约定mask为形状(height, width)的布尔型 NumPy 数组空掩码处理若某行都不为真rows.any()为假说明掩码为空返回None而不是一个退化的框——调用方需要显式跳过空掩码闭区间修正1COCO 的[x_min, y_min, width, height]约定为像素数量因此宽度计算为x_max - x_min 1、高度为y_max - y_min 1避免相邻像素被少算一格整型输出坐标全部转为int与 COCO JSON 中 bbox 的整数规范一致。同一文件还提供了批量接口pcs_output_to_coco_predictions(masks, scores, image_id, category_id)第 59-82 行它将一组掩码与其置信度分数打包成标准的 COCO 预测字典列表空掩码自动跳过predictions.append({ image_id: image_id, category_id: category_id, bbox: bbox, score: float(score), })3.1 单元测试验证配套测试 betum_tool/models/sam3/tests/masks_to_bboxes_test.py 覆盖了四个关键场景可作为你自行修改转换逻辑时的回归基准测试用例输入期望输出验证点test_mask_to_bbox_empty10×10 全 False 掩码None空掩码返回Nonetest_mask_to_bbox_single_pixel仅(4,5)为 True[5, 4, 1, 1]单像素框test_mask_to_bbox_rectangle行 2-4、列 3-6 为 True[3, 2, 4, 3]矩形区域的坐标与尺寸换算test_pcs_output_to_coco_predictions两个掩码 分数[0.95, 0.85]两条含image_id/category_id/bbox/score的预测批量打包与字段完整性注意测试中的断言bbox [5, 4, 1, 1]再次印证了[x, y, w, h]的坐标在前、宽高在后的 COCO 约定且坐标指像素格索引而非边界坐标。运行测试的方式遵循仓库约定在仓库根目录执行python -m betum_tool.models.sam3.tests.masks_to_bboxes_test仓库使用python -m模块化运行方式见 betum_tool/README.md 的 Running Scripts 一节。4. 端到端推理template_inference.ipynb 分步解析betum_tool/models/sam3/notebooks/template_inference.ipynb 是 README Quick Start 指向的核心执行载体。README 给出的三步快速开始为在 Google Colab 中打开notebooks/template_inference.ipynb按单元格顺序下载数据、运行 SAM 3 推理、将掩码转换为边界框在results/ablations.md中记录你的结果。Notebook 内部将上述过程细化为 11 个阶段其中若干关键阶段值得展开4.1 环境与数据准备Setup安装依赖pip install -q transformers torch torchvision pycocotools Pillow matplotlib numpy gdown——注意transformers需要支持Sam3Model/Sam3Processor的版本稀疏克隆仓库仅拉取betum_tool目录git sparse-checkout set betum_tool避免下载 2GB 的 monorepo 代码下载数据集从 Mendeley Data数据集r46c6bpfpf下载 Coffee Cashew Nut 数据集压缩包并用unrar解压最终验证Cashew/Cashew-Uganda/images与Coffee/Batch1/images结构格式转换调用共享工具 betum_tool/common/flatten_coffee.py 摊平 Coffee 批次再调用 betum_tool/common/yolo_to_coco.py 将 YOLO 标注转换为 COCO JSON--class_map betum_tool/common/class_map.json --split_ratio 0.8生成cashew_val.json/coffee_val.jsonGT 可视化使用 betum_tool/common/visualize_coco.py 的visualize()抽查验证集标注质量。4.2 配置变量ConfigurationNotebook 用一组 Python 变量集中管理实验配置直接对应 README 的Key Parameters to Explore清单是零样本实验最值得调整的部分NUM_EXAMPLES 4 # 冒烟测试设为 None 跑全量数据集 DATASET cashew # [cashew, coffee] MODEL_ID facebook/sam3 # HuggingFace 门控模型仓库 CONFIDENCE_THRESHOLD 0.05 # 零样本起步用低阈值之后调优 SCORE_THRESHOLDS_TO_SWEEP [0.01, 0.05, 0.1, 0.15, 0.2] TEXT_QUERIES { cashew: [cashew tree, cashew flower, premature cashew nut, unripe cashew nut, ripe cashew nut, spoilt cashew nut], coffee: [unripe coffee berry, ripening coffee berry, ripe coffee berry, spoilt coffee berry, coffee tree], }关键说明TEXT_QUERIES的列表顺序必须与 COCO JSON 中的category_id顺序一一对应0, 1, 2, ...。类别映射定义在 betum_tool/common/class_map.jsoncashew 为0tree, 1flower, 2premature, 3unripe, 4ripe, 5spoiltcoffee 为0unripe, 1ripening, 2ripe, 3spoilt, 4coffee_tree由于数据集中unripe咖啡 96.0%与spoilt腰果 29.2%等类别高度不平衡详见 betum_tool/TECHNICAL_BRIEFING.md提示词的选择会显著影响哪些概念被看见。4.3 设备选择与模型加载设备选择按CUDA → MPSApple Silicon→ CPU的优先级自动降级模型加载使用 Transformers 原生接口from transformers import Sam3Model, Sam3Processor processor Sam3Processor.from_pretrained(MODEL_ID) model Sam3Model.from_pretrained(MODEL_ID).to(device)由于facebook/sam3是门控gated模型仓库必须先完成 Hugging Face 认证注册账号 → 在模型页申请访问权限 → 生成 Read 权限的 User Access Token → 在 Notebook 中执行notebook_login()。4.4 推理主循环PCS 输出与框坐标换算Notebook 的核心函数run_sam3_native_pcs展示了 SAM 3 原生 PCS 的完整调用链对每张图、每个文本提示执行inputs processor(imagesimage, textprompt_text, return_tensorspt).to(device) with torch.no_grad(): outputs model(**inputs) results processor.post_process_instance_segmentation( outputs, threshold0.01, # 低阈值先捕捉候选之后统一扫描 mask_threshold0.0, target_sizesinputs.get(original_sizes).tolist(), )[0]results包含三个关键张量masks形状[num_objects, H, W]、boxes形状[num_objects, 4]xyxy 格式、scores形状[num_objects]。随后 Notebook 将模型直接输出的 xyxy 框转换为 COCO 的[x1, y1, w, h]w x2 - x1这与masks_to_bboxes.py的闭区间换算1是两套并行实现二者都服务于同一个目标生成符合 COCO 规范的预测条目{image_id, category_id, bbox, score}。4.5 统一评估与阈值扫描评估阶段调用共享封装 betum_tool/common/evaluate.pyfrom common.evaluate import evaluate_coco results evaluate_coco(gt_jsonCOCO_VAL_JSON, predictionsall_predictions, score_thresholdCONFIDENCE_THRESHOLD) print(fAP50 {results[AP50]})从源码看evaluate_coco第 147-250 行的职责包括灵活的输入形态gt_json与predictions均可传路径、Python 列表或COCO实例predictions为空文件或空列表会给出显式警告并返回全 0 指标阈值过滤score_threshold参数在进入 COCOeval 前先做一次score threshold的预过滤多维指标返回值包含APIoU 0.50:0.95 均值、AP50、AP75与逐类别per_class_ap50逐类 AP50 计算通过对 COCOeval 的 5 维 precision 张量维度[T, R, K, A, M]见_slice_precision_matrix注释切片取 IoU0.50、maxDets最大索引对应的召回维度均值可读报告verboseTrue时打印带类别名与 AP50 的格式化汇总表_print_summary_report。Notebook 还实现了 README 强调的置信度阈值扫描对SCORE_THRESHOLDS_TO_SWEEP中的每个阈值重复调用run_coco_eval输出阈值 vs AP50汇总表用于在精度与召回之间寻找平衡点——低阈值召回更多真实实例高阈值过滤低置信度误检。5. 评估约定与消融日志5.1 统一 COCO JSON 评估README 明确要求所有预测必须转换为 COCO JSON 格式后进行统一评估from shared.evaluate import evaluate_coco results evaluate_coco(gt_pathpath/to/gt.json, pred_pathpath/to/predictions.json)该模块对应的共享实现即 betum_tool/common/evaluate.py注意实际参数名为gt_json与predictions二者均支持文件路径。Notebook 最后一步会把全部预测写入results/{DATASET}_predictions.json用于跨模型分析与与其他分组做对比评测。5.2 消融记录规范betum_tool/models/sam3/results/ablations.md 是实验日志模板要求每次运行一行包含四类信息Results 主表Run | Mode | Dataset | Prompts / Config | Confidence Threshold | AP50 | Notes模板预置了 4 行zero-shot PCS实验Cashew/Coffee × baseline/simple 提示词阈值 0.05提示词工程笔记按baseline如cashew tree,premature cashew nut、simple如tree,flower,premature、domain-specific如cashew tree foliage,cashew inflorescence,immature cashew nut三档记录提示词集及其对 AP50 的影响后处理 / 推理笔记跟踪confidence_threshold默认 0.05、min_mask_area_pixels、nms_iou_threshold三个参数的变化与效果。6. 建议探索的参数空间Key ParametersREADME 在结尾给出了五个实验维度结合源码与 Notebook 可以进一步明确每个维度的操作含义参数维度说明在仓库中的落点提示类型point / box / textSAM 3 支持点、框、文本三类提示本模块默认走文本 PCS 路线run_sam3_native_pcs中processor(images..., text...)每目标点数number of points per object点提示模式下每实例的采样点数量影响掩码细节使用点提示时在processor的input_points中配置掩码解码器微调冻结编码器 vs 全量微调冻结图像编码器只训练掩码解码器可降低算力需求全量微调则适配更强属于任务定义的一部分README Overview可在models/sam3/下扩展训练脚本后处理 NMS对提取出的边界框做非极大值抑制减少同一实例的重复框对应ablations.md中nms_iou_threshold字段置信度阈值低阈值起步0.05保证零样本召回再通过扫描找到最优值CONFIDENCE_THRESHOLD/SCORE_THRESHOLDS_TO_SWEEP/evaluate_coco(score_threshold...)7. 总结SAM 3 模块是 Bëtum Tool 统一 AP50 评测框架下的分割路线代表。其核心价值在于以最小工程代价mask_to_bbox数十行代码 一个 Colab Notebook把基础分割模型的像素级输出无缝接入目标检测评测体系使分割基础模型 vs 检测专用模型的横向对比成为可能。无论你是要复现零样本 PCS 基线、开展提示词消融还是尝试冻结编码器的掩码解码器微调模板推理 Notebook、转换脚本 及其单元测试构成了一个自洽、可验证的起点而 消融日志 则保证了每个实验结论都能被追溯、对比与沉淀。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐Transformers 中的 Mask Generation掩码生成基于 SAM / SAM 2 的分割推理与微调实战Transformers 中的 Mask Generation掩码生成基于 SAM / SAM 2 的分割推理与微调实战 导读 本文讲解 Trans前端UI组件设计系统如何用 Detectron2 COCOEvaluator 在自定义 COCO 格式数据集上评估检测与实例分割 AP如何用 Detectron2 COCOEvaluator 在自定义 COCO 格式数据集上评估检测与实例分割 AP 假设你手上有一个按 COCO 格式标注的验证人工智能计算机视觉深度学习机器学习Darknet中的实例分割Mask YOLO实现与配置指南Darknet中的实例分割Mask YOLO实现与配置指南 在计算机视觉领域目标检测技术已广泛应用于各类场景但仅能提供目标的边界框信息。而实例分割Ins人工智能深度学习计算机视觉机器学习上一篇Awesome Lockpicking资源大全从入门教程到高级锁匠技巧下一篇TurboGears2部署与运维Docker、Nginx和Gunicorn的生产环境配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表