您好,感谢您的噪声生成代码。我在尝试处理 Burst 序列(多帧 RAW)时遇到了一个维度匹配错误。
为了保证序列中每一帧具有相同的 FPN,我将输入图像组织为 5D Tensor,形状为 (B, T, C, H, W),其中 T 为帧数(例如 3 帧),C=4(Bayer 四通道)。
复现错误:
当调用 forward 函数时,程序在以下行报错:
img = img_gt * scale.view(-1, 4, *tail[:-1]) / ratio.view(-1, *tail)
报错信息:
RuntimeError: The size of tensor a (3) must match the size of tensor b (4) at non-singleton dimension 1
原因分析(个人拙见,不一定准确):
在输入为 5D Tensor (B, T, C, H, W) 时:
-
img_gt 的形状是 (B, T, C, H, W),此时索引 1 是时间轴 $T$。
-
scale.view(-1, 4, *tail[:-1]) 生成的形状是 (B, 4, 1, 1, 1)。
- 执行乘法时,PyTorch 尝试将
img_gt 的第 1 维(大小为 $T=3$)与 scale 的第 1 维(大小为 4)对齐,从而导致冲突。
建议修复:
在 forward 和 add_noise 中增加对 img.dim() 的判断。如果是 5D Tensor,应将 scale 转换为 (B, 1, 4, 1, 1),将 ratio 转换为 (B, 1, 1, 1, 1)。这样可以利用 PyTorch 的广播机制,让同一个 scale 应用于序列中的所有帧。
您好,感谢您的噪声生成代码。我在尝试处理 Burst 序列(多帧 RAW)时遇到了一个维度匹配错误。
为了保证序列中每一帧具有相同的 FPN,我将输入图像组织为 5D Tensor,形状为
(B, T, C, H, W),其中 T 为帧数(例如 3 帧),C=4(Bayer 四通道)。复现错误:
当调用
forward函数时,程序在以下行报错:img = img_gt * scale.view(-1, 4, *tail[:-1]) / ratio.view(-1, *tail)报错信息:
RuntimeError: The size of tensor a (3) must match the size of tensor b (4) at non-singleton dimension 1原因分析(个人拙见,不一定准确):
在输入为 5D Tensor
(B, T, C, H, W)时:img_gt的形状是(B, T, C, H, W),此时索引 1 是时间轴scale.view(-1, 4, *tail[:-1])生成的形状是(B, 4, 1, 1, 1)。img_gt的第 1 维(大小为scale的第 1 维(大小为 4)对齐,从而导致冲突。建议修复:
在
forward和add_noise中增加对img.dim()的判断。如果是 5D Tensor,应将scale转换为(B, 1, 4, 1, 1),将ratio转换为(B, 1, 1, 1, 1)。这样可以利用 PyTorch 的广播机制,让同一个 scale 应用于序列中的所有帧。