现象
角色在一段动作内单调变大,不是随机抖动。线上真实产出实测(8081,core_span 逐帧量本体高):
| 任务 |
动作 |
帧数 |
首 1/4 → 末 1/4 |
增幅 |
线性斜率 |
| 94 |
walk |
32 |
137.5 → 165.4 |
+20.3% |
+1.17 px/帧 |
| 91 |
custom |
32 |
69.6 → 157.8 |
+126.6% |
+3.65 px/帧 |
任务 94 的逐帧序列:
132 133 136 139 141 142 139 138 141 146 146 148 146 145 149 155
155 153 151 154 157 161 160 161 159 160 162 170 169 167 168 168
几乎无回落,是趋势不是噪声。
原因
postprocess.pack.align_bottom_center 按设计整段共用一个缩放系数,其 docstring 写明不逐帧归一化,理由是「逐帧各自缩放到等高会把走路自然的身高起伏(实测约 4%)反向变成忽大忽小」。
该理由的前提是源帧只有小幅自然波动。但 i2v 会引入推镜/角色走向镜头,产生单调放大;统一缩放对整段乘同一个系数,趋势原样保留。
#280 修的是另一个失效模式(定标基准被披风、武器、翅膀等延展物撑大,属跨动作口径),与本条不重叠。
取舍需要重估
拒绝逐帧归一是为了保护 4% 的真实身高起伏,而实测漂移是 20%–127%,大一到两个数量级。当前取舍在真实数据上不成立。
但直接改成逐帧归一也不对:那会把真实起伏一起压平,蹲下的帧被放大、伸展的帧被缩小,正是原 docstring 担心的问题。
建议方向
分离「趋势」与「起伏」:对逐帧本体高做线性(或低阶)拟合,只除掉拟合出的趋势项,保留残差。这样单调漂移被消掉,4% 的高频起伏原样保留。
需要一并确定的:
- 趋势项该在哪一层消——
derive 出帧时,还是 align_bottom_center 定标时。
- 真实位移动作(跳跃、冲刺)是否要豁免,避免把有意的靠近镜头也抹平。
- 判据放进
ActionQuality,让调用方能看见「这段的尺度漂移是多少」,而不是只能肉眼看。
现象
角色在一段动作内单调变大,不是随机抖动。线上真实产出实测(8081,
core_span逐帧量本体高):任务 94 的逐帧序列:
几乎无回落,是趋势不是噪声。
原因
postprocess.pack.align_bottom_center按设计整段共用一个缩放系数,其 docstring 写明不逐帧归一化,理由是「逐帧各自缩放到等高会把走路自然的身高起伏(实测约 4%)反向变成忽大忽小」。该理由的前提是源帧只有小幅自然波动。但 i2v 会引入推镜/角色走向镜头,产生单调放大;统一缩放对整段乘同一个系数,趋势原样保留。
#280 修的是另一个失效模式(定标基准被披风、武器、翅膀等延展物撑大,属跨动作口径),与本条不重叠。
取舍需要重估
拒绝逐帧归一是为了保护 4% 的真实身高起伏,而实测漂移是 20%–127%,大一到两个数量级。当前取舍在真实数据上不成立。
但直接改成逐帧归一也不对:那会把真实起伏一起压平,蹲下的帧被放大、伸展的帧被缩小,正是原 docstring 担心的问题。
建议方向
分离「趋势」与「起伏」:对逐帧本体高做线性(或低阶)拟合,只除掉拟合出的趋势项,保留残差。这样单调漂移被消掉,4% 的高频起伏原样保留。
需要一并确定的:
derive出帧时,还是align_bottom_center定标时。ActionQuality,让调用方能看见「这段的尺度漂移是多少」,而不是只能肉眼看。