点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:AI科技评论

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

本文介绍一篇最近几刚被AAAI2021接收的目标检测工作:《Dynamic Anchor Learning for Arbitrary-Oriented Object Detection》

本文主要是讨论旋转目标检测中anchor匹配机制的问题和一些思考。

论文地址:arxiv.org/abs/2012.0415.

代码:github.com/ming71/DAL.

1

Motivation

基于anchor的算法在训练时首先根据将预设的anchor和目标根据IoU大小进行空间匹配,以一定的阈值(如0.5)选出合适数目的anchor作为正样本用于回归分配的物体。但是这会导致两个问题:

  • 进一步加剧的正负样本不平衡。对于旋转目标检测而言,预设旋转anchor要额外引入角度先验,使得预设的anchor数目成倍增加。

    此外,旋转anchor角度稍微偏离gt会导致IoU急剧下降,所以预设的角度参数很多。(例如旋转文本检测RRD设置13个角度,RRPN每个位置54个anchor)。

  • 分类回归的不一致。当前很多工作讨论这个问题,即预测结果的分类得分和定位精度不一致,导致通过NMS阶段以及根据分类conf选检测结果的时候有可能选出定位不准的,而遗漏抑制了定位好的anchor。

    目前工作的解决方法大致可以分为两类:网络结构入手和label assignment优化,参见related work这里不再赘述。

2

讨论

用旋转RetinaNet在HRSC2016数据集上实验可视化检测结果发现,很如下图b,多低质量的负样本居然能够准确回归出目标位置,但是由于被分为负样本,分类置信必然不高,不会被检测输出;如图a,一些高质量正样本anchor反而可能输出低质量的定位结果。

为了进一步验证这种现象是否具有普遍性,统计了训练过程的所有样本IoU分布,以及分类回归分数散点图,结果如下图。我们将anchor和gt的IoU称为输入IoU,pred box和gt的IoU称为输出IoU。

从中看出:

  • 74%左右的正样本anchor回归的pred box后依然是高质量样本(IoU>0.5);近一半的高质量样本回归自负样本,这说明负样本还有很大的利用空间,当前基于输入IoU的label assignment选正样本的效率并不高,有待优化。

  • 图c说明,当前的基于输入IoU的标签分配会诱导分类分数和anchor初始定位能力成正相关。而我们期望的结果是pred box的分类回归能力成正相关。从这里可以认为基于输入IoU的标签分配是导致分类回归不一致的原因之一。

    这个很好理解,划分样本的时候指定的初始对齐很好的为正样本,其回归后就算产生了不好的预测结果,分类置信还是很高,因为分类回归任务是解耦的;反之很多初始对齐不好的anchor被分成负样本,即使能预测好,由于分数很低,无法在inference被输出。

  • 进一步统计了预测结果的分布如d,可以看到在低IoU区间分类器表现还行,能有效区分负样本,但是高IoU区间如0.7以上,分类器对样本质量的区分能力有限。

    【问:表面上右半区密密麻麻好像分类器完全gg的样子,但是我们正常检测器并没有出现分类回归的异常,高分box的定位一般也不赖,为什么?

    一是由于很多的IoU 0.5以上的点都是负样本的,即使定位准根本不会被关注到;二是预测的结果中,只要有高质量的能被输出就行了,其他都会被NMS掉,体现在图中就是右上角可以密密麻麻无所谓,只要右下角没有太多点可视化的检测结果就不会太差。】

3

方法

3.1、分析

首先是baseline用的是附加角度回归的reitnanet。

直观来说,输出IoU能够直接反映预测框的定位能力,那么直接用输出IoU来反馈地选取正样本不就能实现分类回归的一致吗?但是进行实验发现,网络根本不能收敛。即便是在训练较好的模型上finetune,模型性能依然会劣化发散。

推测是两种情况导致的:

  • 输入IoU大,但是输出IoU小的anchor并不应该被划分为负样本,其更大概率还是正样本的,这部分容易学习的样本丢失严重影响收敛。

  • 任何样本都可能在训练过程中随机匹配到一个目标,但不应该因此直接确信为正样本,这在训练早期尤为严重。

例如,一个anchor回归前IoU为0.4,回归后IoU是0.9,我们可以认为这是一个潜在高质量样本;但是如果一个anchor回归前是0,回归后0.9,他基本不可能是正样本,不该参与loss计算。反之亦然。可见这么简单的思路没有人采用,不是没人想到,而是真的不行。

相似的label assignment工作中,即使利用了输出IoU也是用各种加权或者loss等强约束确保可以收敛,有一个只利用输出IoU进行feedback的工作,但是我复现的时候有很多问题,实验部分会介绍。

3.2 动态 Anchor 选择

可以理解为输入IoU是目标的空间对齐(spatial alignment),而输出IoU是由于定位物体所需重要特征的捕捉能力决定的,可以理解为特征对齐(feature alignment)能力。据此定义了匹配度(matching degree)如下:

前两项比较好理解,通过输入IoU表征的空间对齐能力对anchor的定位性能作先验缓和上面的两种情况以稳定训练过程。第三项表征的是回归前后的不稳定性作用,对回归前后的变化进行惩罚。实际上这一项是有效利用输出IoU的关键,后面的实验会证明这一点。自己私下的实验中发现,有了  和  两项(即  )实际上就能实现超越输入IoU的labelassignment了,但是输出IoU很不稳定,参数比较难调,而加入空间先验后稳定了很多,效果也能保持很好的水平。

这个不确定性惩罚项  有很多表征形式,之前试过各种复杂花哨的表征和加权变换,虽然相对现有形式有所提升但是提升空间不大。没必要搞得故弄玄虚的,所以最后还是保留了这种最简单的方式。

有了新的正样本选择标准,直接进行正常的样本划分就能选出高质量的正样本。这里还能进一步结合一些现有的采样和分配策略进一步获得更好的效果(如ATSS等),论文没有展示这部分实验可以自己尝试。学习策略上,在训练前期为了避免输出IoU的不稳定影响,采取逐渐加大空间对齐影响系数,直至设定值。实验证明这个策略不影响最终效果,只是加速收敛。

3.3 Matching-Sensitive Loss

得到匹配度矩阵后,我们可以将其加权到训练loss中,核心思想是增强分类器对高质量样本的识别效果,从而解决Motivation中提到的分类回归不一致的问题。

具体而言就是将匹配度矩阵进行补偿,最大值补偿到1,补偿值加权到正样本上去,使之更多地关注高性能样本的分类和回归性能。一开始我采用的是直接将md加权到loss,效果很差找问题调了一段时间才解决。补偿加权的方法相比直接加权有两个好处:

  • 避免分类器对匹配度划定的负样本进行不合理的关注。比如在md补偿的策略下,一个低质量正样本可能导致很大的补偿值从而带来一堆低质量正样本;

  • 由于匹配度是介于[0,1],直接加权将导致正样本被进一步稀释;

  • 确保分类和回归任务对补偿的anchor的足够关注,每个样本至少有一个anchor能学好。例如对于某个gt最大md为0.2,直接加权将导致其loss贡献很小,本来就难匹配的目标更难学了。

损失函数表示和具体分析如下:

对于分类任务而言,如果正样本全部置为1,就无法区分高效md不同的样本了(显然md=0.1和md=0.9的样本被分为正样本的概率不应该一样)【问:检测器正常情况下就是这么做的,咋就没你这么多事?不是不能区分。可行的原理是通过不断的学习,优化下降loss来对“边缘”程度不同的hard example进行判断。

所以我们看到定位能力和分类分数常常不会差得很远,这都是反复的优化的结果。显然这种策略有效但是很笨,其中显然还有东西可以做,可以大大提高训练效率】。

所以这里通过构造带有定位潜力信息的md补偿矩阵来加权loss进一步关注高质量正样本的学习情况,使得分类得分更加准确有效,提高NMS的准确性。

对于回归任务而言,早在cascade RCNN就提出过高精度anchor对loss贡献相对小而难以优化的问题,还有很多工作从IoU分布、重采样、归一化等方法缓解这个问题。这里我们采用的还是匹配度信息,方法也是很质朴的对正样本re-weight;只不过加权关注的不再是空间对齐的anchor,而是对根据md度量的高质量样本给予更多的关注。

采用匹配度敏感的loss能够有效增强检测器的精确定位样本的区分能力,如下图所示,左边是正常训练检测器,可以看到定位精度上高性能部分的额区分度很低,但是加了MSL后样本的定位性能大大提高,同时分类分数也对应提高,越往右上角颜色越深,分类分数和定位性能有较好的关联性。很多分析由于原论文篇幅有限没有展开。

4

实验

旋转目标的实验上采取了四个数据集:三个遥感数据集DOTA,HRSC2016,UCAS-AOD和一个文本检测数据集ICDAR2015。

同时在水平目标数据集上也进行了泛化性实验,采用的是ICDAR2013,NWPU VHR-10和VOC2007。为了证明我们的方法能够有效提取高质量的anchor,从而减少旋转目标检测中anchor的预设,缓和不平衡问题,我们在特征图每个位置仅仅使用了3个水平的anchor,文本检测由于目标宽高全都很常悬殊,采用5个ratios。

4.1 Ablation

4.1.1 Component-wise evaluation

with input IoU是正常的label assignment方式,相比之下,引入output IoU后性能反而略有下降,特征对齐的信息并不能被有效利用。实际上这里的  设置为0.1,因为输出IoU实际上非常不稳定,比例一旦增大就会导致训练不收敛。

然而在采用不确定性惩罚后,即使是很简单的直接作差形式性能也能有很大提高,相比前一个模型直接提升了7%。加入MSL后,mAP进一步得到提高达到88.6。

同时,相比AP50的2.7%涨幅,AP75提高了9.9%,可见MSL对高精度定位大有裨益。

4.1.2 Hyper-parameters

匹配度的设置实际上引入了两个额外的超参数,因此补充了敏感性实验如下。表中的结果和分析结论基本一致:当不确定性抑制项存在,合理减小会使特征对齐的影响增大,同时mAP增大,说明能够输出IoU能够有效指导样本划分过程。如果过大将使得空间对齐能力占主导地位,输出IoU带来的不稳定减小,此时不应施加很强的扰动惩罚,即减小的值,如时, 从3减小到5,mAP从70.1提升到83.5。

此外,正如上面所说,其实  也就是正常的IoU完全可以不要,仅靠  和  就能取得更好的结果,但是很敏感anchor设置和  取值以及  的形式,比较难调。

这为匹配度公式的参数调试提供一种思路:应该同时增大或减小。此外观察不难发现, 在0.3-0.5的效果是最好的,也大致可以确定。这个结论在其他数据集和其他anchor设置上也验证过,依然成立,论文篇幅有限这里没有予以展示。但是说实话,取值而言会有偏移,虽然不会太多但是还是要调一调,这个有点不快乐。

4.2 实验结果

4.2.1和其它sampling 方法比较

表中列举的都是自己复现的结果,采用各自论文的思想但是由于原论文都不是做旋转检测的,并不完全一致。值得一提的还是HAMbox。

很多朋友问我,我说发生了肾莫事,我一看截图,啊,原来左天,塔门有人复现不出hambox的效果,不收敛或者下降。我这里直接复现其实也不收敛,最后的85.7结果是在收敛模型上finetune,并且没有直接用output IoU,而是加了input IoU调制;为了防止大量低质量compensated anchor,设置的每个物体只匹配三个anchor;并且用上类似curriculum learning的方式慢慢加大系数才学收敛的,收敛后效果也害行。

比较意外的是atss,没想到效果这么好,稍微调一调就86+。

4.2.2 Results on DOTA

RetinaNet在DOTA的结果是唯一一处用的不是我开源的代码,而是临时写的基于mmdetection的,因为我的代码优化不行占显存速度慢,顺便也在s2anet大佬肩膀上试了试。

如果问为肾莫没在DOTA上做ablation,只能说硬件显卡不够,大意了,跑dota就很费劲了,调了好久,我只能耗子尾汁。

4.2.3 Results on HRSC2016

稳定涨了几个点,也是这个数据集小容易调。注意啊,很快啊,只放了3anchor就能比肩一些多anchor的的,速度大概24FPS。

4.2.4 Results on UCAS-AOD

这个上面比较意外的是AP75,提升非常大,达到惊人的74,甚至有点不对劲。但是可视化DAL前后的结果,发现也在情理之中。这个数据集比较简单,尤其是飞机,是个旋转检测器都一副要上90封顶的样子。只是baseline很多定位性能卡在AP75坎的检测结果全被MSL优化后抬上来了。

4.2.5 Results on ICDAR2015

其实可以看出这个方法并不万能,在文本检测器上还是不行,文本检测的难点不只是匹配。baseline只有77.5的情况下,反复调参加通用trick也只能到81.5,加了多尺度测试勉强提点到82+,和当前先进的检测器还是有相当的差距。但是可以移植到一些sota检测器上去,也会有所提升。

(BTW,文本和通用旋转检测确实不太一样,要实现较高F1只是解决旋转问题远远不够。例如之前写了个Cascade-RetinaNet在HRSC2016的baseline加点简单增强就有85+,但是移植到IC15上印象中裸跑才不到75。)

4.3 Experiments on HBB dataset

其实这个方法是通用的,只是旋转目标匹配难匹配,所以提升更大更明显。于是如下,可以看出在三个数据集都有提升涨点稳定。

最后这次的四个reviewer都很认真细致,提出了很多有帮助的建议,还是比较走运的。

开源程序或者论文上有问题疑惑欢迎提问和联系,遥感旋转目标检测相关方向的同学欢迎一起交流学习。

原文链接:https://zhuanlan.zhihu.com/p/337272217

end

这是我的私人微信,还有少量坑位,可与相关学者研究人员交流学习 

目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟

王博的公众号,欢迎关注,干货多多

王博的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章(上)

博士笔记 | 周志华《机器学习》手推笔记第八章(下)

博士笔记 | 周志华《机器学习》手推笔记第九章

点个在看支持一下吧

AAAI 2021 | 用于旋转目标检测的动态锚框学习策略相关推荐

  1. AAAI 2021中的目标检测(详细版with code)

    本文转自知乎,已获作者张泽今授权转载,请勿二次转载.原文链接: https://zhuanlan.zhihu.com/p/345472885 本篇文章来介绍一下 AAAI 2021 会议录取的目标检测 ...

  2. 2021IAAA北京理工大学面向任意目标检测的动态锚点学习(DAL)

    面向任意目标检测的动态锚点学习 摘要:面向任意的目标广泛地出现在自然场景.航空照片.遥感图像等中,因此面向任意的目标检测得到了广泛的关注.目前许多旋转探测器使用大量不同方向的锚点来实现与地面真实框的空 ...

  3. RSDet:学习用于旋转目标检测损失

    目录

  4. 旋转目标检测 校准的深度特征用于目标检测SSA

    目录 旋转目标检测rotation-yolov5 旋转目标检测综述 SSA旋转目标检测 旋转目标检测rotation-yolov5 旋转目标检测rotation-yolov5笔记_AI视觉网奇的博客- ...

  5. 李沐动手学深度学习v2-目标检测中的锚框和代码实现

    一.目标检测中的锚框 前提: 本节锚框代码实现,使用了很多Pytorch内置函数,如果有对应函数看不懂的地方,可以查看前面博客对相应函数的具体解释,如下链接所示: Pytorch中torch.mesh ...

  6. GWD:基于高斯Wasserstein距离的旋转目标检测 | ICML 2021

      论文详细描述了当前旋转目标检测的主要问题,提出将旋转回归目标定义为高斯分布,使用Wasserstein距离度量高斯分布间的距离用于训练.目前,常规目标检测也有很多将回归转化为概率分布函数的做法,本 ...

  7. ICML 2021 | 上交华为提出GWD:旋转目标检测新方法

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:yangxue |  已授权转载(源:知乎) https://zhuanlan.zhihu.com/p ...

  8. 2021年小目标检测最新研究综述 很全面值得收藏

    摘要 小目标检测长期以来是计算机视觉中的一个难点和研究热点.在深度学习的驱动下,小目标检测已取得了重大突破,并成功应用于国防安全.智能交通和工业自动化等领域.为了进一步促进小目标检测的发展,本文对小目 ...

  9. CVPR 2022 | 浙大提出Oriented RepPoints:旋转目标检测网络

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 作者:小海马 |  已授权转载(源:知乎)编辑:CVer http ...

最新文章

  1. 初具雏形的UL标准侧重于自主车辆的安全性
  2. Emacs 矩形编辑
  3. 布尔值_Python基础知识点手册——布尔值及布尔运算
  4. android Module之间数据传递
  5. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
  6. NSArray 所有基础点示例
  7. 一步一步写算法(之 A*算法)
  8. LeetCode(9)Palindrome Number
  9. Confluence 6 针对大数据量备份
  10. 2018年全国卷Ⅰ卷理科数学图片版
  11. 用html、css实现网页聊天页面
  12. java web需要学多久_java框架都有哪些 要学多久
  13. 洋媳妇教育孩子的方法,令中国婆婆大开眼界 - 人人都是艺术
  14. 神经网络入门书籍推荐,神经网络方向研究生
  15. 毕业生自传--(宝岛海南“三月游”)
  16. 自学Java年薪20万的学习方法,大佬教你如何去学
  17. 【源码部署】Kettle IDEA 源码部署
  18. jpush android 离线推送,JPush极光推送3分钟搞定Android Push
  19. python实现奇异值分解_SVD(奇异值分解)Python实现
  20. 戴尔m520的服务器型号,Dell服务器PowerEdge M520

热门文章

  1. 用pycharm做手机软件_从零开始学python:初学者用哪种工具好?南大博士选择用pycharm...
  2. python简单体育竞技模拟_python初体验 —— 模拟体育竞技
  3. linux64bit安装mysql、jdk、nodejs、nginx笔记
  4. 查找文件夹下所有文件名字_我的电脑如何快速查找文件,分分钟钟找到你想要的文件!...
  5. java 异常 过滤器_java-Spring:如何使过滤器引发自定义异常?
  6. flex 瀑布流 (多列样式column布局内容被截断)
  7. 剑指offer 二叉树的深度
  8. CF125E MST company (凸优化+MST)
  9. 百度前端学院参考答案:第二十五天到第二十七天 倒数开始 滴答滴 滴答滴(2)...
  10. macaca使用中问题解决方法整理