同一个机制,不同的症状
在语言模型上,幻觉常被解释成「编了一条不存在的引用」。视觉模型里机制完全一样,只是症状更容易看见。扩散模型学到的是「什么样的图像看起来可信」,它没有学到手有五根指头、反射要遵守几何、字母要拼成单词。这些东西只有在训练数据里统计上足够一致时,它才会照着复现。
手之所以成了著名案例,是因为照片里的手变化极大:被遮挡、被透视压缩、互相交叠。模型学到的是「手形区域」的分布,于是它产出手形区域。整个过程里没有任何一步在数指头。
你真正会遇到的几类
- 解剖结构。 手指、牙齿、耳朵,以及关节处的四肢。在运动中、人群里、以及尺寸很小时最糟。
- 文字排印。 招牌、标签、包装、屏幕上的字。新模型进步很快,但超过几个单词就仍然不可靠。
- 物理与因果。 水流方向不对、影子找不到光源、布料无视重力、视频里物体互相穿模。
- 物件粘连。 背带融进肩膀、眼镜从颧骨里长出来、椅子腿变成桌子腿。小而重叠的细节是模型信号最弱的地方。
- 放大时凭空补细节。 也就是放大工具那一类。严格说这不是它出错,这就是它的本职,只不过被用在了你其实想要「保真」的地方。
- 风格串味。 两个互相冲突的参考被平均成一种谁也不是的观感。
- 视频里的时间性编造。 物体在片子中途冒出来,或者背景里的某个元素在第一秒和第三秒不是同一个东西。
怎么把它压下去
按在真实项目里的收益排序:
- 给图,别给描述。 参考图、首帧,或者低幅度图生图。这一招直接把「原本会发生编造」的那片抽样空间整体拿掉了。
- 重跑局部,别重跑整张。 用紧贴的蒙版把一只坏手重绘一次,成本是一次小运行;整张重摇则会把已经对了的东西一起丢掉。
- 让它离精细部位远一点。 把手、文字、首饰放到虚焦里、画外,或者挡在物体后面。这招便宜,而且是正当的构图选择,不是妥协。
- 文字放到后期做。 在生成的底板上合成真实字体,比反复重摇又快又稳,而且任何尺寸下都清晰。
- 对反复出现的瑕疵用负面提示词。 它对某个具体的重复缺陷有效,对结构性弱点无效。
- 降低单次放大倍率。 保守地放两次,编造出的东西比激进地放一次少。
- 在往上叠工序之前先检查。 这个问题最贵的版本是:镜头已经动画、调色、剪进片子了,才发现多了一根手指。
这是一个判断题
任何压制编造的手段都有代价:多一道工序、多一层约束、更窄的结果。有用的问题不是「模型是不是在产生幻觉」,因为从「它产出的一切都是编的」这个意义上说,它一直都在。真正的问题是:编出来的那部分,落在了要紧的地方吗?
做情绪板,永远不要紧;做带真实商标的产品图,永远要紧。开工前先分清自己在做哪一种,这才是让模型幻觉不至于变成一整天返工的关键。