💡💡💡Инновационная точка: звезда Операция (умножение элементов) позволяет отображать входные данные в многомерном пространстве нелинейных функций без расширения сети. Это основная инновация StarNet, которая демонстрирует впечатляющую производительность при компактной структуре сети, низком энергопотреблении и низкой задержке.
💡💡💡Как объединить с YOLOv8: замена основы YOLOv8
论文:https://arxiv.org/pdf/2403.19967
Аннотация: Недавние исследования повысили интерес к неиспользованному потенциалу «звездных операций» (поэлементное интеллектуальное умножение) при проектировании сетей. на. Хотя существует множество интуитивных объяснений,Но основы его применения остаются в значительной степени неисследованными.。Наше исследование направлено на то, чтобы показать, как звездная хирургия будетВозможность сопоставлять входные данные с многомерным нелинейным пространством признаков (аналогично трюку с ядром) без необходимости расширения сети.。Мы пошли дальшеStarNet,Простой, но мощный прототип,Продемонстрировал впечатляющую производительность и низкую задержку при компактной сетевой структуре и эффективном бюджете. как звезды в небе,Работа звезд кажется незаметной,Но у него огромный потенциал.
Для простоты объяснения,структураПостроен демонстрационный блок для классификации изображений.,Как показано на картинке 1 Показано слева. Путем размещения нескольких демонстраций за слоем основы В статье строится простая модель под названием DemoNet. При условии, что все остальные факторы постоянны, в статье отмечается, что поэлементное умножение (звездочка операция) всегда лучше суммирования по производительности, как показано на рисунке 1 показано справа.
Парадигма обучения, которая объединяет различные функции подпространства посредством умножения элементов, привлекает все больше и больше внимания. В статье эта парадигма называется звездообразной операцией (поскольку символ умножения элементов похож на звезду).
основной код
"""
Implementation of Prof-of-Concept Network: StarNet.
We make StarNet as simple as possible [to show the key contribution of element-wise multiplication]:
- like NO layer-scale in network design,
- and NO EMA during training,
- which would improve the performance further.
Created by: Xu Ma (Email: ma.xu1@northeastern.edu)
Modified Date: Mar/29/2024
"""
import torch
import torch.nn as nn
from timm.models.layers import DropPath, trunc_normal_
from timm.models.registry import register_model
from ultralytics.nn.modules import (Conv, Bottleneck,C2f)
model_urls = {
"starnet_s1": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s1.pth.tar",
"starnet_s2": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s2.pth.tar",
"starnet_s3": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s3.pth.tar",
"starnet_s4": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s4.pth.tar",
}
class ConvBN(torch.nn.Sequential):
def __init__(self, in_planes, out_planes, kernel_size=1, stride=1, padding=0, dilation=1, groups=1, with_bn=True):
super().__init__()
self.add_module('conv', torch.nn.Conv2d(in_planes, out_planes, kernel_size, stride, padding, dilation, groups))
if with_bn:
self.add_module('bn', torch.nn.BatchNorm2d(out_planes))
torch.nn.init.constant_(self.bn.weight, 1)
torch.nn.init.constant_(self.bn.bias, 0)
class StarNetBlock(nn.Module):
def __init__(self, dim, mlp_ratio=3, drop_path=0.):
super().__init__()
self.dwconv = ConvBN(dim, dim, 7, 1, (7 - 1) // 2, groups=dim, with_bn=True)
self.f1 = ConvBN(dim, mlp_ratio * dim, 1, with_bn=False)
self.f2 = ConvBN(dim, mlp_ratio * dim, 1, with_bn=False)
self.g = ConvBN(mlp_ratio * dim, dim, 1, with_bn=True)
self.dwconv2 = ConvBN(dim, dim, 7, 1, (7 - 1) // 2, groups=dim, with_bn=False)
self.act = nn.ReLU6()
self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
def forward(self, x):
input = x
x = self.dwconv(x)
x1, x2 = self.f1(x), self.f2(x)
x = self.act(x1) * x2
x = self.dwconv2(self.g(x))
x = input + self.drop_path(x)
return x
Подробности смотрите в исходном тексте
https://blog.csdn.net/m0_63774211/category_12511737.html