Junior — Senior
Čo je CBAM (Modul pozornosti konvolučného bloku)?
sobes.tech AI
Odpoveď od AI
CBAM (Konvolučný blok pozornosti) je modul pozornosti pre konvolučné neurónové siete, ktorý pomáha modelu zamerať sa na najdôležitejšie vlastnosti v priestorových a kanálových rozmeroch. Skladá sa zo dvoch po sebe idúcich podsystémov:
- Modul pozornosti kanálov — vypočíta dôležitosť každého kanála, posilňuje významné kanály a potláča menej dôležité.
- Modul pozornosti priestoru — vypočíta dôležitosť každej priestorovej pozície (pixela) v mape vlastností, zvýrazňuje kľúčové oblasti.
CBAM sa ľahko integruje do existujúcich konvolučných sietí a zlepšuje ich kvalitu efektívnejším extrahovaním vlastností.
Príklad použitia v PyTorch:
import torch
import torch.nn as nn
class CBAM(nn.Module):
def __init__(self, channels, reduction=16, kernel_size=7):
super().__init__()
# Pozornosť kanálov
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.max_pool = nn.AdaptiveMaxPool2d(1)
self.fc = nn.Sequential(
nn.Conv2d(channels, channels // reduction, 1, bias=False),
nn.ReLU(),
nn.Conv2d(channels // reduction, channels, 1, bias=False)
)
self.sigmoid_channel = nn.Sigmoid()
# Pozornosť priestoru
self.conv_spatial = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)
self.sigmoid_spatial = nn.Sigmoid()
def forward(self, x):
# Pozornosť kanálov
avg_out = self.fc(self.avg_pool(x))
max_out = self.fc(self.max_pool(x))
channel_att = self.sigmoid_channel(avg_out + max_out)
x = x * channel_att
# Pozornosť priestoru
avg_out = torch.mean(x, dim=1, keepdim=True)
max_out, _ = torch.max(x, dim=1, keepdim=True)
spatial_att = self.sigmoid_spatial(self.conv_spatial(torch.cat([avg_out, max_out], dim=1)))
x = x * spatial_att
return x