10.2 废片率与重试


10.2 废片率与重试

本节摘要:废片率是质量与成本的交汇点:每一次废片都是一次白花的生成秒数,每一次重试又都是一次新的成本与新的希望。本节先给定义与统计口径——废镜头数除以总生成镜头数,按阶段与原因双维度切;然后把废片原因收进三类:语义跑偏(画面没表达分镜意图)、一致性崩(角色或风格跳变,第 9.2 节的残余敌人)、技术瑕疵(畸变、抖动、文字乱入、时长不足);判定分工遵循第 8.1 节原则——规则先筛、独立模型粗筛、人工终审。重试策略的核心是"只重跑坏镜头"加"对症下药":语义跑偏改提示词、一致性崩回参考图与 seed、技术瑕疵换 seed 降运动;每镜头设重试预算,超限转人工改分镜。边际收益表说明为什么预算通常设在两到三次。

学习目标

  • 定义并正确统计废片率,按原因维度切片归因。
  • 区分三类废片原因并写出各自的判定线索。
  • 为每类原因选择对症的重试手段,而不是盲目重抽。
  • 用重试预算与边际收益决定何时止损改分镜。
  • 维护废片台账并以周为单位看趋势。

一、废片率:定义与口径

废片率等于废镜头数除以总生成镜头数。口径有两个细节:其一,统计单位是"生成次数"而不是"镜头数"——一个镜头重跑三次全废,贡献三个分子;其二,按阶段分账——生成废片、粗剪废片、成片打回是三个不同的问题,混在一起会互相污染归因。废片率直接乘以生成单价就是重跑成本(第 10.1 节核算表里那一行),所以这个数字每周都值得看一眼。

废片率的成本视角(示意) 首轮生成 40s ──▶ 通过 28s(通过率 70%) 重试一轮 12s ──▶ 通过 8s(该轮通过率约 67%) 再试 4s ──▶ 通过 2s 总花费 56s 换 38s 可用镜头:废片率约 32% 每降 10 个百分点 ≈ 单条成本降约 6%(示意口径) ​

二、原因三分类

类别 定义 典型表现 判定线索
语义跑偏 画面未表达分镜意图 主体错了、动作错了、数量错了 对照分镜描述逐项核对
一致性崩 与前后镜头不连续 脸变了、服装跳了、场景不接 缩略图墙并排比对(9.2 节)
技术瑕疵 生成质量缺陷 肢体畸变、抖动闪烁、画面文字乱入、黑尾 放大逐帧与黑帧检测

分类的意义在于处置不同:语义跑偏是"沟通问题"(提示词与模型没对齐),一致性崩是"锚定问题"(参考与 seed 失守),技术瑕疵是"采样问题"(随机性落在了坏点)。判定分工沿用第 8.1 节:规则先筛(时长、黑帧、分辨率,机器秒级完成)、独立的多模态模型粗筛语义贴合(以所用模型能力为准)、人工终审拿不准的样本。人只处理机器筛剩下的疑难件,这是审核带宽(第 9.3 节)能撑住量产的前提。

三、对症重试:只重跑坏镜头

重试的第一纪律来自第 8.3 节:粒度永远是镜头,绝不整条重做。第二纪律是对症:三类原因各有一号药。

# classify_retry.py —— 按废片原因选择重试动作,并执行重试预算 import json BUDGET = {"semantic": 2, "consistency": 2, "technical": 3} ACTION = { "semantic": "收紧提示词:主语前置、动作量化,删掉比喻与副词后重试", "consistency": "回第 9.2 节:核对角色卡版本与 seed 族,必要时重出首帧", "technical": "换 seed 重采样,运动强度降一档,或延长生成秒数补黑尾", } def decide(reject): reason = reject["reason_class"] tried = reject.get("retries", 0) if reason not in ACTION: return {"action": "escalate", "note": "未知原因,直接转人工"} if tried >= BUDGET[reason]: return {"action": "escalate", "note": "超出重试预算,转人工改分镜"} return {"action": ACTION[reason], "retries_after": tried + 1} def main(log_file="ledger/reject_log.jsonl"): for line in open(log_file, encoding="utf-8"): if not line.strip(): continue reject = json.loads(line) print(reject["shot_id"], reject["reason_class"], "->", decide(reject)["action"][:40]) if __name__ == "__main__": main() ​

预算数字的直觉:一致性崩与语义跑偏若两次对症调整仍不通过,说明问题多半不在运气而在结构(分镜本身难生成);技术瑕疵的随机性强,可以多给一次抽卡机会。预算存在镜头契约的 attempts 字段(第 8.3 节),全流水线共享同一份计数。

四、边际收益与止损

重试不是免费的抽卡:示意数据(口径随模型与题材浮动)——首轮通过率约五到六成;对症重试后累计通过率第二轮到七到八成,第三轮勉强八成多。收益急剧递减的原因很直白:容易生成的镜头首轮就过了,剩下的本来就是难啃的骨头。所以止损线画在"改分镜成本低于期望重试成本"处:改分镜是改文本(几乎免费)加一次全新生成;而第五次重试是又一次按秒计费、且通过率不高的赌博。经验法则:同一镜头累计三次失败,停下来看分镜——通常是动作太复杂、主体太多、或景别要求超出模型舒适区,改成分镜语言(拆两个镜头、换景别)比继续抽卡便宜。

五、废片台账

每一次打回都落一行 JSONL,字段固定:镜头号、原因分类、现象细节、处置动作、处置结果。台账的三种消费方式:日 operational——失败镜头清单直接喂给第 8.3 节的隔离重跑;周复盘——按原因分类看趋势,一致性崩占比升高说明角色卡该更新或风格模板被改坏了;月归因——某类题材的语义跑偏长期偏高,说明该题材的提示词模板需要专门沉淀。台账与第 9.3 节账目表的 reject_shots 列同源,与第 10.1 节成本台账通过镜头号互查——每一美元的重跑开销都能回溯到具体原因。

字段集之上再补一个时间戳 at(ISO 日期),日、周、月三级汇总全靠它切时间窗。周汇总不必手工数,一段标准库脚本就能出趋势:

# weekly_rejects.py —— 从废片台账汇总每周打回次数与原因分布(示意) import collections import datetime import json def week_key(iso_date): year, week, _ = datetime.date.fromisoformat(iso_date).isocalendar() return f"{year}-W{week:02d}" def main(log_file="ledger/reject_log.jsonl"): weeks = collections.defaultdict(collections.Counter) for line in open(log_file, encoding="utf-8"): if not line.strip(): continue row = json.loads(line) weeks[week_key(row["at"])][row["reason_class"]] += 1 for week in sorted(weeks): counter = weeks[week] total = sum(counter.values()) detail = ", ".join(f"{name} {count}" for name, count in counter.most_common()) print(f"{week} 打回 {total} 次:{detail}") if __name__ == "__main__": main() ​

脚本只有一个关键点:week_key 用 ISO 周历把日期归到自然周,跨年周不会错位。输出一行一周、原因按次数降序——趋势表不需要图表,纯文本就对齐了。

六、一次周复盘走查

把上一节的消费方式演示一遍。本周产出六条成片、每条八镜头,首轮生成 48 次;台账切片如下(数字均为示意值):

台账切片 数值(示意) 追查动作 结论
首轮打回 48 次中废 19 次 按原因分类计数 语义 8、一致性 6、技术 5,首轮通过率约六成
重试结果 19 次中过 16 次 对照处方是否对症 语义收紧提示词见效最快,一致性回锚定次之
超预算转人工 3 次 读现象细节字段 2 次改分镜(拆镜头、换景别)后一次过,1 次降验收(黑尾剪除即用)
全周合计 生成 69 次,废 22 次 换算成本与趋势 废片率约三成二;额外生成约 105 秒,约 21 美元

再看趋势抓异常(数字为示意值):一致性崩 6 次,占打回总数约三成二,而上周 12 次打回里一致性只有 2 次。按日切窗,异常集中在周三之后——翻 prompts.json 的契约记录,发现周三角色卡升过版本、新旧镜头混用。处置回到第 9.2 节的纪律:受影响镜头按新版本重做,并把"换卡必须全剧重对齐"写进操作清单。这就是周复盘的完整闭环:看趋势不是为了报数,是为了在周三就发现异常,而不是月底看账单时。

七、常见问题与排查

问题一:机器粗筛放行,人工终审打回。 人工优先,判定权在人。关键是善后:把漏判样本登记进台账,现象细节写清"机器为何没拦住",月末统一沉淀成新规则或调粗筛阈值——门禁是活的,靠漏判样本喂养(第 10.3 节)。

问题二:"勉强能用"的镜头算过还是算废。 "勉强"说明判据缺失。把主观感觉拆成可查项:黑尾有没有、时长够不够、语义贴合几分(第 8.1 节的验收条件思路),拆完自然归进三分类之一。判据不清时按废处理——放宽的口子一旦打开,通过率就失去意义。

问题三:重试预算能不能全局调大。 先看边际收益:示意口径下第三轮之后的累计通过率增幅已经很小,调大预算烧掉的是生成秒数。个别题材确需多次抽卡,就单独设该题材的预算,不全局改。

问题四:废片率多少算正常。 没有普适值,唯一有效的参照是自己的周基线。健康曲线是首月高、随模板与角色卡沉淀逐步下探;只升不降说明出了系统性问题——模板被改坏、角色卡被换、或新题材超出模型舒适区。

问题五:改分镜后,原来的废镜头还留吗。 留。台账要完整,废片也是账:月度归因、废片率统计都依赖完整的分子分母。文件本体移入隔离归档目录(第 8.3 节),记录不清删。

本节要点回顾

  • 废片率按生成次数统计、按阶段分账,直接换算为重跑成本。
  • 三分类对症下药:语义改提示词、一致性回锚定、技术换 seed。
  • 判定分工:规则先筛、独立模型粗筛、人工终审疑难件。
  • 重试粒度永远是镜头;预算两到三次,超限止损改分镜。
  • 台账日喂重跑、周看趋势、月做归因,与成本账互查。

废片被拦下了,但"谁来拦、在哪拦"还没有正式建制。下一节把散落各章的检查收编为正式的质量门禁:自动检查守下限,人工抽检守上限,质量分台账给每条片一个可追溯的分数。

作者与出处
原作者:灏天文库
整理人: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U