ResNest

SE-Net

class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)
ResNest_第1张图片
结构对比

QA

  • fast版本和普通版本的区别:

fast版本的下采样在3x3卷积前,从而减少计算量。二者差异在0.5%左右。

  • 什么是3x learning schedule

Most models are trained with the 3x schedule (~37 COCO epochs). Although 1x models are heavily under-trained, we provide some ResNet-50 models with the 1x (~12 COCO epochs) training schedule for comparison when doing quick research iteration.(摘自Detectron2)

总结

在Block里面集成了SEMulti_path的思想,新构成的网络效果较好,且在下流任务中表现很好。其中结构的改变提升了大概1.6%,其他的增强是由训练方法提升的。整体效果较好,需要在自己的数据集上进行评估。简单看了一下官方开源的代码,其pytorch版本还没有完全写完(比如drop block),且是直接在resnet基础上改的,mxnet写得比较完善。后续先在自己的数据集上进行测试,如果效果较好的话,再移植到tensorflow中去实现。

你可能感兴趣的:(ResNest)