Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


者:Less Wright

编译:ronghuaiyang

导读

只要把ResNet中的block块换成Res2Net的block块,其他什么都不用动,物体检测立刻提升2个点。

正如谷歌Brain的EfficientNe论文所显示的,对于CNN架构的各个方面(宽度、深度、分辨率)的扩展,投资的回报正在迅速减少。

有一篇新的论文,来自Gao,Cheng,Zhao等人,Res2Net: a new multi-scale backbone architecture,展示了在一个给定块中做多尺度,而不是通常的一层一层的做多尺度,是一个未知的领域,可以对物体检测和分割带来额外的回报。

大多数架构都是在一层一层的基础上使用了多尺度。他们的创新之处是在一个给定的残差块中使用分层的、层叠的特征组(称为“scale”),取代了通用的单个3x3卷积核。

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第1张图片

ResNet50中有和没有新的Res2Net块的Grad-CAM激活(或热图)比较。

为此,他们重建了普通的ResNet架构的bottleneck block,用“4scale-(3x3)”残差分层架构取代了标准的1-3-1的CNN布局。因此,这个更改构建了“Res2Net”。这样,中间的主卷积从单分支变为多分支。

用图来说明一下:

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第2张图片

这里的概念是通过增加块内的感受野,而不是一层一层地捕获图像中更细粒度的不同级别的尺度,从而提高CNN检测和管理图像中物体的能力。

作者将Res2Net块内的特征组数量称为“scale dimension”。因此上面的代码块是scale为4的Res2Net代码块。

然后,可以将这些Res2Net模块插入标准ResNet或ResNeXt模块中,从而提高它们的粒度。

Res2Net着重于分割类型的任务,其中改进的物体识别能力发挥了作用。下面是图像语义分割的比较:

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第3张图片

Res2Net块的粒度改进了分割

正如上面所看到的,在bottleneck中引入scale维度可以帮助CNN更好地勾勒出图像中感兴趣的东西,从而提高整体的准确性。

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第4张图片

对ImageNet的改进——唯一的改变是在特定的架构中切换到Res2Net块

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第5张图片

Res2Net的github在这里:https://github.com/gasvn/Res2Net

把ResNet更新为Res2Net = Res2NetPlus

然而,我发现Res2Net的官方实现在很多方面都是在一个较老的ResNet风格中实现的。因此,我从github@frgfm(基于github @gasvn)获取Res2Net实现,并将其修改为:

1、使用Mish而不是ReLU进行激活。

2 、将ResNet的主干更改为一个前沿的3@3x3堆叠的主干(stride 2,stride 1,stride 1),而不是旧的单一的7x7核。

3 、反转BN->激活的顺序,变成激活->BN。这是基于我们对FastAI研究的发现,并得到了论文:Rethinking the usage of Batchnorm…的支持:

“我们不应该把Batch Normalization放在ReLU之前,因为ReLU的非负响应会使权值层更新的方式不太理想……”。

PyTorch代码:https://github.com/lessw2020/res2net-plus

用法很简单:

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第6张图片

在FastAI框架中使用Res2Net Plus(这里创建了一个4尺度、26宽度的Res2Net50)

Res2NetPlus的实际应用

在咨询工作中,我利用卫星图像构建了一个太阳能电池板探测器,我从零开始构建了一个Res2NetPlus50,然后将其与标准Imagenet预训练的进行了迁移学习的ResNet50进行了比较。我发现Res2Net50的准确率更高(+5%),训练也更稳定。

该模型最终于上周投入生产,验证数据的准确率为97.8%。

初步生产结果与训练结果一致:

Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影_第7张图片

缺点:

虽然Res2Net的计算复杂度与等效的ResNet相似,但它的运行速度仍然比对应的ResNet慢(20%似乎是平均水平)。

此外,对于FastAI排行榜数据集之类的分类任务,Res2Net在验证和训练损失上创造了记录(即正确时更正确,错误时更少错误),但并不是最终的绝对准确性的记录。

这是一个我还没有弄明白如何改正的问题,只有先假设一些分类任务可能是不是非常依赖于完整的物体的区分。

因此,Res2Net的最佳用法似乎集中在物体识别和分割类型的任务上。

小技巧 - Res2Net喜欢高级数据增强,比如mix-up、CutMix等。你可以看到使用这些工具时验证损失会急剧下降,因此强烈建议使用Res2Net进行大量的数据增强。

链接:

官方的Res2Net仓库:https://github.com/gasvn/Res2Net

Res2NetPlus结构:https://github.com/lessw2020/res2net-plus

640?wx_fmt=png
END

英文原文:https://medium.com/@lessw/res2net-new-deep-learning-multi-scale-architecture-for-improved-object-detection-with-existing-de13095c9654

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

你可能感兴趣的:(Res2Net:新的深度学习多尺度结构,提升物体检测立竿见影)