作 者 | Less Wright
翻 译 | 天字一号、Pita、sherry3255
审 校 | McDonald's、潘妮·奥尔科
* 注:文中相关链接敬请点击文末【阅读原文】访问,PC查看体验更佳。
正如谷歌大脑的论文EfficientNet中展示的那样,在CNN架构各个方面(宽度,深度,分辨率)的探索所带来的的回报正在急剧减少。
然而,Gao, Cheng, Zhao等人的一篇新论文(Res2Net:一个新的多尺度主干结构,https://arxiv.org/abs/1904.01169v2)表明给定块中的多尺度或尺度缩放(而不是通常意义上的逐层缩放)是一个未被探索的领域,尤其是在目标识别和分割方面将会有额外的收获。
大多数结构在层级基础上缩放尺度。而他们的创新之处在于在给定冗余块中使用了分层级联特征组(称为“缩放层”),取代了通常的单个3×3卷积核。
采用和未采用Res2Net块的ResNet50得到的Grad-CAM激活映射(或热图)对比。注意到使用Res2Net后目标覆盖程度有所提高。
为此,他们重建了常见的ResNet结构中的瓶颈块,并且用一个“4缩放层-(3 ×3)”的冗余、分层结构取代了标准的1-3-1CNN布局。这一个改变也因此创造出“Res2Net”。中间主要的卷积操作也因此从单分支转移到多分支。
图表说明:
图2:瓶颈块和提出的Res2Net模块比较(缩放维度s=4)
这里的概念是通过增加块内的感受野,而不是更细粒度级别的一层一层捕获图像不同尺度,来提高CNN检测和管理图像中目标的能力。
作者将Res2Net块内的特征组数量称为“缩放维度”。因此上面的块是一个缩放维度为4的Res2Net块。
这些Res2Net模块将被移植到标准ResNet或ResNeXt卷积神经网络中,从而提高网络的细粒度。
Res2Net改进的目标识别能力在不同类型分割任务中发挥了重要作用。下面是语义分割图像任务中的比较:
ResNet101和Res2Net101-Res2Net块的细粒度提高了分割的结果。(GT=真值)
正如你在上面所看到的,在瓶颈中引入scale维度可以帮助CNN更好地勾勒出图像中感兴趣的内容,从而提高整体的准确性。
对ImageNet的改进 — 唯一的变化是在特定的架构中切换到Res2Net块。
Res2Net的github在这里:https://github.com/gasvn/Res2Net
为Res2Net = Res2NetPlus更新ResNet
然而,我发现Res2Net的官方实现在多个方面都属于较老的ResNet风格。因此,我从github @frgfm(https://github.com/frgfm/Holocron/blob/master/holocron/models/res2net.py,基于github @gasvn)获取Res2Net实现,并将其修改为以下内容:
1 - 使用Mish代替ReLU进行激活(有关原因,请查看我在Mish上的文章:https://medium.com/@lessw/meet-mish-new-state-of-the-art-ai-activation-function-the-successor-to-relu-846a6d93471f)
2 - 将ResNet的主干更改为最先进的 3 @ 3x3 堆栈主干 (stride 2, stride 1, stride 1),而不是较旧的单个7x7内核。
3 - 将“BN->激活”的顺序颠倒为“激活-> BN”的顺序。这基于我们对FastAI研究的发现(感谢 Ignacio Oguiza:https://medium.com/u/ce6cfceadfbb),并获得腾讯的论文“Rethinking the usage of Batchnorm… (https://arxiv.org/abs/1905.05928)”的支持:
“我们不应该把批量归一化放在ReLU之前,因为ReLU的非负响应会使权重层以次优的方式更新……”
点击查看PyTorch的代码:https://github.com/lessw2020/res2net-plus
其使用方法非常简单:
在FastAI 框架中使用 Res2Net Plus(创建维度为4,宽度为26 的 Res2Net50)
Res2NetPlus的效果:
在咨询工作中,我做了一个能够从卫星图像检测太阳能电池板的检测器,我建立了一个Res2NetPlus50模型,并从头开始训练,然后将其与标准Imagenet预先训练的ResNet50模型进行比较, ResNet50只训练头部 。我发现Res2Net50具有更高的精度(+5%),训练更加稳定。
最终,该模型于上周投入实际工作,验证数据准确率为97.8%。
初始生产结果与训练结果一致:
缺点:
虽然Res2Net 具有与 ResNet 类似等效的计算复杂性,但仍比 ResNet 运行速度慢(似乎约为平均值的20%)。
此外,对于 FastAI 排行榜数据集等分类任务,Res2Net 会设置验证和训练损失记录(即准确时更加准确,错误时错误更少),但最终绝对精度较低。
这一个问题我没有想出如何纠正,除了假设一些分类任务可能不会严重依赖全目标区分。
因此,Res2Net 的最佳用法似乎侧重于目标识别和任务分割类型。
一个小建议 ——Res2Net更偏爱高级数据增强方法如MixUp,CutMix等。你可以看到当使用这些方法时,验证损失急剧下降,所以强烈建议使用Res2Net时加上大量的数据增强方法。
相关链接:
Res2Net官方仓库:
https://github.com/gasvn/Res2Net
Res2NetPlus结构:
https://github.com/lessw2020/res2net-plus
* 作者:@Less Wright
* via:https://medium.com/@lessw/res2net-new-deep-learning-multi-scale-architecture-for-improved-object-detection-with-existing-de13095c9654
封面图来源:https://flic.kr/p/W4353r