Closed thuliu-yt16 closed 7 months ago
I think we should view the discrete coordinate dimension as the "spatial" dimension in conv1d. Replacing
def gaussian_blur_1d( t: Tensor, *, sigma: float = 1. ) -> Tensor: _, channels, _, device, dtype = *t.shape, t.device, t.dtype width = int(ceil(sigma * 5)) width += (width + 1) % 2 half_width = width // 2 distance = torch.arange(-half_width, half_width + 1, dtype = dtype, device = device) gaussian = torch.exp(-(distance ** 2) / (2 * sigma ** 2)) gaussian = l1norm(gaussian) kernel = repeat(gaussian, 'n -> c 1 n', c = channels) return F.conv1d(t, kernel, padding = half_width, groups = channels)
with
def gaussian_blur_1d( t: Tensor, *, sigma: float = 1. ) -> Tensor: _, _, channels, device, dtype = *t.shape, t.device, t.dtype # change made here width = int(ceil(sigma * 5)) width += (width + 1) % 2 half_width = width // 2 distance = torch.arange(-half_width, half_width + 1, dtype = dtype, device = device) gaussian = torch.exp(-(distance ** 2) / (2 * sigma ** 2)) gaussian = l1norm(gaussian) kernel = repeat(gaussian, 'n -> c 1 n', c = channels) return F.conv1d(t.permute(0, 2, 1), kernel, padding = half_width, groups = channels).permute(0, 2, 1) # change made here
makes the blurring work.
I made a breakpoint to check the value of target_one_hot (ignore the peak location change). Before:
target_one_hot
(Pdb) target_one_hot[0, :, 1] tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0404, 0.0000, 0.0000, 0.0000, 0.0000, 0.0404, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.9192, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000], device='cuda:0')
After:
(Pdb) target_one_hot[0, :, 1] tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0404, 0.9192, 0.0404, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000], device='cuda:0')
🤦 indeed i got mixed up with what was the spatial dimension here
thank you!
I think we should view the discrete coordinate dimension as the "spatial" dimension in conv1d. Replacing
with
makes the blurring work.
I made a breakpoint to check the value of
target_one_hot
(ignore the peak location change). Before:After: