欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

DetNet解读

发布时间:2024/4/11 编程问答 73 豆豆
生活随笔 收集整理的这篇文章主要介绍了 DetNet解读 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简介

在目标检测最常见的二阶段和单阶段范式下,一般将目标检测模型分为backbone、neck和head三个部分,其中backbone指的是骨干网络,它用于提取图像的特征。目前最流行的backbone选择是ResNet系列及其变种,这主要归功于ResNet的流行,有着大量的结构优化和预训练模型。

不过,其实在2018年,旷世就提出了一种名为DetNet的backbone,旨在更好地适应目标检测这个任务。DetNet的设计初衷是什么呢,其实是因为目标检测通常都按照迁移学习的思路直接采用ImageNet上预训练的图像分类模型来作为backbone(如ResNet50),然而,图像分类和目标检测其实还是有不少不同之处的。不少目标检测新方法都采用不同于图像分类任务的额外stage来处理不同尺度的目标,这是因为,目标检测不仅仅需要识别出目标实例的类别,还要在空间上进行定位,较大的下采样倍率获得更大的感受野有利于全图级别的图像分类,但不利于网络对于目标的定位能力。

针对这些目标检测和图像分类的gap,论文设计了一种全新的backbone—DetNet,通过对ResNet进行修改,它能够在较深层保持较高的空间分辨率,实验表明,DetNet无论在目标检测还是实例分割任务上都能获得SOTA结果。

  • 论文标题

    DetNet: A Backbone network for Object Detection

  • 论文地址

    http://arxiv.org/abs/1804.06215

  • 论文源码

    https://github.com/guoruoqian/DetNet_pytorch

介绍

如上一节所述,目标检测任务和图像分类任务是有区别的,这是由它们任务本身决定的,目标检测不仅仅需要识别对象的类别,还需要空间上定位出对象的边界框。

具体而言,用分类模型作为检测的backbone存在两个问题:第一,FPN等结构会在原来的backbone结构基础上添加额外的stage来完成不同尺度目标的检测,这个额外添加的stage是无法在ImageNet上预训练的。第二,由于这些backbone是来自于分类任务,因此它们一般会采取较大的下采样倍率来获取较大的感受野,更大的感受野保证了更多的语义信息,这是有利于分类任务的,然而这种较小的特征图空间分辨率太小是不利于大目标和小目标的定位的。

一个好的backbone应该能解决上述的问题,因此作者提出了DetNet。由于目标的尺度变化,因此DetNet也类似FPN那样使用了额外的stage,不过即使在额外的stage中,空间分辨率不会进行下采样从而保持不变。但是,高分辨率特征图的代价就是会带来比较多的计算量,因此作者设计了一个膨胀bottleneck来保证DetNet的高效。

DetNet

动机

分类网络不适用于目标检测,因此诞生了一些新的方法如Feature Pyramid Network(FPN),如下图的A所示。使用FPN以及膨胀卷积是后来目标检测器的常用配置,不过这些检测方法仍然存在一些问题。

  • 网络的stage数目不同。 上图的B是经典的分类网络,它由5个stage组成(上图各个网络第一个stage没有画出来),每个stage会下采样2倍,因此最终会下采样25=322^5 = 3225=32倍。但是FPN在此基础上上添加了新的stage即P6,RetinaNet添加了P6和P7来处理大目标,这些stage是无法在ImageNet上预训练的。
  • 大目标识别能力差。 较高的下采样倍率会产生更多的语义信息,但也会丢失细节信息因而不利于目标的定位。FPN中,大目标的识别和定位由较深层进行,此时目标的边界细节其实已经严重丢失,因此回归的难度很大。
  • 小目标识别能力差。 随着特征图空间分辨率的降低以及上下文信息的整合,小目标信息很容易被削弱(因为其信息本身就不多)。因此,FPN在较浅层进行小目标的预测,然而浅层不具有充分的语义信息,无法满足分类的需要,因此检测器必须使用深层的语义信息包含的上下文信息来加强它,这就是上图A所示的自底向上的路径的由来,深层特征图是通过上采样和上层特征图融合的。但是,当小目标由于不断地下采样,在深层特征图上丢失的时候,其实它也就没有所谓的上下文信息了。
  • 为了解决这些问题,DetNet其实有几个初衷。一方面,DetNet所有层都是可以在ImageNet上预训练的,另一方面希望得到兼具高分辨率和高语义的特征。

    结构设计

    DetNet以最常用的ResNet50为baseline,并保证1-4的stage和ResNet50一致。要设计一个适用于目标检测的backbone其实主要有两个难点,一方面,保证网络输出的高分辨率是非常消耗算力的;另一方面,减少下采样倍率会导致语义信息不充分,从而有害于分类等任务。DetNet就是精心设计来处理这两个难点的,它的前4个stage和ResNet50一样,区别从第5个stage开始。需要说明的是,这个网络当然也要适用于分类任务,因为需要在ImageNet上预训练。

    首先,DetNet从stage4开始,下采样倍率维持16不变,并且引入了新的stage即P6来用于后续的目标检测任务,这和FPN是类似的。

    接着,为了保证stage4之后的特征图尺寸不变,每个stage会首先经过一个以1x1卷积(这个1x1卷积其实担负了跨通道的信息融合的作用,非常有效)为核心的膨胀bottleneck中,它的结构如下图B所示,它使用了膨胀卷积来扩大感受野。膨胀卷积也是很消耗算力的,所以stage5和stage6的通道数不会像ResNet那样加倍,而是保持不变,以此减少计算开销。整个网络和FPN类似,最后的几个stage如下图的D和E,在整个数据流动过程中和ResNet是类似的,只是重复B模块和A模块,但是,在自底向上进行特征图融合的时候,经过一个1x1卷积来进行跨stage的信息融合。

    实验

    按照一般的设置预训练backbone并用于检测,和其他方法的对比如下,实验表明,DetNet59其实是在精度上对标ResNet101的,但是算力消耗上其实只比ResNet50多一些。

    同时,作为一个设计用于目标检测的backbone,它不在ImageNet上预训练的表现如何呢,如下表所示,效果也是比ResNet50好不少的。

    作者也在准确率和召回率方面做了实验,可以看到,DetNet在大物体的准确率上提升其实挺大的,且IOU阈值越大越显著,这也说明其最终特征图还保留不少分辨率信息,对定位很有效。此外,IOU阈值要求不高的时候,小目标召回率很高,这说明它也能很好处理小目标漏检问题。

    当然,作者也做了实验证明了我之前所说的那个1x1卷积的巨大效果,还有膨胀卷积的实验我这里就不贴了。

    最后附上一张在检测赛道上和SOTA的对比,提升还是蛮显著的,这篇文章的实验也非常丰富。

    总结

    总的来说,DetNet针对图像分类模型不适用于目标检测任务进行了改进,在backbone上做文章还取得了很不错的效果,实现简单,计算量小,也不需要太多的trick,还是很值得了解的。

    超强干货来袭 云风专访:近40年码龄,通宵达旦的技术人生

    总结

    以上是生活随笔为你收集整理的DetNet解读的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。