缺失像素不是黑色像素:部分卷积怎样重新计数并更新掩码

昨天 3阅读

图像修复中,把缺口统一填成零很方便,但真实黑色像素也可能是零。如果模型只看到数值,就无法区分“已观察到黑色”和“根本没有观察”。部分卷积同时接收特征与有效掩码,并按窗口里实际可用的位置重新缩放。用三个格子就能检查这套操作是否写对。

缺失像素不是黑色像素:部分卷积怎样重新计数并更新掩码

AI生成的概念示意图:镂空格表示缺失,深色实格表示有效观测;拼块不是修复样例或真实输入图像。

把数值与是否可用分成两个输入

考虑单通道、长度为三的教学窗口。输入X=(2,100,4),掩码M=(1,0,1),1表示有效;中间的100只是缺口占位值。固定权重W=(1,2,1),偏置b=1,按对应位置相乘求和。

先屏蔽无效位置:X与M逐项相乘得到(2,0,4),加权和为6。窗口共有三个位置,有效位置两个,缩放因子为3/2。按论文定义,输出为6×3/2+1=10。偏置是在缩放完成以后再加的。

普通零填充卷积会得到6+1=7;若把偏置也跟着放大,则得到(6+1)×3/2=10.5。这三个输出分别对应三套不同计算。直接调用带偏置卷积后乘比例,必须先减掉原偏置,缩放后再加回,才能实现本文的公式。

占位值变化不应传到输出

把中间100换成-50、0或999,只要掩码仍为0,输出都应是10。这是很有用的不变性测试。如果输出跟着改变,说明缺失值没有被正确屏蔽,或后续路径绕过了掩码。

但若中间位置确实观测为0,掩码应改成(1,1,1)。此时加权和仍为6,有效计数变为3,缩放因子为1,输出变成7。两组屏蔽后的数值相同,结果不同,区别正来自“黑色已知”与“这里未知”。不能从X是否为零自动生成有效掩码。

如果M=(0,0,0),论文定义输出为0,新掩码也为0;此时不要执行三除以零,也不要仅因偏置是1就输出1。掩码全为1时,部分卷积退化为同一权重和偏置的普通卷积,这可以作为另一条边界断言。

新掩码标记的是可继续使用的特征

只要一个窗口包含至少一个有效输入,输出位置的新掩码就设为1,否则为0。为看清传播过程,另设一行初始掩码(1,0,0,0,1),长度三的窗口逐格移动,步长为1,两边各补一个无效位置以保持长度。

第一层更新后得到(1,1,0,1,1):中间那个窗口仍没有有效输入。第二层按相同规则更新,五个位置全变成1。程序逐窗口统计有效数量,复核了这个结果。

这不表示五个位置都变成真实拍摄到的像素。第一层新产生的可用特征可以给第二层提供信息,掩码表达的是计算过程中的有效性。它既不是原始观测来源标记,也不是修复置信度;若业务要区分原图与生成内容,应另外保留最初的缺口掩码。

请AI同时验收输出值与掩码

有效提示可以写成:“为每个窗口输出屏蔽后的输入、有效计数、缩放因子、偏置处理、最终值与新掩码;验证改变占位值不影响结果,已知零与缺失零必须区分。”用单通道小例通过后,再扩大到多通道与二维窗口。

多通道实现需要明确掩码是逐通道保存还是在通道间共享,并使总位置数与有效计数使用同一口径。若一个统计跨所有通道、另一个只数空间位置,比例就会多出通道倍数。边界填充也要说明哪些位置被当成有效。

按有效数量缩放只是网络层的计算规则,不能保证任意缺口里的真实内容都被无偏恢复。最终图像质量还依赖训练目标、网络与数据。本文帮助读者检查掩码传播与算子实现,不把算对一个窗口描述成已经解决了图像修复。

资料核对日期:2026年10月3日。本文数值为原创教学设定,已用本地程序复算,未训练真实模型或验证生产效果。

参考资料

Liu等:Image Inpainting for Irregular Holes Using Partial Convolutions,第3.1节

NVIDIA:部分卷积项目与实现说明


文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。