MCPcopy Create free account
hub / github.com/SooLab/CGFormer / forward

Method forward

model/backbone.py:716–747  ·  view source on GitHub ↗
(self, x, l, l_mask)

Source from the content-addressed store, hash-verified

714 )
715
716 def forward(self, x, l, l_mask):
717 B, HW = x.size(0), x.size(1)
718 x = x.permute(0, 2, 1) # (B, key_channels, H*W)
719 l_mask = l_mask.permute(0, 2, 1) # (B, N_l, 1) -> (B, 1, N_l)
720
721 query = self.f_query(x) # (B, key_channels, H*W) if Conv1D
722 query = query.permute(0, 2, 1) # (B, H*W, key_channels)
723 key = self.f_key(l) # (B, key_channels, N_l)
724 value = self.f_value(l) # (B, self.value_channels, N_l)
725 key = key * l_mask # (B, key_channels, N_l)
726 value = value * l_mask # (B, self.value_channels, N_l)
727 n_l = value.size(-1)
728 query = query.reshape(B, HW, self.num_heads, self.key_channels//self.num_heads).permute(0, 2, 1, 3)
729 # (b, num_heads, H*W, self.key_channels//self.num_heads)
730 key = key.reshape(B, self.num_heads, self.key_channels//self.num_heads, n_l)
731 # (b, num_heads, self.key_channels//self.num_heads, n_l)
732 value = value.reshape(B, self.num_heads, self.value_channels//self.num_heads, n_l)
733 # # (b, num_heads, self.value_channels//self.num_heads, n_l)
734 l_mask = l_mask.unsqueeze(1) # (b, 1, 1, n_l)
735
736 sim_map = torch.matmul(query, key) # (B, self.num_heads, H*W, N_l)
737 sim_map = (self.key_channels ** -.5) * sim_map # scaled dot product
738
739 sim_map = sim_map + (1e4*l_mask - 1e4) # assign a very small number to padding positions
740 sim_map = F.softmax(sim_map, dim=-1) # (B, num_heads, h*w, N_l)
741 out = torch.matmul(sim_map, value.permute(0, 1, 3, 2)) # (B, num_heads, H*W, self.value_channels//num_heads)
742 out = out.permute(0, 2, 1, 3).contiguous().reshape(B, HW, self.value_channels) # (B, H*W, value_channels)
743 out = out.permute(0, 2, 1) # (B, value_channels, HW)
744 out = self.W(out) # (B, value_channels, HW)
745 out = out.permute(0, 2, 1) # (B, HW, value_channels)
746
747 return out
748

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected