关注上方“深度学习技术前沿”,选择“星标公众号”,
资源干货,第一时间送达!
作者:bearbee
知乎链接:https://zhuanlan.zhihu.com/p/100590305
编辑:深度学习技术前沿
SpineNet: Learning Scale-Permuted Backbone for Recognition and Localization, 谷歌出品,个人是非常喜欢这篇论文的想法的。也是我个人认为是第一篇真正意义上的NAS在检测上的应用,之前的NAS+Det论文要么固定backbone搜neck,要么固定neck搜backbone,这个设定明显非常奇怪,而且对ImageNet的分类数据集仍然依赖很大。
Motivation:
我们都知道对于分类网络来说,目前的网络结构设计一般都是通过MaxPooling或者Stride为2 的卷积对输入分辨率进行不断地缩小,这样最后可以获得较大的感受野,其输出特征也具有更好的语义信息,从而可以更好的encode输入图像,这样最终可以取得一个很好的分类效果。
但是对于检测来说,就不仅仅是分类问题了,定位同样重要。如果直接采用分类网络作为backbone的话(这篇论文看作是编码器)效果较差,现在通用做法是建立解码器恢复特征分辨率,同时解码器和编码器之间还引入了多尺度跨层连接来生成更好的多尺度特征图。
那么一个自然而然的问题就是,分类任务构建的编码器是否适合检测这种需要定位信息的任务呢?
这个问题之前在DetNet[7]中也有所体现,这里就不展开说了。
总结下来就是,并不适合,因为分类任务构建编码器不断降采样会丢失大量的空间细节信息,而这些信息很难通过解码器进行恢复。
于是这篇论文提出了SpineNet,将编码器和解码器合二为一构建了尺度可变的backbone,这个backbone同时具备之前提到的编码器和解码器功能,因此也是直接连在分类和回归网络上的。
而这个尺度可变的backbone具备两个特点:
1. 中间特征图的分辨率能够随时增加或减少,这样模型可以随着深度的增加而保留空间信息;
2. 特征图之间能够跨越特征尺度连接,以促进多尺度特征融合。
从思想上来看,有点像HRNet[2],但是HRNet是规则的并行多尺度设计,而SpineNet是更自由的多尺度设计,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/dc03caf2985d739b24e1eee178bc2b56.png)
显然,这种尺度可变的backbone构建的搜索空间非常巨大,因此这篇论文同样采用了NAS进行搜索,和NAS-FPN[3]一样也是在RetinaNet基础上进行的,但是不同的是这篇论文是直接在COCO检测数据集上进行训练的,把编码器和解码器合二为一进行搜索,也就是说这篇论文可以减轻对ImageNet预训练的依赖。
以ResNet-50为基准,并使用ResNet-50中的bottleneck blocks作为搜索空间中的候选feature blocks,然后再搜索feature blocks的排列,以及每个feature blocks的两个输入连接关系。
而且如果添加搜索选项来调整每个候选feature blocks的尺度和类型(例如 residual block或者bottleneck block),可以进一步提高结果。而且非常有意思的是,通过检测数据集搜索出来的SpineNet网络结构在ImageNet和iNaturalist分类数据集上效果仍然不错,表现都优于ResNet。
这也说明尺度可变的backbone是一种可以通用的网络结构设计,这个也和HRNet的后续之作HRNetV2[4]观点不谋而合。
方法:
接下来,我们来看看这篇论文用的方法。
SpineNet网络可以看作在一个通用的ResNet-50网络基础上搜索不同feature blocks的排列方式以及连接关系得到的。也和NAS-FPN一样,从第3层到第7层选取了5个输出feature blocks,用于产生最终的P3-P7的多尺度特征层,其他剩余的feature blocks看作是中间feature blocks。
那么原始的ResNet-50仅含有5层多尺度,第6层和第7层是如何产生的呢?这篇论文解释得并不清楚,只是提到了将第5层一个block替换成了第6层和第7层, 而且他们的特征通道数都是256。
暂且先接受这个设定看下搜索空间吧,这篇论文提到了三个搜索空间:
首先就是中间feature blocks和最终输出feature blocks的排列顺序;
其次是每个feature blocks的两个输入连接关系;
最后就是feature blocks自身的尺度以及block类型调整了。
当然在跨层连接的时候,肯定又得考虑如何进行尺度缩放以及通道缩放了,这篇论文引入了比例因子α(默认为0.5)将输入特征尺寸C调整为α×C。然后再使用最近邻插值进行上采样或进行stride为2的卷积用于下采样特征图以匹配目标特征图分辨率。
最后,再应用1×1卷积将输入特征图的通道数α×C与目标特征图的通道数相匹配,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/720c98c8b02ef29266ea1e58bc98c1da.png)
于是作者搜到了如下结构:
![](https://i-blog.csdnimg.cn/blog_migrate/9ece6f5aa915a1fa6210c99b2f327039.png)
需要注意的是R [N] -SP [M]代表保留N个ResNet-50的特征层和所学习的SpineNet的M个特征层,其中有红色边框的特征图看作是输出特征图,按照论文描述每个特征图都应该只有两个输入,但是图中可以看到一些输出特征图是有三个输入的,这是因为采用了和NAS-FPN一样的做法,即如果feature blocks不连接到更高顺序的任何中间feature blocks,则将它们连接到相应级别的输出feature blocks。
考虑到ResNet-50可能并不是最佳的基础网络,所以作者又添加了feature blocks自身的尺度以及block类型调整的搜索空间,最终得到上图(d)的结果,这也能进一步带来精度的提升。而在SpineNet-49的基础上,作者又构建了一些扩展的网络结构,具体可见论文。
实验:
以上就是方法部分了,接下来再说说本文的实验。实验的具体细节还是挺有意思的,首先这篇论文是在COCO数据集上从头训的,因此一些实验细节还是需要注意的,例如batch是256,epoch是250,初始学习率是0.28等等。。
至于NAS的实验细节和NAS-FPN类似,也是采用了代理网络,训练集划分少部分图像作为验证集等。
从实验结果来看,SpineNet取得非常不错的效果,而且虽然SpineNet是在检测数据集搜出来的网络结构,但是用在检测,实例分割以及分类上都能取得不错的效果,而且在实例分割实验中还和HRNet进行了比较,在iNaturalist-2017这种细粒度分类任务上更是提升近6个点,这主要是因为这种尺度多变的网络结构可以更好的保留细节信息,这对细粒度分类是非常重要的。
具体实验结果还是看论文吧,这里主要说下怎么做分类任务的,作者采用的方式是将P3-P7层的特征图进行最近邻上采样到P3尺寸并平均得到最终的特征图,然后再做GAP和FC分类。
接下来我们主要看下作者做的Ablation Studies,分别证明了尺度多变网络的好处以及跨层连接的好处。首先就是和Hourglass[5]和Fish[6]进行比较,固定了尺度排列顺序,通过NAS学习其跨层连接方式,最终发现还是本文的方法好,作者认为联合学习尺度排列和跨层连接比仅学习具有固定尺度排列网络的跨层连接要好,实验如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6f0b239849a28d7e8591360b0f2b9029.png)
然后就是对学到的SpineNet连接方式进行分析,采用了三种方式:
(1)删除短距离连接;
(2)删除远程连接;
(3)删除以上两个连接,然后通过顺序连接方式将feature blocks连接到其先前的feature blocks。
最终发现三者无论去掉谁都会损害精度,而且去掉远程连接影响更严重,这说明短连接或者顺序短连接都不能很好处理较大的尺度变化特征融合,实验结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/129bfa6d2bf22c250672752f7e46cb33.png)
结论:
从实验结果来看,SpineNet比NAS-FPN还能进一步取得很好的提升,如图:
在COCO数据集检测任务上搜索出来的SpineNet进行泛化性非常不错,在检测、实例分割以及分类上都有不错的表现。尤其是在iNaturalist-2017这种细粒度分类任务上更是提升近6个点,这主要是因为这种尺度多变的网络结构可以更好的保留细节信息,这对细粒度分类是非常重要的。结合HRNet和HRNetV2(High-Resolution Representations for Labeling Pixels and Regions, Arxiv)来看,个人觉得这是一个非常好的研究方向,即如何构建统一适用分类,检测和分割的基础网络。。目前大家还是把检测,分割和分类几个任务独立看待,但是其实彼此是有相互关系的,例如都可以看作是pixel的分类,图像分类则是pixel分类的整体结果,分割则是pixel分类的聚类结果,检测则是pixel分类的聚类结果的最小外接正矩形。而且检测框的定义是否完美也是一个值得思考的问题,目前也有大量的anchor free论文试图解决这个问题,同样的single stage instance segmentation也是类似的。有点说远了hhh,回归这篇论文主题,我比较好奇的一点是如果在ImageNet数据集上对搜出来的SpineNet进行预训练,然后再在COCO上进行训练,是不是能进一步提升精度?
总而言之,这篇论文还是值得一看的,而且实验结果也是很值得深入思考的。
参考文献:
[1] Du X, Lin T Y, Jin P, et al. SpineNet: Learning Scale-Permuted Backbone for Recognition and Localization[J]. arXiv preprint arXiv:1912.05027, 2019.
[2] Ke Sun, Bin Xiao, Dong Liu, and Jingdong Wang. Deep high-resolution representation learning for human pose estimation. In CVPR, 2019.
[3] Golnaz Ghiasi, Tsung-Yi Lin, and Quoc V Le. Nas-fpn: Learning scalable feature pyramid architecture for object de- tection. In CVPR, 2019.
[4] Sun K, Zhao Y, Jiang B, et al. High-Resolution Representations for Labeling Pixels and Regions[J]. arXiv preprint arXiv:1904.04514, 2019.
[5] Alejandro Newell, Kaiyu Yang, and Jia Deng. Stacked hour- glass networks for human pose estimation. In ECCV, 2016.
[6] Shuyang Sun, Jiangmiao Pang, Jianping Shi, Shuai Yi, and Wanli Ouyang. Fishnet: A versatile backbone for image, region, and pixel level prediction. In Advances in Neural Information Processing Systems, 2018.
[7] Zeming Li, Chao Peng, Gang Yu, Xiangyu Zhang, Yangdong Deng, and Jian Sun. Detnet: Design backbone for object detection. In ECCV, 2018.
重磅!DLer-目标检测交流群已成立!
为了能给大家提供一个更好的交流学习平台!针对特定研究方向,我建立了目标检测微信交流群,目前群里已有百余人!本群旨在交流目标检测、密集人群检测、关键点检测、人脸检测、人体姿态估计等内容。
进群请备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+小明)
广告商、博主请绕道!
???? 长按识别,即可进群!
觉得有用麻烦给个在看啦~