(五)比赛中的CV算法(下5)检测网络调优(1)多尺度特征融合

--NeoZng[neozng1@hnu.edu.cn]

如果觉得笔者写得还不错,关注一下点个赞吧!

稍作总结后,笔者在这里再介绍一些目标检测领域的trick和改进方法(其实现在已经不新了),前一部分主要是关于LF的设计,而这一部分主要是关于关于模型的改进的经典方法与训练技巧,还有一些有启发性的机制。

  • 多尺度特征融合

    由于CNN基本构建模块的特点,在最后输出的feature map往往是浓缩了大量的语义信息(“高级的特征”)但分辨率较低、对细节的保留较少,因此对于小目标的检测效果不尽如人意,且模型对检测对象的尺度不变性大部分也只能来自于训练数据。

    SPPNet提出的空间金字塔池化通过对最后一层feature map执行stride大小不同的池化后再进行concatenate,能在一定程度上解决不同尺度物体的检测问题。但是仅仅使用了高级特征(或者说特征其实还是来自同一层),对于不同尺度的融合还是不太好。

    spp的结构,用不同大小的grid分割后进行max pooling操作,最后concatenate并投入下一层

    SSD首先提出在Backbone的不同层输出进行检测,就是希望能同时利用不同层次的信息。但是对于多个feature map的检测也导致了效率的低下,并且低层的feature map能够提供的信息太少而直接检测的计算量又大(分辨率高),虽然对于不同尺度的物体检测能力略有提升,但是速度相对YOLO下降的比较多。

 

几种检测的方法

(a).传统差分图像金字塔,抽值实现降采样

(b).深度学习经典做法,使用顶层feature map检测

(c).SSD的做法,利用深度网络提取feature并在每一层map上检测

(d).FPN做法,top-down融合并在不同的map上检测

那么很自然的我们就会想到,有没有什么方法可以综合底层的细节和高层语义信息,随后利用融合后的信息进行检测,将各种尺度的目标一网打尽?于是便有人提出了特征金字塔网络Feature Pyramid Netwok。和以往的图像金子塔不同,FPN的金字塔由深度网络提取的不同层级特征堆叠而成,并在堆叠的基础上通过top-down的element-wise add实现特征的融合,从而实现对不同尺度物体的检测。

FPN金字塔中的下采样方式,最顶层的特征会经过x2的上采样插值后和底层feature map相加

注意到FPN只有top-down的融合路径,金字塔顶层无法享受到底层的更多细节,那直接添加down-top的融合不就完事了?PANet的作者直呼有手就行,提出了这个路径聚合网络用于更充分的特征融合(PANet首先被用在语义分割上,分割其实相当于像素级的分类,因此对于细节的要求更加严苛和敏感,特别是边缘和纹理)。

PANet的整体结构如下,红色虚线表示原始图像经过数十甚至近百层的卷积(即原图经过backbone到最后顶部的feature map)得到的P5已经没有什么细节信息了。那么它相比FPN的不同就是(b)部分的down-top连接将底层细节通过较短的路径融合到上层,即绿色虚线所示的路径(P2->N2->N3->N4->N5)。而这里的Top-down连接通过3x3,stride=1的卷积后再相加来实现而不是简单的element-wise add,让网络自己去学习如何进行特征融合(当然如果为了追求速度将卷积换成和FPN中一样的element-wise add也是可以的,或多轻量化网络都是这么做的)。通过绿色虚线路径的特征大概只需要十层不到的conv就能达到N5处,这样的两个部分(top-down和down-top)就很好地解决了利用顶层feature map检测时缺少细节和纹理的问题。

PANet的结构

 PANet中down-top连接的结构

不过人们对于极致的追求是永不止步的,在进行了大量实验后,EfficientNet将Neck(一般把检测框架中的特征融合/选择部分称作neck)进行了进一步优化,提出了Bi-FPN(双向特征金字塔)。

 左侧白色单元backbone中不同层次的feature map输出,虚线框内是BiFPN的结构;右侧是PAN的结构

Bi-FPN的总体结构和PAN相同,都是top-down和down-top的排列,我们主要关注他们的不同之处。首先是feature map跨过top-down下采样融合部分直接到bottom-up部分的远跳连接,这和ResNet中的结构几乎是一致的, 作用也是相同的,可以分散梯度并防止退化。另一个改变是删除了PANet中红色框的单元直接连接到下一层,作者认为这种单边的连接没有必要添加额外的卷积,因为没有融合的对象,如果进行卷积反而会引入不同层次的特征并增加梯度回传的难度。若有必要,可以通过堆叠Bi-FPN的block实现更多的融合并方便地控制网络规模和深度(g家惯用套路了,比如inception)。

还有其他的思路如把接下来要介绍的注意力机制引入特征金字塔中,为不同的连接路径设置不同的可学习权重、通过GAN由高层语义信息还原底层细节(类似超分辨率)等,感兴趣的同学可以自己探索。

若觉得笔者写得还不错,给个关注点个赞吧!

下一期将会更新CV中的注意力机制!关注HNU跃鹿战队第一时间获取更新!

版权声明:本文为CSDN博主「HNU跃鹿战队」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/NeoZng/article/details/122657954

HNU跃鹿战队

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

目标检测-算法评价指标

算法评价指标 FPS(Frames Per Second,每秒传输帧数) 用于评估目标检测的速度,即每秒内可以处理的图片的数量或者处理一张图片所需时间,即图像的刷新频率。代

目标检测算法简单说明(自己正在学习)

目标检测是作为计算机视觉领域的核心任务之一,其主要任务就是对图像或者图像序列的物体进行分类和定位。 传统目标检测有很多弊端,比如泛化性能差,需要大量的人工去提取特征等缺点,并且由于卷积神