我是靠谱客的博主 坚强花瓣,最近开发中收集的这篇文章主要介绍深度学习aps_深度学习的目标检测算法是如何解决尺度问题的?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

@种树的左耳 的回答讲得很详细了,也包括很多最新的 paper,也谈谈我个人的理解吧。

注:文中的年份均为文章首次挂在 arxiv 上的年份,本回答会持续更新。

2015. Faster R-CNN

Faster R-CNN 中解决尺度(scale)问题的方法其实很简单,就是利用不同面积的 anchor(原文中有 3 个面积,分别为 128^2、256^2 和 512^2)。Faster R-CNN 中不同大小的 anchor

RPN 的正样本包括:与 GT IoU 大于 0.7 的所有 anchor

所有 anchor 中与该 GT IoU 最大的 anchor

因此对于不同大小的 GT,需要利用不同大小的 anchor 分别与其匹配,否则 RPN 阶段会出现由于没有和 GT 匹配的 anchor 或 anchor 较少,导致生成的 proposal 中没有包含 GT,就会导致漏检。通过设置不同面积的 anchor,即可实现对不同 scale 物体的覆盖和检测。

2015. SSD

SSD 由于也引入了 anchor 的概念(文中称为 default box),可以直观理解成 Faster R-CNN 中的 RPN,区别是 RPN 是二分类,而 SSD 是 (N + 1) 分类。与 Faster R-CNN 中 RPN 从单个 feature map 上预测相比,SSD 将其改进为从多个 feature map 上同时预测;与此同时,SSD 中,不同 feature map 上的 default box 的尺寸 scale 与该 feature map 的深浅有关,例如最浅层对应的 scale 为 0.2,而最深层对应的 scale 为 0.9。SSD 不同 feature map 上不同 size 的 default box

2016. FPN

FPN 引入 feature pyramid 结构:(b) 对应 Faster R-CNN,(c) 对应 SSD,(d) 对应 FPN

文章中认为,CNN 天然具有 feature hierarchy,如上图中的 (c), 也就是 SSD 对应的方法,FPN 的改进是将语义信息较强的深层 feature map 和分辨率高的浅层 feature map 相结合,具体采用下面的 block(深层 feature map 2x 上采样,浅层 feature map 用 1×1 卷积,之后相加):FPN lateral connection

引入 FPN 结构后,在 Faster R-CNN 框架下,对小物体的检测涨点明显:FPN 结构 APs 提升明显

2018. FPR

@孔涛 博士的成果。FPR 是我自己起的简称,原文参考:

文章认为 FPN 虽然引入横向连接融合不同 feature map 的信息,但新生成的 feature map 是原来 feature map 的线性组合,表征能力不强,本文中采用的是结合全局信息和局部信息的 block:FPR 中的 block

其中 Global attention 用的是 SE-block,local reconfiguration 用的是 residual learn block:

引入以上 block 融合深层语义信息后,FPR 对各个 scale 物体的检测均有一定的提升:FPR 结果,与 SSD 相比 APs 上涨 4.5 个点

2017. SNIP

CVPR 2018 oral paper。核心思想是使 CNN 同时学习所有 scale 样本太难了,所以在训练时,只选择一定范围 scale 的 anchor 或者 proposal 作为有效样本,scale 过大和过小的样本全部忽略。在测试时,为了应对不同 scale,采用图像金字塔的方式,对每张图都采用上面方法训练得到的检测器,同时只保留 scale 在一定范围内的结果,最后做 NMS。SNIP 训练和测试方法SNIP 结果,可以看到对各个 scale 物体的检测性能均有提升

2018. TridentNet

图森 @Naiyan Wang 的成果。采用三支并行 branch 的网络结构:TrientNet 网络结构

其中三个 branch 空洞卷积的参数(分别对应 0、1 和 2)不同,但参数共享。在训练时,不同的 branch 采用了 SNIP 论文中的方法,只选择一定 scale 内的样本参与训练。TridentNet 性能

2019.3.6 更新

2019. FSAF

SSD 中,每个 feature map 上的 default box 的 size 都和 feature map 的尺寸相关,简单来说,feature map 尺寸大 stride 小,用小尺寸,尺寸小 stride 大,用大尺寸。但这些尺寸都是人为选定的,一般的经验都是,模型学出来的效果比手工给的要好,那是否可以让模型学习从哪一层输出呢?本文解决的就是这个问题。

网络结构是在 RetinaNet 的每一层都增加的分类和回归的 branch,即上图中的虚线部分。注意实线对应的 layer 是 RetinaNet 的原始 layer,是基于 anchor 的,而本文的 layer 是 anchor-free 的。

两个 branch 的 loss 分别为 Focal loss(分类)和 IoU loss(回归),分类的 label 为正样本、负样本和忽略,回归的 label 分别为与 top、bottom、left、right 四个边界的距离(对 bbox 的宽和高进行归一化)。

为了让网络自己选择从哪一层预测,FSAF 在训练时,选择回归和分类最小的 layer 进行反传,在测试时,最合适的 layer 自然输出的分数会最高。

FSAF 在 ResNeXt-101 backbone 时,mAP 为 44.6,目前是单阶段 OD 的 SOTA 结果。

最后

以上就是坚强花瓣为你收集整理的深度学习aps_深度学习的目标检测算法是如何解决尺度问题的?的全部内容,希望文章能够帮你解决深度学习aps_深度学习的目标检测算法是如何解决尺度问题的?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部