Junior — Senior
CBAM nədir (Konvolyutsiya Bloku Diqqət Modulu)?
sobes.tech Süni İntellekt
AI-dan cavab
CBAM (Konvolyutsion Blok Diqqat Modulu) — bu konvolyutsion neyron tarmoqlari uchun diqqat moduli bo‘lib, modelga fazoviy va kanal o‘lchamlardagi eng muhim xususiyatlarga e’tibor qaratishga yordam beradi. U ketma-ket ikki kichik moduldan iborat:
- Kanal Diqqat Moduli — har bir kanalning ahamiyatini hisoblaydi, muhim kanallarni kuchaytiradi va kamroq muhimlarini kamaytiradi.
- Fazoviy Diqqat Moduli — xususiyat xaritasidagi har bir fazoviy pozitsiyaning (pikselning) ahamiyatini hisoblaydi va muhim hududlarni ajratib ko‘rsatadi.
CBAM mavjud konvolyutsion tarmoqlarga osongina qo‘shiladi va ularning sifatini yaxshilash uchun xususiyatlarni samarali chiqarib olish imkonini beradi.
PyTorchda foydalanish misoli:
import torch
import torch.nn as nn
class CBAM(nn.Module):
def __init__(self, channels, reduction=16, kernel_size=7):
super().__init__()
# Kanal Diqqat
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()
# Fazoviy Diqqat
self.conv_spatial = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)
self.sigmoid_spatial = nn.Sigmoid()
def forward(self, x):
# Kanal Diqqat
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
# Fazoviy Diqqat
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