YOLOv5全面解析教程③:更快更好的邊界框迴歸損失

語言: CN / TW / HK

 

作者|Fengwen、BBuf

 

邊界框迴歸是目標檢測的關鍵步驟,在現有方法中,雖然被廣泛用於邊界框迴歸,但它不是針對評估指標量身定製的,即 Intersection over Union (IoU)。

 

最近,已經提出了 IoU 損失和 generalized IoU (GIoU) Loss 作為評估 IoU 的指標 ,但仍然存在收斂速度慢和迴歸不準確的問題。在本文中,我們通過結合預測框和目標框之間的歸一化距離來提出距離 -IoU (DIoU) Loss,它在訓練中的收斂速度比 IoU 和 GIoU Loss 快得多。

 

此外,本文總結了邊界框迴歸中的三個幾何因素,即重疊面積(overlap area)、中心點距離(central point distance)和高寬比(aspect ratio),在此基礎上提出了完全IoU( CIoU) 損失,從而促進了更快的收斂和更優的性能。

 

通過將 D IoU 和 CIoU  結合到最先進的目標檢測算法中,例如 YOLO v3、SSD 和 Faster RCNN,我們不僅在 IoU 指標方面而且在 GIoU 指標方面都獲得了顯着的性能提升。此外,DIoU 可以很容易地用於非最大抑制(NMS)作為標準,進一步促進性能提 升。(註釋:這裏IoU指標方面和GIoU指標方面指的是在目標檢測精度測量(mAP值 ),IoU損失計算穩定性等一些方面。)

 

目標檢測是計算機視覺任務中的關鍵問題之一,幾十年來一直受到了廣泛的研究關注(Redmon et al. 2016; Redmon and Farhadi 2018; Ren et al. 2015; He et al. 2017; Yang et al. 2018; Wang et al. 2019; 2018). 通常,現有的目標檢測方法可以分為:

 

  • 單階段-檢測,如YOLO系列 (Redmon et al. 2016; Red- mon and Farhadi 2017; 2018) 和SSD (Liu et al. 2016; Fu et al. 2017),

  • 兩階段檢測,如 R-CNN系列檢測 (Girshick et al. 2014; Girshick 2015; Ren et al. 2015; He et al. 2017),

    甚至是多階段的檢測, 像Cascade R-CNN (Cai and Vasconcelos 2018). 儘管存在這些不 同的檢測框架,但邊界框迴歸預測一個矩形框來定位目標對象仍然是其中關鍵步驟。

     

代碼倉庫地址:

http://github.com/Oneflow-Inc/one-yolov5
 

1 

前言

 

本文主要是結合論文Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression(http://arxiv.org/pdf/1911.08287.pdf) 對 IoU 的解析學習。

 

IoU

 

IoU介紹

 

Intersection over Union (IoU)

 

在指標評估概述的小節有介紹過IoU,已經對IoU有了初步認識(其實在yolov5項目中並不是簡單的使用,而是用的後面介紹的CIoU )

 

計算公式:

 

  • 是真實迴歸框(gt:ground-truth),

  • 是預測迴歸框。

     

IoU loss

 

計算公式:

 

 

IoU Loss 優缺點分析

 

有明顯的缺陷 IoU loss只在邊界框有重疊時才能工作, 對於不重疊的情況不會提供任何移動梯度 (移動代表預測框朝着目標框重疊的方向移動) 。移動梯度表示無法衡量完全不相交的兩個框所產生的的損失(iou固定為0),和兩個不同形狀的預測框可能產生相同的loss(相同的iou)分別如下圖的左邊和右邊所示。

 

 

GIoU

 

GIoU介紹

 

GIoU的設計初衷就是想解決IoU Loss存在的問題(預測框與真實框不相交時iou恆定為0),設計了一套Generalized Intersection over Union Loss。在IoU的基礎上,GIoU還需要找到預測框和真實框的最小外接矩形,然後求出最小外接矩形減去兩個預測框union的面積,具體算法流程如下:

 

 

GIoU loss

 

計算公式 :

 

中C是覆蓋 的最小方框 ,由於 引入了C,在不 重疊的情況下,預測框也會向目標框移動。

 

GIoU 優缺點分析

 

GIoU Loss解決了IoU Loss在不相交情況的問題,在所有性能指標中都可以作為IoU的適當替代品,在目標檢測任務中能夠得到更高的準確率。

 

缺點:雖然GIoU可以緩解重疊情況下的梯度消失問題,但它仍有一些侷限性。即無法衡量有包含關係時的框迴歸損失,如下圖,三個迴歸框具有相同的GIoU Loss,但是顯然第三個框的迴歸效果更好。

 

 

IoU & GIoU 分析

 

首先,在本文上部分我們分析了關於原始的IoU損失和GIoU 損失的侷限性。下面將通過模擬實驗結果對邊界框迴歸的過程進行進一步解析。


(補充説明: 為什麼要進行模型實驗?因為僅僅從檢測結果來分析邊界框迴歸的過程很難,因為在不受控制的基準中的迴歸情況往往不全面比如:不同的距離(distances),不同的尺度(scales)和不同的長寬比(aspect ratios)。相反,進行模擬實驗,在實驗中綜合考慮迴歸情況,然後就可以很容易地分析給定損失函數的問題。)

 

模擬實驗

 

 

在模擬實驗中, 我們試圖通過距離(distances), 尺度 (scales)和長寬比(aspect ratios)來覆蓋邊界框之間的大部分關係,如圖3(a).所示。特別是, 我們選擇7個單位框 (即每個框的面積為 1) ,具有不同的長寬比 (即 1:4、1:3、1:2、1:1、2:1、3:1 和 4:1)  作為目標框。在不失一般性的情況下,7個目標框的中心點被固定在(10,10)。錨框均勻地分散在5000個點上。

 

1. 距離: 在以半徑為 3 的(10,10)為中心的圓形區域內,均勻選擇5000個點, 放置7個尺度、7個長寬比的錨框。在這些情況下,重疊和不重疊的方框都被包括。

2. 尺度 :對於每個點, 錨框的面積分別設置為0.5、0.67、0.75、1、1.33、1.5 和 2。

3. 長寬比 : 對於給定的點和尺度,採用 7 個長寬比,即與目標框遵循相同的設置 (即 1:4、1:3、1:2、1:1、2:1、3:1 4:1)。所有    錨箱都對應在每個目標框。綜上所述,總共有   個迴歸案

 

圖3: 仿真實驗: (a) 通過考慮不同的距離、尺度和長寬比, 採用了171.5萬個迴歸案例。(b)迴歸誤差和(即: ) 迭代 次數為t時不同損 失函數的曲線。

 

然後通過給定損失函數我們可以用梯度下降算法來模擬每種情況下的邊界框迴歸過程對於預測框,當前的預測可以通過:

 

 

其中是迭代時的預測框,表示損失的梯度。感覺可以理解為學習率。值得注意的是,在我們的實現中,梯度乘以去加速收斂。邊界框迴歸的性能評估通過使用對於每個損失函數, 仿真模擬實驗當達到迭代時, 誤差曲線如圖所示。

 

IoU 和 GIoU 損失的限制

 

 

在圖4中,我們可視化迭代T時對5000個分散點的最終迴歸誤差。

 

  • 從圖4(a)中很容易看出,IoU損失只適用於與目標框重疊的情況。由於∇B總是0,沒有重疊的錨框將不會移動。通過添加一個懲罰項見公式(3),

  • GIoU 損失能夠更好地緩解非重疊案例的問題,如圖所示4(b), 但GIoU的損失顯著擴大了盆地,即GIoU的工作面積。但是,在水平方向和垂直方向的情況下,仍然很可能有很大的誤差。這是因為GIoU損失中的懲罰項是用來最小化|C−A∪B|,但是C−A∪B的面積通常很小或為0(當兩個盒子有包含關係時),然後GIoU幾乎退化為IoU損失。只要以適當地學習速率運行足夠的迭代GIoU 損失能收斂到很好的解決方案,但收斂速度卻是非常慢。從幾何上來説,從如圖1所示的迴歸步驟來看,GIoU實際上增大了預測的框大小,用來和目標框重疊,然後IoU項用於預測框與目標框匹配,產生非常緩慢的收斂。

     

綜上所述,在非重疊情況下,IoU損失收斂是糟糕的解決方式,而GIoU損失收斂速度較慢,特別是對於水平和垂直方向的框。在目標檢測流程中,IoU和GIoU的損失都不能保證迴歸的準確性。

 

DIoU & CIoU

 

通過前面的IoU和GIoU的分析我們很自然會問以下問題:

 

  1. 一,是否可以直接最小化預測框和目標框之間的歸一化距離,以實現更快的收斂?

  2. 第二,當與 目標框有重疊甚至包含時,如何使迴歸更準確、更快?

 

DIoU loss

 

Distance-IoU 損失:更快更好的邊界框迴歸損失,一般來説,IoU-based 損失可以定義為:

 

 

其中 是預測框 B 和目標框 的懲罰項。通過設計適當的懲罰項, 在本節中, 我們提出了 DIoU 損失和 CIoU 損失來解答上述兩個問題。

 

為了回答第一個問題,我們提出將兩個邊界框的中心點之間的標準化距離最小化,懲罰項可以定義為:

 

 

其中 分別代表 B 和 的中心點。 為歐氏距離,C 是覆蓋兩個盒框的最小封閉框的對角線長度。 DIoU損失函數可以定義為:

 

 

如圖5所示,DIoU 損失的懲罰項直接使兩個中心點之間的距離最小 化, 而GIoU損 失的目的是減少 的面積。

 

 

DIoU 和 IoU/GIoU 損失比較

 

新提出的DIoU損失繼承IoU和GIoU損失的一些屬性:

 

  1. DIoU損失對迴歸問題的尺度仍然是不變的

  2. 與GIoU損失類似, DIoU損失可以在與目標框不重疊時為邊界框提供移動方向。

  3. 當兩個邊界框完美匹配時,當兩個框都很遠時,  

     

DIoU損失比IoU損失和GIoU損失有幾個優點,可以通過仿真實驗進行評估。

 

  1. 如圖1和圖3所示,DIoU損失 可以直接最小化兩個框的距離, 因此收斂速度比G IoU損失 要快得多。

  2. 對於兩個框是包含關係的情況(圖2),或在水平和垂直方向的情況(圖6)下, DIoU損失 可以迴歸非常快,而GIoU損失幾乎退化為IoU損失,即 

     

 

Complete IoU Loss

 

接着我們回答了第二個問題,提出了邊界框迴歸的良好損失應該要考慮三個重要的幾何因素,即重疊面積、中心點距離和長寬比。通過統一座標IoU損失考慮了重疊區域,而GIoU損失嚴重依賴於IoU損失。我們提出的DIoU損失旨在同時考慮邊界框的重疊面積和中心點距離。然而,邊界框的長寬比的一致性也是一個重要的幾何因素。因此,基於DIoU損失通過添加長寬比的一致性來提出CIoU損失:

 

 

其中 是一個正的權衡參數,  衡量長寬比的一致性。

 

 

則損失函數可以定義為:

 

 

通過重疊面積因子給予更高的優先回歸,特別是對於非重疊情況。最終 DIoU損失的化與CIoU損失 的優化相同, 除了 的梯度應該指定W h

 

 

主導器  通常是一個很小的值對於 的範圍在 [0,1],這很可能會產生梯度爆炸。因此在我們的實現, 主導器 被移除,將步長 替換為 1,梯度方向仍然與公式(12)一致。

 

NMS(Non-Maximum Suppression)

 

2

介紹

 

NMS是大多數目標檢測算法的最後一步,其中刪除了宂餘的檢測框當它與最高分框的重疊超過一個閾值。Soft-NMS (Bodla et al. 2017) 用連續函數w.r.t.懲罰相鄰框的檢測分數IoU,產生比原始NMS產生更柔和大和更強大的抑制。


IoU-Net (Jiang et al. 2018) 提出了一個新的網絡分支來預測定位置信度來指導NMS。最近,自適應NMS(Liu,Huang,和Wang 2019)和 Softer-NMS(He et al. 2019)被提出分別研究適當的閾值策略和加權平均策略。在本工作中,簡單將DIoU作為原始NMS的標準,在抑制宂餘框時,同時考慮邊界框的重疊面積和兩個中心點之間的距離。

 

DioU-NMS

 

 

Non-Maximum Suppression using DIoU

 

在原始的NMS中,IoU指標用於抑制呂餘的檢測框, 其中重疊區域是唯一的因素, 對於有遮擋的情況,往往會產生錯誤的抑制。我們在這項工作中建議 D I oU NMS 的更好標準,因為在抑制標準中不僅應考慮重疊 D I oU- NMS 被正式定義為:

 

 

其中框Bi被去除通過同時到考慮IoU和兩個框中心點的距離。Si是分類得分和 是NMS閾值。我們認為兩個中心點較遠的框可能會定位不同的物體,而不應該被刪除。此外DIoU-NMS 是非常靈活,僅僅是幾行的代碼就可以集成到任何目標檢測管道中。

 

3

小結

 

本文主要介紹用於邊界框回 歸的DIoU損失和CIoU損失,以及 用於抑制宂餘檢測框 的DIoU-NMS。通過 直接最小化兩個中心點的歸一化的距離, DIoU損失 可以比G IoU損 實現更快的收斂。此外 CIoU損失 考慮了三個幾何屬性(即重疊區域、中心點距離和長寬比),促進了更快的收斂和更優的性能。

 

參考文章

 

  • http://github.com/Zzh-tju/DIoU/blob/master/README.md#introduction

  • http://github.com/Zzh-tju/DIoU/blob/master/README.md#introduction

  • IoU: http://arxiv.org/pdf/1608.01471.pdf

  • GIoU: http://giou.stanford.edu/GIoU.pdf

  • DIoU: http://arxiv.org/pdf/1911.08287.pdf

 

其他人都在看

歡迎Star、試用OneFlow最新版本:http://github.com/Oneflow-Inc/oneflow/


 

本文分享自微信公眾號 - OneFlow(OneFlowTechnology)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閲讀的你也加入,一起分享。