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