💡💡💡Эта статья является результатом самостоятельного исследования и инновационного улучшения: Деформируемое большое внимание ядра (D-LKA) Внимание) эффективно сочетает SPPF для вторичных инноваций, а большие ядра свертки улучшают механизм внимания в восприимчивых полях различных функций.
YOLOv5 изначально принял структуру SPP и начал использовать SPPF после версии v6.0 (репозиторий). Основная цель — интеграция более масштабной (глобальной) информации. YOLOV8 использует SPPF Автор сравнивает SPP и SPPF, SPPF может достигать более высоких скоростей и меньшего количества FLOP, не влияя на mAP.
бумага:arxiv.org/pdf/2309.00121.pdf
Чтобы решить эти проблемы, мы представляем концепцию деформируемого большого внимания ядра (D-LKA Attention), упрощенного механизма внимания, который использует большие ядра свертки для полного понимания объемного контекста.
Этот механизм действует в рецептивном поле, аналогичном полю самовнимания, избегая при этом дополнительных вычислительных затрат. Кроме того, предлагаемый нами механизм внимания использует деформируемые свертки, позволяющие гибко искажать сетку выборки, позволяя модели соответствующим образом адаптироваться к различным шаблонам данных. Мы разработали 2D- и 3D-адаптацию D-LKA Attention, последняя из которых хорошо справляется с глубоким пониманием данных.
Воляdeformable_LKAиSPPFЭффективное сочетание,вводить новшества
3.1.1 SPPF_deformable_LKAприсоединитьсяmodels/sppf/SPPF_deformable_LKA.py
Основной исходный код:
class DeformConv_experimental(nn.Module):
def __init__(self, in_channels, groups, kernel_size=(3,3), padding=1, stride=1, dilation=1, bias=True):
super(DeformConv_experimental, self).__init__()
self.conv_channel_adjust = nn.Conv2d(in_channels=in_channels, out_channels=2 * kernel_size[0] * kernel_size[1], kernel_size=(1,1))
self.offset_net = nn.Conv2d(in_channels=2 * kernel_size[0] * kernel_size[1],
out_channels=2 * kernel_size[0] * kernel_size[1],
kernel_size=3,
padding=1,
stride=1,
groups=2 * kernel_size[0] * kernel_size[1],
bias=True)
self.deform_conv = torchvision.ops.DeformConv2d(in_channels=in_channels,
out_channels=in_channels,
kernel_size=kernel_size,
padding=padding,
groups=groups,
stride=stride,
dilation=dilation,
bias=False)
def forward(self, x):
x_chan = self.conv_channel_adjust(x)
offsets = self.offset_net(x_chan)
out = self.deform_conv(x, offsets)
return out
class deformable_LKA(nn.Module):
def __init__(self, dim):
super().__init__()
self.conv0 = DeformConv(dim, kernel_size=(5,5), padding=2, groups=dim)
self.conv_spatial = DeformConv(dim, kernel_size=(7,7), stride=1, padding=9, groups=dim, dilation=3)
self.conv1 = nn.Conv2d(dim, dim, 1)
def forward(self, x):
u = x.clone()
attn = self.conv0(x)
attn = self.conv_spatial(attn)
attn = self.conv1(attn)
return u * attn
от CSDN AI, маленький монстр
https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482