FreeAnchor: Learning to Match Anchors for Visual Object Detection论文详解

原文链接:https://arxiv.org/abs/1909.02466
项目代码:https://github.com/zhangxiaosong18/FreeAnchor

问题

在基于anchor的目标检测算法中,训练时,通常通过anchor和真实object 框之间的IoU来决定该anchor是否用来预测object (包括类别和位置),通常IoU超过某一阈值则认为该anchor为正例(即作为预测object ),小于某一阈值则认为该anchor为背景。本文的思想就是通过修改loss函数去除人工参与指定anchor的过程,使网络能够自主学习选择哪个anchor和真实object 进行匹配。

通用loss函数

基于anchor算法常用的loss函数如下所示,A表示anchor集,每一个anchor a j ∈ A a_{j} \in A ajA包含了一个类别预测项 a j c l s ∈ R k a_{j}^{cls} \in R^{k} ajclsRk和一个位置预测项 a j l o c ∈ R 4 a_{j}^{loc} \in R^{4} ajlocR4 k k k指的是object 类别的数目。B表示object 集, b i ∈ B b_{i} \in B biB表示一个object。公式中的 C i j ∈ 0 , 1 C_{ij} \in {0,1} Cij0,1表示object b i b_{i} bi和anchor a j a_{j} aj是否匹配。

通常, b i b_{i} bi a j a_{j} aj的IoU大于某个阈值,则 C i j = 1 C_{ij}=1 Cij=1(当有多个 b i b_{i} bi满足条件时,取最大IoU最大的,这样就保证了一个anchor只能匹配一个object),否则 C i j = 0 C_{ij}=0 Cij=0

在这里插入图片描述

公式1

从该loss函数可以看出,只优化了分类和位置回归,忽视了对object-anchor匹配的优化。

自定义检测似然函数

**目标 :**该似然函数能够与召回率、精度和NMS算法兼容。

为了理解,假设一张图像anchors数目为20000,object数目为2。

为了定义优化似然函数,对于每一个object b i b_{i} bi选择n(实验中取50最佳,后续为了便于理解,直接取50)个候选anchors,这些候选anchors是通过20000个anchors与 b i b_{i} bi计算iou,选取iou最大的前50个,所有候选anchor集记为 A i A_{i} Ai

  1. 为了优化召回率(正确预测的object 数目/真实的object 数目),对于每一个object b i b_{i} bi我们需要保证至少存在一个anchor a j ∈ A i a_{j} \in A_{i} ajAi使得预测的类别和位置与ground-truth相近,则定义召回似然函数如下:
    P ( θ ) r e c a l l = ∏ i max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) ( 公 式 2 ) P(\theta)_{recall}=\prod_{i}\max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) (公式2) P(θ)recall=iajAimax(P(θ)ijclsP(θ)ijloc)2
    P ( θ ) i j c l s P(\theta)_{ij}^{cls} P(θ)ijcls: 表示分类置信度,取值范围为[0,1],size(2,50) ,网络类别估计层经过Sigmoid函数输出,第一行表示object b 1 b_{1} b1对应的50个候选anchors属于该object 类的概率。

    P ( θ ) i j l o c P(\theta)_{ij}^{loc} P(θ)ijloc: 表示定位置信度。取值范围为[0,1],size(2, 50), 第一行表示object b 1 b_{1} b1对应的50个候选anchors定位该object 的置信度。其计算是将公式1中的位置损失函数 L ( θ ) i j l o c L(\theta)_{ij}^{loc} L(θ)ijloc改写为似然概率的形式:
    P ( θ ) i j l o c = e − β L ( θ ) i j l o c P(\theta)_{ij}^{loc}=e^{-\beta L(\theta)_{ij}^{loc}} P(θ)ijloc=eβL(θ)ijloc

    L ( θ ) i j l o c = s m o o t h L 1 ( a j l o c , b i l o c ) L(\theta)_{ij}^{loc}=smoothL1(a_{j}^{loc},b_{i}^{loc}) L(θ)ijloc=smoothL1(ajloc,biloc)

smoothL1损失函数请参看:https://blog.csdn.net/weixin_41940752/article/details/93159710

定义上述似然函数后,再回头看看 P ( θ ) r e c a l l = ∏ i max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) P(\theta)_{recall}=\prod_{i}\max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) P(θ)recall=iajAimax(P(θ)ijclsP(θ)ijloc)的含义:

  • max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) \max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) ajAimax(P(θ)ijclsP(θ)ijloc): 对一个object b i b_{i} bi,其有50个候选anchors,将每个anchor的分类置信度和定位置信度相乘,作为该anchor的置信度,选取置信度最高的anchor。

  • ∏ i max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) \prod_{i}\max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) iajAimax(P(θ)ijclsP(θ)ijloc):将每个object 对应的最高置信度相乘。此处优化的object 是希望 P ( θ ) r e c a l l P(\theta)_{recall} P(θ)recall越大越好。

2.为了提高检测精度(正确预测的object 数目/预测为object 的数目),检测器需要将定位较差的anchor分为背景类,精度似然概率函数定义如下:
P ( θ ) p r e c i s i o n = ∏ j ( 1 − P { a j ∈ A − } ( 1 − P ( θ ) j b g ) ) ( 公 式 3 ) P(\theta)_{precision}=\prod_{j}(1-P\{a_{j} \in A_{-}\}(1-P(\theta)_{j}^{bg})) (公式3) P(θ)precision=j(1P{ajA}(1P(θ)jbg))3

  • ( 1 − P ( θ ) j b g ) (1-P(\theta)_{j}^{bg}) (1P(θ)jbg):反应分类置信度,不属于背景类的置信度。size(20000)。
  • P { a j ∈ A − } P\{a_{j} \in A_{-}\} P{ajA}:反应定位置信度,属于背景类的置信度。

为了提高检测精度,我们需要当anchor属于背景类的定位置信度比较高时(及anchor定位较差),属于背景类的分类置信度比较高,即不属于背景类的置信度比较低。 P ( θ ) p r e c i s i o n P(\theta)_{precision} P(θ)precision的定义能满足该需要。

接下来就要定义anchor a j a_{j} aj属于背景类的定位置信度:
P { a j ∈ A − } = 1 − max ⁡ i P { a j − > b i } P\{a_{j} \in A_{-}\}=1-\max \limits_{i}P\{a_{j} -> b_{i}\} P{ajA}=1imaxP{aj>bi}
其中 P { a j − > b i } P\{a_{j} -> b_{i}\} P{aj>bi}表示anchor a j a_{j} aj能够正确匹配object b i b_{i} bi的概率(不要着急问为什么,目前只是理论定义,接下来会讲如何定义该函数才能表达此意义),那么 P { a j ∈ A − } P\{a_{j} \in A_{-}\} P{ajA}就反应了 a j a_{j} aj与所有object 都不匹配的概率,即属于背景类的概率。

那么接下来就要开始研究如何定义 P { a j − > b i } P\{a_{j} -> b_{i}\} P{aj>bi}才能表示anchor a j a_{j} aj能够正确匹配object b i b_{i} bi的概率,另外需要注意的一点是,该概率是从定位角度出发的。

P { a j − > b i } P\{a_{j} -> b_{i}\} P{aj>bi}定义

为了能够与NMS兼容, P { a j − > b i } P\{a_{j} -> b_{i}\} P{aj>bi}应该满足三个性质:

(1) P { a j − > b i } P\{a_{j} -> b_{i}\} P{aj>bi}应是 a j l o c a_{j}^{loc} ajloc b i l o c b_{i}^{loc} biloc之间IOU(即 I o U i j l o c IoU_{ij}^{loc} IoUijloc)的单调递增函数,即两者之间IoU越大,概率应该越大,这与我们的直观认知是一样的;

(2)当 I o U i j l o c IoU_{ij}^{loc} IoUijloc小于某个阈值时,此概率应该接近于0;

(3)对于每个object b i b_{i} bi,应该有且只有一个anchor a j a_{j} aj满足 P { a j − > b i } = 1 P\{a_{j}->b_{i}\}=1 P{aj>bi}=1


P { a j − > b i } = S a t u r a t e d l i n e a r ( I o U i j l o c , t , m a x j ( I o U i j l o c ) ) P\{a_{j}->b_{i}\}=Saturated linear(IoU_{ij}^{loc},t,max_{j}(IoU_{ij}^{loc})) P{aj>bi}=Saturatedlinear(IoUijloc,t,maxj(IoUijloc))

S a t u r a t e d l i n e a r ( x , t 1 , t 2 ) = { 0 x ≤ t 1 x − t 1 t 2 − t 1 t 1 < x < t 2 1 x ≥ t 2 Saturated linear(x,t1,t2)=\begin{cases} 0 & x\leq t1 \\ \frac{x-t1}{t2-t1} & t1<x<t2 \\ 1 & x \geq t2 \end{cases} Saturatedlinear(x,t1,t2)=0t2t1xt11xt1t1<x<t2xt2

损失函数

回忆开头讲的自定义检测似然函数的目标 是:该似然函数能够与召回率、精度和NMS算法兼容。

则检测似然函数为:
P ( θ ) = P ( θ ) r e c a l l × P ( θ ) p r e c i s i o n = ∏ i max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) × ∏ j ( 1 − P { a j ∈ A − } ( 1 − P ( θ ) j b g ) ) P(\theta)=P(\theta)_{recall}\times P(\theta)_{precision} =\prod_{i}\max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) \times \prod_{j}(1-P\{a_{j} \in A_{-}\}(1-P(\theta)_{j}^{bg})) P(θ)=P(θ)recall×P(θ)precision=iajAimax(P(θ)ijclsP(θ)ijloc)×j(1P{ajA}(1P(θ)jbg))
转换为损失函数为:
L ( θ ) = − l o g ( P ( θ ) ) = − ∑ i l o g ( max ⁡ a j ∈ A i ( P ( θ ) i j c l s P ( θ ) i j l o c ) ) − ∑ j l o g ( 1 − P { a j ∈ A − } ( 1 − P ( θ ) j b g ) ) ( 公 式 4 ) L(\theta)=-log(P(\theta))=-\sum_{i}log(\max \limits_{a_{j}\in A_{i}}(P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc}) )-\sum_{j}log(1-P\{a_{j} \in A_{-}\}(1-P(\theta)_{j}^{bg})) (公式4) L(θ)=log(P(θ))=ilog(ajAimax(P(θ)ijclsP(θ)ijloc))jlog(1P{ajA}(1P(θ)jbg))(4)
式中max函数是用来为每个object 选择最匹配的anchor,初始训练阶段,所有anchors的置信度都比较低,而且因为网络的参数是随机初始化的,具有最高置信度的anchor不一定是最匹配的anchor,为了解决这个问题,将max函数换为Mean-max函数:
M e a n − m a x ( X ) = ∑ x j ∈ X x j 1 − x j ∑ x j ∈ X 1 1 − x j Mean-max(X)=\frac{\sum_{x_j\in X}\frac{x_j}{1-x_j}}{\sum_{x_j\in X}\frac{1}{1-x_j}} Meanmax(X)=xjX1xj1xjX1xjxj
其示意图如下:

[外链图片转存失败(img-EipZBiAn-1568808708223)(/home/zy/.config/Typora/typora-user-images/1568792263319.png)]

可以看出,当初始anchors置信度比较低的时候, Mean-max函数接近取平均值,即所有候选anchor都参与训练;随着不断训练,一些候选anchors的置信度增加,Mean-max函数越接近max函数,训练充足时,就可以从候选anchors中选出一个最好的anchor来匹配object 。

除此之外,还做了两项修改:公式4的第二项采用focalloss,第一项和第二项分别乘以权重因子 w 1 , w 2 w_1,w_2 w1,w2,最终的loss函数为:
L ( θ ) = − w 1 ∑ i l o g ( M e a n _ m a x ( X i ) ) + w 2 ∑ j F L _ ( P { a j ∈ A − } ( 1 − P ( θ ) j b g ) ) ( 公 式 5 ) L(\theta)=-w_1\sum_{i}log(Mean\_max(X_i))+w_2 \sum_{j}FL\_(P\{a_{j} \in A_{-}\}(1-P(\theta)_{j}^{bg})) (公式5) L(θ)=w1ilog(Mean_max(Xi))+w2jFL_(P{ajA}(1P(θ)jbg))(5)
其中 X i = { P ( θ ) i j c l s P ( θ ) i j l o c ) ∣ a j ∈ A i } X_i=\{P(\theta)_{ij}^{cls}P(\theta)_{ij}^{loc})|a_j \in A_i\} Xi={P(θ)ijclsP(θ)ijloc)ajAi} F L _ ( p ) = − p γ l o g ( 1 − p ) FL\_(p)=-p^{\gamma}log(1-p) FL_(p)=pγlog(1p) w 1 = α ∣ ∣ B ∣ ∣ w_1=\frac{\alpha}{||B||} w1=Bα w 2 = 1 − α n ∣ ∣ B ∣ ∣ w_2=\frac{1-\alpha}{n||B||} w2=nB1α ∣ ∣ B ∣ ∣ ||B|| B为object 数目, n n n为候选anchor数目。

实验

  1. 数据:CoCo

  2. 网络:RetinaNet

  3. 效果:

    [外链图片转存失败(img-YFFjflnI-1568808708223)(/home/zy/.config/Typora/typora-user-images/1568793807824.png)]

细长object :FreeAnchor效果更好,这是因为FreeAnchor至少会从候选anchors中选出一个来正确的预测类别和位置,所选的anchor不一定是空间最匹配的,但是其特征肯定是最具有代表性的。

[外链图片转存失败(img-zcF2Ut1F-1568808708224)(/home/zy/.config/Typora/typora-user-images/1568794110063.png)]

拥挤object :在一张中含有object 比较多时,本文算法效果明显好于手动筛选anchor的方法。

[外链图片转存失败(img-QkhBjoFd-1568808708224)(/home/zy/.config/Typora/typora-user-images/1568794346553.png)]

本文算法与NMS兼容性更好: N R = 采 用 N M S 后 的 召 回 率 未 用 N M S 的 召 回 率 NR=\frac{采用NMS后的召回率}{未用NMS的召回率} NR=NMSNMS

[外链图片转存失败(img-VVF0a64C-1568808708224)(/home/zy/.config/Typora/typora-user-images/1568794505513.png)]

本文learning-to-matching机制提高AP。

[外链图片转存失败(img-Bm06zOnp-1568808708224)(/home/zy/.config/Typora/typora-user-images/1568794772370.png)]

与其他算法对比。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤劳的凌菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值