Mecanismo de atención de PfAAM
El mecanismo de atención PfAAM es un mecanismo de atención no paramétrico propuesto en 2022, que puede realizar plug-and-play, combinando atención de canal y atención espacial.
Dirección en papel: https://arxiv.org/abs/2210.07828
El código es el siguiente:
import torch
from torch import nn
class PfAAMLayer(nn.Module):
def __init__(self, c1, c2, ratio=16):
super(PfAAMLayer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
b, c, _, _ = x.size()
y = self.avg_pool(x).view(b, c, 1, 1).expand_as(x)
z = torch.mean(x, dim=1, keepdim=True).expand_as(x)
return x * self.sigmoid(y*z)