
Edit Banana 的分割大脑微调 SAM 3 精准识别图表元素详解【免费下载链接】Edit-BananaEdit Banana: 一个将静态内容转换为可编辑形态的框架项目地址: https://gitcode.com/BIT-DataLab/Edit-BananaEdit Banana是一个将静态内容流程图、架构图、公式图转换为可编辑 DrawIO 形态的开源框架其核心分割大脑正是经过微调的SAM 3Segment Anything Model 3通过文本提示词驱动精准识别图中的矩形、菱形、箭头、图标和背景色块等图表元素再与 OCR 文本结果合并最终输出可拖拽、可改色的可编辑 XML。本文带你搞清楚这个大脑是怎么工作的、微调带来了什么提升、以及如何在本地跑起来。一、先认识一下分割大脑在流水线中的位置Edit Banana 的处理流水线可以概括为输入图片 → SAM 3 分割 → OCR 文本提取 → 图形/图标处理 → XML 合并输出。其中 SAM 3 分割是决定还原质量的第一道关卡——分割得越准后面的形状、箭头、颜色还原才越稳。主入口 main.py 中分割步骤会输出两类中间产物sam3_extraction.png每个元素用不同颜色标注的可视化图图片类绿色、箭头红色、图形蓝色、背景黄色sam3_metadata.json每个元素的包围盒、置信度、多边形轮廓等元数据。想直观看到大脑切出了什么看这张可视化图就够了。二、为什么选 SAM 3用提示词代替点击传统分割模型需要人手动点选目标无法批量处理整张图表。SAM 3 支持文本提示词分割给模型一句 rectangle它就能返回图中所有矩形的掩码mask、包围盒bbox和置信度分数。这正是图表转换最需要的能力——流程图里的元素天然可以用文字描述矩形、菱形、椭圆、箭头、图标、背景面板。模型封装位于 modules/sam3_info_extractor.py 的predict方法中每个提示词会独立推理一次依次过滤置信度过滤低于该分组阈值如 0.5的结果直接丢弃最小面积过滤面积太小的噪点框如 100 像素以下不保留轮廓提取用 OpenCV 从 mask 提取多边形供后续矢量化和取色使用。同时内置了LRU 图像缓存sam3_info_extractor.py#L320-L343同一张图片多轮提示词扫描时只需编码一次速度提升明显。三、微调的关键四组提示词词库直接拿预训练 SAM 3 来切图表效果并不理想——模型对流程图矩形这种专业语境并不敏感。Edit Banana 的做法是对 SAM 3 的 mask decoder 进行微调让它在图表元素语境下更听话同时把提示词组织成四个分组每组配有独立的阈值与优先级分组提示词示例置信度阈值最小面积优先级background 背景容器panel、container、filled region0.25宽松多召回5001image 图片图标icon、picture、logo、chart0.51002shape 基本图形rectangle、rounded rectangle、diamond、ellipse0.52003arrow 箭头连线arrow、line、connector0.45504提示词定义在 prompts/shape.py、prompts/arrow.py、prompts/image.py 和 prompts/background.py阈值配置则在 config/config.yaml.example 的prompt_groups段。两个设计细节很值得新手注意处理顺序是 background → shape → image → arrow见 sam3_info_extractor.py#L431-L436先切大背景再切小元素减少漏检优先级越高越优先保留箭头常与其他元素重叠所以给了最高优先级 4去重时优先保箭头。想查看当前生效的提示词配置可运行python main.py --show-prompts无需读一行源码。四、分割后处理三步去重让元素干净多组提示词扫描必然产生大量重叠框比如一个矩形同时被 rectangle 和 container 命中Edit Banana 用三步清洗sam3_info_extractor.py#L469-L473组间 IoU 去重sam3_info_extractor.py#L748-L870按优先级 → 置信度排序重叠度IoU超过 0.7 的保留强者箭头参与的比较则提高到 0.85避免误杀图形 vs 图片智能取舍当基本图形与图片类元素高度重叠时优先保留图片类真实照片不应被当成色块大包含小过滤sam3_info_extractor.py#L889-L942若小元素 85% 以上被某个图片类大图包含则只保留大图防止图里的小箭头被单独切出来。文字类元素另有黑名单机制text_filter见 config/config.yaml.example把误检出的 text/word/label 交给 OCR 通道处理避免与文字模块抢地盘。五、本地部署三步装好分割大脑完整步骤见 docs/SETUP_SAM3.md核心只有三步安装 SAM 3 库运行bash scripts/setup_sam3.sh会自动克隆库并复制 BPE 词表到models/然后用python -c from sam3.model_builder import build_sam3_image_model; print(OK)验证放置权重把sam3.pt放到models/sam3_ms/目录ModelScope 或 Hugging Face 均可获取修改配置cp config/config.yaml.example config/config.yaml确认sam3.checkpoint_path与sam3.bpe_path指向真实文件config/config.yaml.example#L3-L11。 常见坑checkpoint 必须是.pt格式GPU 架构不匹配时可在配置中加device: cpu降级运行。装好后执行python main.py -i input/test.png在output/下即可看到分割可视化、元数据和最终的 DrawIO XML。若需要多进程/高并发部署项目还内置了独立的 SAM 3 HTTP 服务参考 sam3_service/server.py 与 sam3_service/run_servers.sh。六、效果对比从不能碰到随便改分割质量直接决定最终还原度。下面这组对比里静态原理图被完整拆成了可独立选中的容器、连线与图标在 Web 端分割错误还可以人工修复后再保存七、常见问题新手向Q1分割漏检了某个元素怎么办降低对应分组的score_threshold如 0.5 → 0.4或减小min_area改完config.yaml后重新运行即可无需改代码。Q2同一元素被重复识别调高deduplication.iou_threshold的相反方向——即让去重更激进降低阈值组内去重阈值默认是跨组阈值加 0.15sam3_info_extractor.py#L640-L649。Q3能只用部分分组跑吗可以。python main.py -i input/test.png --groups shape arrow只分割图形和箭头调试时非常好用。Q4CPU 能跑吗可以但速度明显变慢建议至少准备一张支持 CUDA 的 GPU。八、写在最后Edit Banana 的分割大脑本质上做了两件事微调 SAM 3 使其适配图表语境再用分组提示词 多级去重把原始掩码打磨成干净的元素清单。对新手而言理解这四组提示词、IoU 去重和阈值配置就已经掌握了 90% 的调优思路——剩下的交给 README_CN.md 里的完整使用文档吧。【免费下载链接】Edit-BananaEdit Banana: 一个将静态内容转换为可编辑形态的框架项目地址: https://gitcode.com/BIT-DataLab/Edit-Banana创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考