先物体、后部件。每条给用途、中文原文、这一步到底发了几张图、分别是哪张;末尾单列一份「跑了但没起作用」的清单。
原文来自 dataengine/prompt_text.py 与 dataengine/prompts/。
下面就是 run.py 实际执行的顺序。标「跳过」的是结构上不走的。
--mode object--mode part不是 bug,是「代码里有、当前配置下不生效」,或者「写了但不解决问题」。列出来,下次别再指望它们。
| 项 | 类型 | 为什么不起作用 | 证据 / 影响 |
|---|---|---|---|
--locator-fallback |
空转 | 默认 off:GroundingPI 返回空框时不回退到 VLM |
必须显式传 --locator-fallback vlm |
PART_VERIFICATION_PROMPT(问归属那版) |
死代码 | --mode part 用的是 PART_ONLY_VERIFICATION_PROMPT(不问归属);带归属那版只被旧的 --part-mode 混合模式调用 |
两版并存,容易误以为归属检查还在 |
| 物体 caption 里的「部件」规则 | 近乎空转 | 允许写 <part> of <parent>,但 5–7 行预算被物体占满,模型基本不写 |
100 图实测:288 个 accepted region 里,真正的部件区域 0 个 |
| 部件 caption 的「8–14 行 / 至少 6 个」 | 负作用 | 图里只有 2 个部件时逼模型凑数 | 580 条部件行里 212 条被自己的黑名单挡回(37%) |
| 红色蒙版填充(出题阶段的输入) | 污染源 | 65% 不透明红把物体原色盖住,模型据此写出 Grasp the red handle |
物体管线 4.8% 的题提到「红/高亮」;验区 89% 的拒绝理由提到红蒙版 |
一条管线里每一步都要向模型问一次;问法决定了这一步能拿到什么。
核心思路:先挑「值得被指代的区域」,再验证、再出题。4 步里 3 步送 2 张(②③④),只有 ① 送 1 张。
干什么:让模型先推理、再输出 5–7 个高价值且互不重复的区域。
给定一张图,挑出 5–7 个高价值、互不重复的区域,用自然对话的方式给它们打标签。
在 <reasoning> 里简要回答:
在 <output> 里列出 5–7 行,严格格式:
[<索引>: <标签>]干什么:一次发两张图(① 框、无 mask / ② 框 + mask)加一句指代表达,判断这个 mask 是不是这句话说的东西。
你在验证一个 mask 是否正确地标识了图像中某个指代表达所描述的对象。
给定一张图、一个指代表达,以及可选的 mask(用框标出),判断这个 mask 是否正确。
如果给了 mask:以下三条全部满足才接受。
如果没给 mask:只有当图中确实没有任何东西匹配该表达时才接受。
对自然的指代表达要宽容。人们会用各种方式描述事物。重点看 mask 是否匹配描述,而不是描述本身是否完美。
干什么:对每个合格区域,按 5 个概念维度各问一次。五个模板骨架几乎一样,只有主题不同。
all_regions_colored.png):每个区域一种颜色 + 0..N 编号你是一个专家级 AI,任务是生成有难度、抽象的分割题。
你会拿到:一张图、同一张图的 mask 叠加编号版、以及一份稠密描述(可用 mask 的编号列表)。
设计最多 3 条有挑战性的分割题。每条都必须靠视觉检查,把某一部分区域从其它区域里区分出来。
题目必须对整个画面场景都成立,不能只对那几个 mask 成立。
生成的题只能适用于目标 mask 区域,不能适用于图中任何未标出的区域。
题目必须需要视觉辨别多个候选区域,不能只读描述就能答。
candidates:从描述里挑出的、用户可能会考虑的候选区域satisfying:视觉检查后真正满足题目条件的区域satisfying 必须是 candidates 的真子集(不能完全相同)。空集合法。| 模板 | 题目要考察什么 | 额外强调 |
|---|---|---|
| 实体 ENTITIES | 实例、类别、群体、异常个体 | 按视觉属性(材质、部件、状态、纹理、成组)分组,而不是模糊的功能暗示 |
| 空间 SPATIAL | 排布、位置、包含、远近 | 最高级说法(最近、最大、最左)必须限制在已标出的集合内,例如"最左边的杯子",不能说"最近的物体" |
| 关系 RELATIONS | 动作、状态、事件中的角色 | 锚定在可视觉验证的交互与状态上,避免高层意图被未标出的物体推翻 |
| 可供性 AFFORDANCES | 功能属性、可用性、潜在用途 | 找唯一适用于该 mask 的功能条件,避免和未标出的更合适物体冲突 |
| 物理 PHYSICS | 稳定性、容纳、危险、物理属性 | 只对可验证的物理状态(不稳、会洒、锋利)出题,不做被推翻的全局断言 |
prompt_backends.py 的 concept_prompts(),一处覆盖 5 类 + PARTS。尚未跑批验证。
干什么:一题一验。它直接复用 ② 的验区提示词,只是把两张图换成「原图 + 单题高亮图」、把指代表达换成题目文本。
generated_prompts_viz/NN_prompt.png):只涂这道题指向的区域,顶部印题目原文判断逻辑完全一样:这个被高亮的区域,能不能回答这道题。答不出来就是废题。
核心思路:描述直接产出能喂 SAM3 的短语;验区只问「是不是这个部件」。3 步里 2 步送 2 张(②③),只有 ① 送 1 张。
干什么:不列物体清单,直接输出「物体+部件」的短语,每行一条。
你负责列出机器人操作所需的功能性部件。看图,只报告机械手可以抓、握、按、拉、转的物理子部件。
每一行都会被原样当作分割文本提示使用,所以它必须读起来像一个短的英文名词短语。
parent_missing 从 15 条降到 0干什么:红色高亮是候选 mask,只判断它是不是那个部件。
_part_highlight):65% 红填充 + 2px 白描边你在验证一个用于机器人操作的部件级分割。红色高亮是待验证区域,图中其它部分不高亮。
Q1:高亮覆盖的是「{部件}」本身,而不是整个物体或它的一大部分?
Q2:高亮是否紧贴这个部件,没有吞掉周围大部分物体?
只有当高亮像素就是那个被点名的部件时才接受:不是整个物体,也不是周围物体的大部分。
不要判断归属,不要问这个部件属于哪个物体。只回答高亮区域是不是那个被点名的部件。
干什么:一次发两张图(原图 + 全部件叠加图)加一份部件描述,出最多 3 条题。
all_parts_colored.png):每个部件一种色相overlay_multi 按黄金比例取色:红 / 蓝 / 紫…),
而且部件这张 all_parts_colored.png 没有画 0..N 的编号标签——编号只出现在物体侧的 all_regions_colored.png 上。
于是模型只能靠「这块被涂成什么颜色」来指代:这既是题目写成「红色的把手」的直接来源,
也是「把整条手臂当一个部件」的诱因之一(整条手臂被涂成一整块,看不出内部还有子部件)。
(v2 已在请求里加了「彩色是标注,不是颜色」的说明,但渲染本身还没改。)
你是一个专家级 AI,任务是针对物体的功能性部件生成分割题。
你会拿到一张图,以及同一张图上叠加并编号了已接受部件 mask 的副本。下方的稠密描述只列出部件区域(例如「mug handle」「bottle cap」)。
设计最多 3 条分割题,题目必须要求观察某个部件及其父物体。目标必须恰好是某一个高亮的部件区域。
每条题都必须同时点明父物体和部件,以及这个部件支持的动作。一条能被整个物体回答、而不是被部件回答的题是无效的。
题目必须只适用于被高亮的部件,而不适用于图中任何其它未标出的区域。
从部件本身选动词,不要套模板。对一个抓不住的部件用「抓」是错误,哪怕句子读起来很顺。
| 部件 | 该用的动词 |
|---|---|
| handle, grip, lever, strap, tab, drawer | 抓 / 拉(grasp / pull) |
| button, switch, pedal, key | 按 / 推(press / push) |
| cap, lid, knob, dial, valve, crank | 转 / 开 / 关(turn / open / close) |
| blade, blade edge | 切(cut) |
| spout, nozzle | 倒(pour) |
| rim, edge, outline | 通常不可操作,跳过 |
| end effector, gripper, robot arm, wrist | 永远不用「抓」——这是机器人自己的执行机构,不是操作目标。跳过,或改问接触 / 功能 |
candidates:描述里用户可能考虑到的部件区域satisfying:视觉检查后真正符合题目的候选satisfying 必须是 candidates 的真子集concept_family 设为 parts,sub_concept 设为 grasp / function / spatial这是两条管线唯一「从根本上不同」的地方,其余 prompt 只是上下游关系。
| 维度 | 物体描述 | 部件描述 |
|---|---|---|
| 输出行数 | 5–7 | 8–14(争取 ≥6) |
| 编号 | 有 [0: …] | 没有 |
| 单位 | 一个物体 / 一块区域 | 一个「物体 + 部件」短语 |
| 物体名 | 作为基础类别写在最前 | 嵌进短语(mug handle) |
| 推理阶段 | 有(先写 reasoning) | 没有,直接输出 |
| Stuff 区域 | 允许(墙 / 地板 / 天空) | 禁止 |
| 人体 | 允许 person | 禁止(人体部位也不算) |
| 后续步骤 | 喂 GroundingPI 出框 | 直接喂 SAM3 |
| 设计 | 为了什么 | 代价 / 实测 |
|---|---|---|
| 物体描述允许 stuff | 墙、桌面、地板也是合法指代对象 | 切出大量大面积背景;低 IoU 样本几乎都是 stuff |
| 验区提示词「要宽容」 | 避免把正确区域误拒 | 接受率 64.5%,但也放进了一些边界模糊的 mask |
| 五类分开问 | 每类问法不同,能问出不同类型的题 | 每区域 3.2 道题,调用量占全流程 15% |
| 部件描述不带编号 | 不依赖父物体索引,parent_missing 归零 | 无法表达「左边那个杯子的把手」这类消歧 |
| 部件验区不问归属 | 避免模型越界判断,救回 32 个部件 | 如果描述把部件挂错物体,验区发现不了 |