Sobes.tech
Junior — Senior

Ի՞նչ է CBAM-ը (Կոնվոլյուցիոն բլոկի ուշադրության մոդուլը):

sobes.tech AI

Պատասխան AI-ից

CBAM (Convolutional Block Attention Module) է կոնվոլյուցիոն նեյրոնային ցանցերի համար ուշադրության մոդուլ, որը օգնում է մոդելին կենտրոնանալ առավել կարևոր հատկանիշների վրա տարածական և ալիքային չափումներում: Այն բաղկացած է երկու հաջորդական ենթամոդուլներից՝

  1. Ալիքային ուշադրության մոդուլ — հաշվարկում է յուրաքանչյուր ալիքի կարևորությունը, ուժեղացնում է կարևոր ալիքները և թուլացնում է ավելի քիչ կարևորները:
  2. Տարածական ուշադրության մոդուլ — հաշվարկում է յուրաքանչյուր տարածական դիրքի (պիքսելի) կարևորությունը հատկանիշների քարտեզում, առանձնացնելով հիմնական տարածքները:

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