赞
踩
详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
截止到发稿,B站YOLOv9最新改进系列的源码包已更新了14种!
贡献:作者提出了一种新方法 GSConv 来减轻模型的复杂度并保持准确性。GSConv可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式Slim Neck,以实现检测器更高的计算成本效益。
实验过程中,与原始网络相比,改进方法获得了最优秀的检测结果。
实验结果如图:
核心代码示例如下:
class GSConv(nn.Module): # GSConv https://github.com/AlanLi1997/slim-neck-by-gsconv def __init__(self, c1, c2, k=1, s=1, g=1, act=True): super().__init__() c_ = c2 // 2 self.cv1 = Conv(c1, c_, k, s, None, g, 1, act) self.cv2 = Conv(c_, c_, 5, 1, None, c_, 1 , act) def forward(self, x): x1 = self.cv1(x) x2 = torch.cat((x1, self.cv2(x1)), 1) # shuffle # y = x2.reshape(x2.shape[0], 2, x2.shape[1] // 2, x2.shape[2], x2.shape[3]) # y = y.permute(0, 2, 1, 3, 4) # return y.reshape(y.shape[0], -1, y.shape[3], y.shape[4]) b, n, h, w = x2.data.size() b_n = b * n // 2 y = x2.reshape(b_n, 2, h * w) y = y.permute(1, 0, 2) y = y.reshape(2, -1, n // 2, h, w) return torch.cat((y[0], y[1]), 1) class GSConvns(GSConv): # GSConv with a normative-shuffle https://github.com/AlanLi1997/slim-neck-by-gsconv def __init__(self, c1, c2, k=1, s=1, g=1, act=True): super().__init__(c1, c2, k=1, s=1, g=1, act=True) c_ = c2 // 2 self.shuf = nn.Conv2d(c_ * 2, c2, 1, 1, 0, bias=False) def forward(self, x): x1 = self.cv1(x) x2 = torch.cat((x1, self.cv2(x1)), 1) # normative-shuffle, TRT supported return nn.ReLU(self.shuf(x2)) class GSBottleneck(nn.Module): # GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconv def __init__(self, c1, c2, k=3, s=1, e=0.5): super().__init__() c_ = int(c2*e) # for lighting self.conv_lighting = nn.Sequential( GSConv(c1, c_, 1, 1), GSConv(c_, c2, 3, 1, act=False)) self.shortcut = Conv(c1, c2, 1, 1, act=False) def forward(self, x): return self.conv_lighting(x) + self.shortcut(x) class DWConv(Conv): # Depth-wise convolution class def __init__(self, c1, c2, k=1, s=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), act=act) class VoVGSCSP(nn.Module): # VoVGSCSP module with GSBottleneck def __init__(self, cx, c2, n=1, shortcut=True, g=1, e=0.5): super().__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c1, c_, 1, 1) # self.gc1 = GSConv(c_, c_, 1, 1) # self.gc2 = GSConv(c_, c_, 1, 1) # self.gsb = GSBottleneck(c_, c_, 1, 1) self.gsb = nn.Sequential(*(GSBottleneck(c_, c_, e=1.0) for _ in range(n))) self.res = Conv(c_, c_, 3, 1, act=False) self.cv3 = Conv(2 * c_, c2, 1) # def forward(self, x): x1 = self.gsb(self.cv1(x)) y = self.cv2(x) return self.cv3(torch.cat((y, x1), dim=1)) class VoVGSCSPC(VoVGSCSP): # cheap VoVGSCSP module with GSBottleneck def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): super().__init__(c1, c2) c_ = int(c2 * 0.5) # hidden channels self.gsb = GSBottleneckC(c_, c_, 1, 1)
from ultralytics.nn. SlimNeck import VoVGSCSP, VoVGSCSPC
执行命令
python train.py
改完收工!
关注B站:AI学术叫叫兽
从此走上科研快速路
遥遥领先同行!!!!
详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
AI学术叫叫兽er在这!家人们,给我遥遥领先!!!
AI学术叫叫兽er在这!家人们,给我遥遥领先!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。