Junior — Senior
CBAM (Конволюциялык блоктун көңүл буруу модулу) эмне?
sobes.tech AI
AIден жооп
CBAM (Convolutional Block Attention Module) — бул конволюциялык нейрондук тармактар үчүн көңүл буруу модулү, ал моделге кеңейтүү жана каналдык өлчөмдөрдө эң маанилүү белгилерге көңүл бурууга жардам берет. Ал эки үзгүлтүксүз бөлүмдөн турат:
- Каналдык көңүл буруу модулү — ар бир каналдын маанилүүлүгүн эсептейт, маанилүү каналдарды күчөтүп жана азыраак маанилүү болгонду басаңдатып.
- Көңүл буруу кеңейтиги — белгилер картасындагы ар бир кеңейтүү жайгашкан жердин маанилүүлүгүн эсептейт, негизги аймактарды белгилейт.
CBAM азыркы конволюциялык тармактарга оңой киргизилет жана белгилерди натыйжалуу бөлүп көрсөтүү аркылуу алардын сапатын жакшыртат.
PyTorch колдонуу мисалы:
import torch
import torch.nn as nn
class CBAM(nn.Module):
def __init__(self, channels, reduction=16, kernel_size=7):
super().__init__()
# Каналдык көңүл буруу
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()
# Кеңейтүү көңүл буруу
self.conv_spatial = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)
self.sigmoid_spatial = nn.Sigmoid()
def forward(self, x):
# Каналдык көңүл буруу
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
# Кеңейтүү көңүл буруу
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