Как работают Squeeze-and-Excitation блоки?
Answer from AI
sobes.tech AI
Squeeze-and-Excitation (SE) блоки — это архитектурный элемент нейронных сетей, который улучшает представление признаков, адаптивно перенастраивая важность каналов в сверточных слоях.
Принцип работы:
-
Squeeze (сжатие) — глобальное усреднение по пространственным измерениям (ширина и высота), чтобы получить вектор, отражающий глобальную информацию каждого канала.
-
Excitation (возбуждение) — этот вектор пропускается через небольшой многослойный перцептрон (обычно два слоя с активацией ReLU и сигмоидой), который вычисляет коэффициенты важности для каждого канала.
-
Масштабирование — исходные каналы умножаются на соответствующие коэффициенты, усиливая или ослабляя их вклад.
Это позволяет сети фокусироваться на наиболее информативных признаках и улучшает качество обучения и обобщения.
Пример на PyTorch:
import torch
import torch.nn as nn
class SEBlock(nn.Module):
def __init__(self, channels, reduction=16):
super(SEBlock, self).__init__()
self.squeeze = nn.AdaptiveAvgPool2d(1)
self.excitation = nn.Sequential(
nn.Linear(channels, channels // reduction),
nn.ReLU(inplace=True),
nn.Linear(channels // reduction, channels),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.squeeze(x).view(b, c)
y = self.excitation(y).view(b, c, 1, 1)
return x * y
SE блоки широко применяются в современных архитектурах для повышения эффективности и точности моделей компьютерного зрения.