今天是10.8号,国庆假期的最后一天,终于可以静下来看一篇文章了。最近很茫 (是茫然的茫)、正值秋招见尾,今年cv领域的算法岗位确实是不太好找,好多公司企业最低要求都是博士起步了,当然自己能力不足确是原罪。大部分cv的同学、能找到cv岗位的已经比较少了、要不转了搜广推(偏nlp)、要不就只能是AI算法、或者开发等岗位了。搜广推这一块岗位多、工资高,确实不知道自己将会如何选择了,可能明年这个时候就去搞npl了。虽然cv也好、nlp也罢,最终都还是围着dnn或者机器学习转,本质上没有太大区别,但是对于相关知识领域的探索、还是稍有不甘。
本篇博客我们来看一下ResNeSt论文,百度直接搜索ResNest,各种大V博主、神乎其神、一阵褒贬,只叹一声、生活不易!
这篇论文确实有其讨论话题的地方,首先是其实验结果可以说是非常吸睛,然而却获得了eccv 2020的strong reject,下面我们来具体看一下此篇论文。
Hang Zhang, Chongruo Wu?, Zhongyue Zhang, Yi Zhu, Haibin Lin, Zhi Zhang, Yue Sun, Tong He, Jonas Mueller, R. Manmatha, Mu Li, and Alexander Smola
Amazon, University of California, Davis
Abstruct
我们展示了一个模块化的分散注意力块Split-Attention block,它可以使注意力跨特征图组。通过以ResNet的样式来堆叠这些分散注意块,我们获得了一个新的ResNet变体,称之为ResNeSt。我们的网络保留了整个ResNet结构,以便直接用于下游任务,而不引入额外的计算成本。
ResNeSt模型优于其他具有类似模型复杂性的网络。resnes -50在ImageNet上使用单一作物尺寸为224×224,获得81.13%的top-1精度,比以前最好的ResNet变体高出1%以上的精度。同样可以提升下游任务如目标检测、实例分割及语义分割等;by simply replace the ResNet-50 backbone with ResNeSt-50, we improve the mAP of FasterRCNN on MS-COCO from 39.3% to 42.3% and the mIoU for DeeplabV3 on ADE20K from 42.1% to 45.1%。
(以下introduction及related work介绍的比较多,因为这里面还是有非常多的东西值得总结、对比和学习的)
1 introduction
最近用来提升分类acc的方法主要是利用大规模的网络结构搜索nas (网络深度、宽度、输入分辨率等等的组合),而这些nas派生的模型通常没有针对训练效率或通用/商业处理硬件(cpu / gpu)上的内存使用进行优化。
由于ResNet模型最初是为图像分类而设计的,由于receptive-field size有限且缺乏跨通道交互作用,因此它们可能不适用于各种下游应用。一些方法添加金字塔模块或引入long-range connections或使用跨通道特征图注意。虽然这些方法确实提高了迁移学习在某些任务中的表现,但它们提出了一个问题: 我们是否可以创建一个通用的主干,具有普遍改进的特征表示,从而同时提高多个任务的性能?
the first contribution : 我们对ResNet进行了一个简单的架构修改,将feature-map split attention合并到单独的网络块中。更具体地说,我们的每个块将特征图划分为几个组(沿着通道维度)和更细粒度的子组或分块,其中每个组的特征表示通过分块表示的加权组合来确定。我们将产生的单元称为Split-Attention block,它保持简单和模块化。通过叠加几个分散注意力块,我们创建了一个类似resnet的网络,叫做ResNeSt。 Our architecture requires no more computation than existing ResNet-variants, and is easy to be adopted as a backbone for other vision tasks.
The second contributions ,大规模的图像分类和迁移学习应用的基准测试. achieve state of the art performance on several tasks: image classification, object detection, instance segmentation and semantic segmentation. outperforms all existing ResNet variants and has the same computational efficiency and even achieves better speed-accuracy trade-offs than state-of-the-art CNN models produced via neural architecture search as shown in Table 1.
Modern CNN Architectures.
深度神经网络的成功,使得从手工特征的阶段转移到研究网络结构的阶段。全局平均池化、1*1卷积、模块化结构,到Highway network 引入了高速公路连接,使信息在不同层次间流动无衰减,有利于网络的收敛 ;再到resnet引入跳过连接,解决梯度消失、学习深层表征,简化下游应用程序的网络设计和迁移学习工作流程。(这里其实有很多值得借鉴和学习的思想)
Multi-path and Feature-map Attention.
Googlenet最先引入多路表征、融合不同卷积核的特征;ResNeXt在resnet中采用组卷积,将多路径结构转换为一个统一的操作;senet学习不同通道的权重系数进行组合;SK-net跨两个网络分支提供特征图。我们的网络将通道上的注意力一般化为feature-map group表示,可以使用统一的CNN操作符进行模块化和加速。
Neural Architecture Search.
随着计算能力的提高,人们的兴趣开始从手工设计的架构转向系统搜索的架构,这种架构可以根据特定的任务自适应地定制。 such as: AmoebaNet, MNASNet, and EfficientNet。
尽管它们在图像分类方面取得了巨大的成功,但元网络结构各不相同,这使得下游模型难以建立。
3 split-attention networks
Split-Attention block它可以使特征图注意跨越不同的特征图组。描述了我们网络的实例化,以及如何通过标准的CNN操作来加速这种架构。
3.1 split-attention block
其是一个计算单元,由特征图组和分散注意操作组成,如图1所示:
对于如上的resnest block,每一个cardinal i具体细化如下:
这个网络结构理解起来其实是比较简单的,可能需要有一些基础网络知识的了解,比如inception、resnet、senet、可分离卷积、分组卷积等。(这里如果想了解的更细一些的话、可以参考我之前的文章:从Inception到Xception(含网络模型pytorch代码解析)、MixNet(含pytorch代码解析及相关轻量级模型对比)。相关知识的学习还是非常有价值的)
按时间顺序、直观的理解的话就是:最初是普通的网络卷积(跨空间与跨通道是混合在一起的)----可分离卷积(分离跨空间与跨通道)—inception引入多尺寸卷积核的融合----senet学习不同通道间的权重特征然后进行组合----基于可分离卷积的分组卷积-----再到本篇论文:先分为k组、组内再分为r组、学习r组间权重系数进行组合、最后k组再全部cat到一起。
关于本网络模型与现有网络模型的对比或者说是优点、创新点,论文描述的比较模糊或者是有些牵强。(这一块其实也没有必要去进一步深究,因为dnn本身就是一个黑盒、至于为什么这样做、这样做的意义,其实如上各种网络结构的提出、也并没有去说明这个问题,只是这样做、实验结果更好了、仅此而已,更多的为什么这样做、也只不过是根据实验结果的好坏、进行猜测反推而已)
4 network and training
这一部分在文中占有的比重还是比较大的,而且很多人将实验结果好的原因、也归结到了这一部分tricks的应用,包括作者本人也承认到了这一点,因为这一块确实没有做变量控制上的实验对比,到底是这些tricks的原因还是本文网络结构的改进,导致最终结果的提升。
这一部分tricks的应用,确实是比较有价值的,尤其是在工业界或者比赛当中,还是非常值得去学习和借鉴的。因为真正具有突破性的创新工作并不多、这些tricks的提出与改进、也是一步步发展所必不可少的阶段。这里不再详细介绍、只是简单列举一下:
4.1 networks tweaks 2种
Average Downsampling:使用平均池化而非直接通过stride实现下采样;
Tweaks from ResNet-D:小卷积核串联替代大卷积核;池化替代stride;
4.2 training strategy 6种
Large Mini-batch Distributed Training. 以及结合了warm-up
Label Smoothing
Auto Augmentation. 基于16种不同的图像变换技术,利用其中两个连续变换总共获得24种不同的组合变换方式,在训练的时候随机选择并应用于图像变换。
Mixup Training.
Large Crop Size.
Regularization.
5 image classification results
5.1 implementation details
除了应用上面的auto augmentation,进一步使用了: random size crop, random horizontal flip, color jittering, and changing the lighting.
resneSt-50的batch size=8192.
实验结果对比:参数、速度及top-1的acc
与最新sota方法的对比:参数量、速度及acc
第6部分,是使用resnest作为backbone对于下游:目标检测、实例分割以及语义分割的效果提升。
本篇论文单独实验效果上来看是无可挑剔的,至于其创新性的大小只能说是仁者见仁、智者见智了。如果说inception (CVPR 14) 、resnet (CVPR 16)、深度可分离卷积是相对开创性的,那么基于此的变体也是非常之多的、它们的真正价值有多大、与本篇论文相比又如何,有的可以获得顶会、本篇也可以被eccv 2020给出strong reject。
本篇论文从实验设置上确实存在比较大的问题,也就是文中提到的实验对比中、实验变量的控制问题,从对比上可能不太具有说服力。内容很全(不仅包括与resnet的对比、sota的对比、还有各种分割实验的对比)、但是却不够完备严谨。
我自己投的cvpr论文,有的reviewer给了strong accept,有的reviewer给了strong reject,差距如此悬殊、除了reviewer本身的学术水平以外,可能更多的是其背景以及所占角度的不同,导致最终的判别结果相差巨大。当然、论文本身也确实存在一些问题,比如大而不全、全而不精等等。
一篇论文,我觉得还是首先要学会去发掘他的优点吧。从问题定义、背景、一步步地发展、到作者的结合或者创新,以及最终的实验结果,是否解决了问题、达到了结果、提升了效果。八分优点用来挖掘学习、两分缺点用来总结自省吧。