代码(有pytorch和mxnet两个版本)
论文(亚马逊团队张航 李沐)
文章目录
概述
简介
文章很直接,主要是对ResNet这样的基础主干网络去进行结构上的细节设计。本论文之所以要去对ResNet结构进行改动,论文里也说到了:
- 一是因为
ResNet设计之初来说,基本上很大程度上是去考虑对分类的影响的,尽量去让结构对分类结果有利。但是这样子就对其它任务,诸如检测,分割,姿态估计(论文给出的理由是:感受野尺寸的限制以及缺乏在channel层面上的交互) - 第二就是虽然现阶段
NAS去搜索网络结果俨然成为一种设计结构的方向,但是NAS所针对的分类任务表现很好,不过利用这样的结构很难进行好下游任务:检测、分割之类的(理由:NAS网络内部的元结构彼此之间的差异性让他们来做下游任务比较hard),所以作者们就还是来改一改ResNet网络啦。。。
文章主要基于ResNeXt、SENet、SKNet来进行结构设计。
看到作者有讨论:其实严格来说去比较ResNeSt-50与ResNet-50存疑,因为ResNet-50用的是15年得到的准确率,而ResNeSt-50是是有用一些trick来训练的。提出这么个结构的目的可能就是为了说明ResNet的改进版也能跟最新EfficientNet来打一打吧。
初步表现
-
ResNeSt-50在ImageNet的数据上达到了81.13%的top-1精度 - 在
Fast-RCNN使用ResNeSt-50替换ResNet-50在数据集MS-COCO上,mAP从39.25%提升至42.33% - 在DeeplabV3使用
ResNeSt-50替换ResNet-50在数据集ADE20K上提升mIOU
结构
如上图最右边的结构,就是ResNeSt Block,一共是分K个Cardinal Groups,之后每个Cardinal Group又分为r个Split来做Split-Attention, 所以一共相当于是G=K*r个组。
这里简单介绍一下SKNet
这里的结构比论文里的SK-Net block更加清晰,由Z到a, b 部分:FC(Z)得到的输出softmax后前一半为a, 后一半为b。
然后现在再来看论文的Split-Attention部分:
- 每一个输入就是一个
Split,而且Split-Attention都是在一个Cardinal Group中的所有split中进行,过程同SKNet过程一样,只不过在这里是由2个分支变成了radix个分支。其实现的时候主要使用组卷积来实现这样的结构。
结果
Training strategy
使用学习策略
- Large Mini-batch Distributed Training
- Label Smoothing
- Auto Augmentation
- Mixup Training
- Large Crop Size
- Regularization
Results
ablation experiments
Image Classification
- 在ImageNet上的结果(ResNetD就是加上了Bag of tricks里的tricks)
Transform Learning Results
- 目标检测(MS-COCO)
- - 实例分割(MS-COCO)
- 语义分割(左ADE20K, 右Citscapes )