ValueError: (‘The batch size of the image embeddings and the input points must be the same. ‘, ‘Got 5 and 1 respectively.’, ‘ if you want to pass multiple points for the same image, make sure

该报错通常出现在使用 Transformers 的 mask-generation pipeline 运行 SAM 模型、并把 crops_n_layers 设为大于 0 的场景。优先排查是否存在“pipeline 在裁剪模式下产生多个输出、与输入点 batch size 不一致”的已知 bug,而

快速结论:该报错通常出现在使用 Transformers 的 mask-generation pipeline 运行 SAM 模型、并把 crops_n_layers 设为大于 0 的场景。优先排查是否存在“pipeline 在裁剪模式下产生多个输出、与输入点 batch size 不一致”的已知 bug,而不是先改输入点数量。

适用环境:Issue 中用户环境为 Windows,使用 pip 安装的 transformers(site-packages 路径),模型为 facebook/sam-vit-base 与 facebook/sam-vit-huge,通过 pipeline(“mask-generation”, device=0) 调用;Issue 未明确给出 Python、PyTorch、CUDA 与显卡版本。

最快修复方案:暂无确认的一步修复方案。Issue 讨论确认这是 pipeline 侧的 bug,并提到已有 PR 提交修复,但讨论链中没有给出已验证的版本升级或参数替代方案。

注意事项:把 crops_n_layers 改回 0 可以让流程避开该分支,但这不是 Issue 中验证过的修复,只是规避路径;不要据此判断 SAM 模型本身不支持裁剪。真正修复需等待包含对应 PR 的 transformers 版本发布。

问题场景

用户在 Windows 环境下用 Transformers 加载 mask-generation pipeline,模型为 facebook/sam-vit-base(报错栈中另出现 facebook/sam-vit-huge),调用时传入 points_per_batch=64 和 crops_n_layers=1。当 crops_n_layers 保持默认 0 时未报告问题;一旦设为大于 0,pipeline 内部前向计算阶段就抛出 batch size 不一致的 ValueError。维护者在讨论中确认:SAM 模型本身可能已正确支持该参数,问题出在 pipeline 代码在裁剪模式下拿到多个输出,导致真实 batch size 判断混乱。

报错原文

ValueError: ('The batch size of the image embeddings and the input points must be the same. ', 'Got 5 and 1 respectively.', ' if you want to pass multiple points for the same image, make sure

原因分析

最可能的原因在 mask-generation pipeline,而不是用户调用参数写错。SAM 在 crops_n_layers > 0 时会按裁剪区域产生多组图像嵌入/多份输出,而 pipeline 仍按单张图像的输入点数量(此处为 1)去对齐 batch,于是出现“图像嵌入 batch 为 5、输入点 batch 为 1”的错配。Issue 讨论中维护者已将该问题定性为 bug,并说明模型侧可能支持、pipeline 侧处理多输出时存在混淆。报错信息本身提示“想为同一张图传入多个点”,但在这个场景下更像是 pipeline 内部拼接 batch 的逻辑问题,而非用户真的少传了 4 个点。

环境排查

  • 确认 transformers 版本:Issue 未给出具体版本号,需自行核对所用版本是否仍包含未修复的 mask_generation.py 逻辑。
  • 确认调用方式:是否使用 pipeline(“mask-generation”, model=”facebook/sam-vit-base”),以及是否把 crops_n_layers 设为大于 0。
  • 确认传参与数据形态:points_per_batch 的取值,以及传入的是单张 PIL 图像还是图像列表(报错示例中两种写法都出现过)。
  • 确认 Python、PyTorch、CUDA 与显卡版本:Issue 未提供,属于信息缺口;若报错行为与讨论不一致,应优先补齐这些信息再排查。
  • 确认操作系统相关差异:Issue 用户为 Windows,路径显示为本地虚拟环境;不同平台上的 pipeline 行为是否一致,Issue 未验证。

解决步骤

  1. 先复现并固定最小用例:使用单张图片、crops_n_layers=1、points_per_batch=64 调用 mask-generation pipeline,确认能稳定复现 ValueError。
  2. 对照测试:将 crops_n_layers 改回 0 再运行同一用例,确认报错消失,从而把问题范围锁定在裁剪层数大于 0 的 pipeline 分支(可优先尝试的规避方式)。
  3. 检查本地安装的 transformers/pipelines/mask_generation.py 是否仍是报错栈中涉及多输出 batch 处理逻辑的版本;若使用的是旧版本,关注官方仓库中对应 PR 是否已合入并随新版本发布。
  4. 若已能访问修复后的代码或版本,升级后重跑同一最小用例;Issue 讨论中仅提到 PR 已提交并处理了评论,未确认合入版本与发布版本,因此升级前应先核对变更内容。
  5. 若无法升级,在 issue 或 PR 下补充你的环境信息与复现脚本,便于维护者确认修复是否覆盖你的调用形态。

验证方法

用修复后版本或规避参数重新执行同一段最小脚本:若 crops_n_layers=1 时不再出现 “The batch size of the image embeddings and the input points must be the same” 的 ValueError,且能正常返回 masks 输出,即可认为问题已解决;同时应确认 crops_n_layers=0 的原有行为未受影响。Issue 本身未提供修复后的输出示例,验证结果需以本地实际运行结果为准。

参考来源

huggingface/transformers #35530

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29595

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注