目标检测论文阅读:IoU Net

Acquisition of Localization Confidence for Accurate Object Detection

论文链接:https://arxiv.org/abs/1807.11590
代码链接:https://github.com/vacancy/PreciseRoIPooling (PreciseRoIPooling部分)
之前在分享Cascade R-CNN的时候曾经谈过,通过级联改变IoU阈值的方法没有从根本上改变阈值,因为IoU还是属于隐藏变量,没办法用SGD优化。不过没想到这么快就有人把IoU变量提取出来作为CNN优化的目标了,这就是今天要介绍的IoU Net。
这篇文章其实看了比较久,尤其是Bounding box refinement的方法比较难懂。另外开始之前,建议有兴趣的同学可以看一下Cascade R-CNN这篇文章,感觉一起看会更有收获。

1. Introduction

作者的出发点其实很简单,第一,相信很多人在使用检测问题最常见的的NMS算法时候,都会有这样一个疑惑:为什么类别的得分可以作为评判框和gt重合度好坏的依据呢?会不会存在,某个框明明和gt贴合得更好,但是却因为类别得分没有其它框高被排除掉了呢?答案是肯定的。
作者这里给出了一些fpn的检测结果,可以看到,和黄色的gt相比,绿色的IoU更高,和黄色框贴合的更好。但是它们的类别得分即cls conf却没有红色的框高,因此这些绿色的框在NMS阶段将会被排除,这明显不符合我们的直觉。
在这里插入图片描述
第二点,如果看过Cascade R-CNN或者其它有级联结构算法的同学,都会知道,有些人尝试在RPN阶段后迭代多个R-CNN的Head,希望进一步修正检测框的结果,来提高精度,但是很多算法的级联结构并不能真正提升最终效果,比如下面这张图片的第一行,多次迭代后IoU反而变差。实际上作者做了实验发现,并不是迭代结构越多越好,相反,在最开始1-2个,结果是变好的,但之后反而是下降的,作者称之为Non-monotonic(非单调)bounding box regression。
在这里插入图片描述
有兴趣的可以自己去Cascade R-CNN一文里面寻找原因。从本文出发来看,作者认为这两个问题的根源是统一的,网络没办法预测出IoU,即预测出位置的置信度;因为没办法预测出IoU,因此NMS只能用类别得分做替代……同样的,迭代结构也只能盲目迭代,没有一个位置置信度告诉我迭代到到当前阶段,预测出来的框是不是更精确了,是不是要停止迭代。
要想更好地解决这两个问题,网络必须能够直接预测出框的IoU,告诉我们预测出来的位置有多精确。因此作者做了如下几个工作:

  1. 提出了IoU Net,使得CNN能预测出候选框的IoU
  2. 将传统的NMS替代成了IoU指导的NMS,使用位置可信度替代了类别可信度 ,更可靠
  3. 提出了一种optimization-based bounding box refinement方法,替代级联多个R-CNN Head来提高回归精准度的方法
  4. 提出了一种新的Pooling方法,这也是IoU网络的求导要求所决定的

2. Method

网络框架

作者提出的整体网络架构如下:
在这里插入图片描述
可以看到,FPN特征提取到RPN整个阶段基本都是相同的,IoU Net实质上是在第二阶段多搞了一条分支出来,并且提取RoIs的Pooling方法也有了更改,这是一个整体的直观印象。

IoU Net & IoU-guided NMS

这两个部分内容不是太多一起说了。
首先,IoU Net的分支是可以和RCNN分支一起训练的,而且是一个class-aware的分支。另外在训练的时候,作者采取了数据增广的策略,随机变换。如果变换后的框和变换前的IoU大于0.5的话,就会保留,但是如果小于0.5的话就会舍弃,这里的话其实我本人也有一点疑惑,因为作者的说法是We generate bounding boxes and labels for training the IoU-Net by augmenting the groundtruth, instead of taking proposals from RPNs,我不是很理解作者想要表达的意思,这是我对本文的两个疑惑之一。
关于IoU-guided NMS其实没什么好说的,大致流程如下图所示,和通常的NMS相比,只是把选择和排除的依据从类别得分替换成了位置得分。
在这里插入图片描述

Bounding Box refinement

个人感觉这应该是本文最难理解的一个地方,文章也有很多地方写的不清楚,还牵扯到了IoU-Net分支的训练标签或者说target是什么这一关键问题。完整的code没有release,所以我只敢说说我目前的猜测和认知,并不能保证是正确的,如果作者回复了我的邮件,我再更新。
先来看作者提出的Pooling算法:
在这里插入图片描述
这个算法通过积分的方式,将RoIs区域内所有的点做了积分,应该说比RoI Align还要精准很多。而每个点的f(x,y)的值的求法,和差分方法也有点类似,这里也不贴具体公式了,大致就是利用最近的四个点的值和它到四个点距离的不同计算出该位置的值。
然后就是关键的refinement部分了,首先来看一张图,关于这个算法的伪代码流程:
在这里插入图片描述
我之前看到有博客说这个算法是关于怎么计算IoU-Net分支的梯度的,对此我不敢苟同。因为第6行很明显,直接更新的是detected box。再考虑到名称,我认为这个本质上是个无监督的优化算法,不断优化detected box的位置,而8行就是优化算法停止的条件,即得分上升幅度非常小甚至得分下降后不再对该detected box进行优化。
为什么说是无监督的?因为作者在inference时候也采用了这个方法,它是和NMS一样的,类似于可以直接对detected box的结果使用的trick。因此就带来了一个关键问题梯度是怎么计算的?毕竟,梯度的计算是需要标签和target的,这是我对本文的另一个疑惑。
我对此的想法是,IoU-Net分支在训练时候的target应该是提取出来的RoIs和gt之间的IoU,这样,该分支通过学习,最后实现了这样一个功能:我把RoI的Pooling后的特征输入进去,就得到了这个RoI的IoU。即有一个:box的位置——Pooling得到的特征——预测出该位置的IoU这样一个逻辑关系。
在测试的时候,我得到了一个detected box,计算下发现IoU不是1,有损失,就把1当做目标来对detected box的位置求导,按照上一段的逻辑关系,这是可以实现的,作者也给出了求导的链式法则。得到新的detected box后,由于位置改变,pooling的特征改变,IoU也会更加精准,然后不断优化,直到满足次数或者结果没有提升。当然这是我目前个人的理解,正确与否还是要看后续,也欢迎大家提出自己的理解。

3. Experiment

作者在FPN上做了实验,发现IoU-Net的引入确实可以实打实地提升效果。不过很有意思的是,我们发现在AP50和AP60两个指标上,添加IoU-Net效果反而没有什么太大提升,如果进一步使用IoU-NMS和Refine算法,甚至会让结果更加劣化。
在这里插入图片描述
这里的原因作者给出的解释是在低IoU条件下,检测出来的结果方差很大,这需要结合原文中的一张图来理解,就是实际IoU和检测出来的位置置信度图:
在这里插入图片描述
如图,IoU不大的时候,比如0.5-0.7这个区间,检测结果会在0.5-1.0整个段上分得比较开,这也就是方差比较大。因此,矩形框框出来的那部分,它们具有实际IoU不大,但预测出来的分数很高的特定,在IoU-NMS和Refine的时候会影响最终的结果。
以上就是这篇IoU-Net了,不得不说,这篇文章很多地方都有点让人看不懂,当然有我自己的问题,但我始终也感觉文章有些该交代的细节还是说的太简略了,不知道code最后会不会release。但是我觉得,提取IoU变量这一尝试是非常有意义的,如果有一天能将尺度之类的变量也提取出来,也许离解决detection问题可以近一大步。目前来说,还是希望能尽快得到作者的回复吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值