我们提出了BoTNet,这是一种概念上简单但功能强大的骨干架构,结合了自注意力机制,用于图像分类、目标检测和实例分割等多个计算机视觉任务。通过仅在ResNet的最后三个瓶颈块中用全局自注意力替换空间卷积,并且没有其他更改,我们的方法显著提高了实例分割和目标检测的基线性能,同时减少了参数,且在延迟方面的开销极小。通过设计BoTNet,我们还指出带有自注意力的ResNet瓶颈块可以视为Transformer块。无需任何额外的技巧,BoTNet在使用Mask R-CNN框架时,在COCO实例分割基准上达到了44.4%的Mask AP和49.7%的Box AP,超过了之前ResNeSt 67在COCO验证集上发布的单模型和单尺度的最好结果。最后,我们提出了BoTNet设计在图像分类中的简单适应性,生成的模型在ImageNet基准上实现了84.7%的top-1准确率,同时在TPU-v3硬件上的“计算”时间比流行的EfficientNet模型快1.64倍。我们希望这种简单而有效的方法将作为未来自注意力模型研究的强大基线。
论文地址:论文地址
代码地址:代码地址
BoTNet(Bottleneck Transformers for Visual Recognition)是一种结合自注意力机制和卷积神经网络的骨干架构,主要用于图像分类、目标检测和实例分割等视觉任务。BoTNet通过在ResNet的最后三个瓶颈块中用全局自注意力层替代空间卷积层,显著提高了基线性能,并减少了参数量,同时保持了较低的延迟。
class BoT3(nn.Module):
def __init__(self, c1, c2, n=1, e=0.5, e2=1, w=20, h=20): # ch_in, ch_out, number, , expansion,w,h
super(BoT3, self).__init__()
c_ = int(c2 * e) # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c1, c_, 1, 1)
self.cv3 = Conv(2 * c_, c2, 1) # act=FReLU(c2)
self.m = nn.Sequential(
*[BottleneckTransformer(c_, c_, stride=1, heads=4, mhsa=True, resolution=(w, h), expansion=e2) for _ in
range(n)])
def forward(self, x):
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1))
详见:https://blog.csdn.net/shangyanaf/article/details/140653663
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。