Junior — Senior
Wat is CBAM (Convolutional Block Attention Module)?
sobes.tech AI
Antwoord van AI
CBAM (Convolutional Block Attention Module) is een attentie-module voor convolutionele neurale netwerken die het model helpt zich te richten op de belangrijkste kenmerken in ruimtelijke en kanaaldimensies. Het bestaat uit twee opeenvolgende submodules:
- Kanaalatentiemodule — berekent de belangrijkheid van elk kanaal, versterkt significante kanalen en onderdrukt minder belangrijke.
- Ruimtelijke attentie-module — berekent de belangrijkheid van elke ruimtelijke positie (pixel) in de feature map, en markeert belangrijke gebieden.
CBAM kan gemakkelijk worden geïntegreerd in bestaande convolutionele netwerken en verbetert hun kwaliteit door efficiëntere kenmerkextractie.
Voorbeeld van gebruik in PyTorch:
import torch
import torch.nn as nn
class CBAM(nn.Module):
def __init__(self, channels, reduction=16, kernel_size=7):
super().__init__()
# Kanaalatentiemodule
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()
# Ruimtelijke attentie
self.conv_spatial = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)
self.sigmoid_spatial = nn.Sigmoid()
def forward(self, x):
# Kanaalatentiemodule
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
# Ruimtelijke attentie
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