| 465 | |
| 466 | class AttnBlock(nn.Module): |
| 467 | def __init__(self, |
| 468 | in_channels |
| 469 | ): |
| 470 | super().__init__() |
| 471 | |
| 472 | self.norm = BaseGroupNorm(num_groups=32, num_channels=in_channels) |
| 473 | self.q = CausalConvChannelLast(in_channels, in_channels, kernel_size=1) |
| 474 | self.k = CausalConvChannelLast(in_channels, in_channels, kernel_size=1) |
| 475 | self.v = CausalConvChannelLast(in_channels, in_channels, kernel_size=1) |
| 476 | self.proj_out = CausalConvChannelLast(in_channels, in_channels, kernel_size=1) |
| 477 | |
| 478 | def attention(self, x, is_init=True): |
| 479 | x = self.norm(x, act_silu=False, channel_last=True) |