After going through the details, I have two questions about the SO(3) noise that I’m struggling to understand, and I’d greatly appreciate your insights:
def _corrupt_rotmats(self, rotmats_1, t, res_mask, diffuse_mask, rotmats_0=None):
num_batch, num_res = res_mask.shape
if rotmats_0 is None:
noisy_rotmats = self.igso3.sample(
torch.tensor([1.5]),
num_batch*num_res
).to(self._device)
noisy_rotmats = noisy_rotmats.reshape(num_batch, num_res, 3, 3)
rotmats_0 = torch.einsum(
"...ij,...jk->...ik", rotmats_1, noisy_rotmats)
rotmats_t = so3_utils.geodesic_t(t[..., None], rotmats_1, rotmats_0)
identity = torch.eye(3, device=self._device)
rotmats_t = (
rotmats_t * res_mask[..., None, None]
+ identity[None, None] * (1 - res_mask[..., None, None])
)
return _rots_diffuse_mask(rotmats_t, rotmats_1, diffuse_mask)
I’m really looking forward to your response. Thank you so much for taking the time to address my questions!
Hello, thank you so much for your amazing work and for sharing the code!
After going through the details, I have two questions about the SO(3) noise that I’m struggling to understand, and I’d greatly appreciate your insights:
rotmats_1)? What’s the purpose of this coupling step?I’m really looking forward to your response. Thank you so much for taking the time to address my questions!