概述
@种树的左耳 的回答讲得很详细了,也包括很多最新的 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_深度学习的目标检测算法是如何解决尺度问题的?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复