目标檢測中目标框回歸損失函數(IoU, GIoU, DIoU, CIoU)總結
1. Smooth L1 Loss
這個是 Faster-RCNN 中的損失函數。具體可以參考深度學習目标檢測之 R-CNN 系列:Faster R-CNN 網絡詳解 中相應介紹。
Smooth L1 Loss 相比 L1 和 L2 的優勢可以參考 損失函數:L1 loss, L2 loss, smooth L1 loss。總結其優勢就是:
- smooth L1和L1-loss函數的差別在于,L1-loss在0點處導數不唯一,可能影響收斂。smooth L1的解決辦法是在0點附近使用平方函數使得它更加平滑
- 相比于L2損失函數,其對離群點、異常值(outlier)不敏感,梯度變化相對更小,訓練時不容易跑飛
2. IoU Loss
IoU(Intersection over Union) 是曠視在 2016 年于 UnitBox: An Advanced Object Detection Network 中提出的,随後被廣泛使用。正如其名交并比,就是兩個 BBox 的交集比上并集。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwEzXlpXazxSPrdVWqx2VaNjVzEWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwUjNmdDM0YmMjFDM0EjN5MGNkRDN2Y2NkRGM3YTNxMzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
IoU Loss 的數學表達式為 L o s s I o U = − l n ( I o U ) Loss_{IoU} = -ln(IoU) LossIoU=−ln(IoU),實際使用中很多直接簡化為 L o s s I o U = 1 − I o U Loss_{IoU} = 1 - IoU LossIoU=1−IoU。
IoU 相比 Smooth L1 Loss 具有如下優勢:
- 具有尺度不變性
- IoU Loss,其将 4 個點構成的 box 看成一個整體進行回歸
直接看下圖更直覺。
IoU 的不足:
1)當預測框和目标框不相交時,IoU(A,B)=0時,不能反映A,B距離的遠近,此時損失函數不可導,IoU Loss 無法優化兩個框不相交的情況。
2)假設預測框和目标框的大小都确定,隻要兩個框的相交值是确定的,其IoU值是相同時,IoU值不能反映兩個框是如何相交的。
3. GIoU Loss
GIoU(Generalized Intersection over Union) 是Hamid Rezatofighi 等2019年于 Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression 中提出的一種改進的 IoU Loss。
如下圖所示,三種不同相對位置的框擁有相同的IoU=0.33值,但是擁有不同的GIoU=0.33,0.24,-0.1。當框的對齊方向更好一些時GIoU的值會更高一些。
計算過程如下:
GIoU Loss 的表達式為:
L o s s G I o U = 1 − G I o U Loss_{GIoU} = 1 - GIoU LossGIoU=1−GIoU
GIoU 的不足:
如下圖,BBox 重合的時候 GIoU 退化為 IoU。
4. DIoU Loss
DIoU(Distance-IoU) 是 Zhaohui Zheng 等 2019 年在 Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression 中提出的。
基于IoU和GIoU存在的問題,作者提出了兩個問題:
- 第一:直接最小化預測框與目标框之間的歸一化距離是否可行,以達到更快的收斂速度。
- 第二:如何使回歸在與目标框有重疊甚至包含時更準确、更快。
好的目标框回歸損失應該考慮三個重要的幾何因素:重疊面積,中心點距離,長寬比。基于問題一,作者提出了DIoU Loss,相對于GIoU Loss收斂速度更快,該Loss考慮了重疊面積和中心點距離,但沒有考慮到長寬比;針對問題二,作者提出了CIoU Loss,其收斂的精度更高,以上三個因素都考慮到了。
通常基于IoU-based的loss可以定義為 L = 1 − I o U + R ( B , B g t ) L = 1 - IoU + R(B, B^{gt}) L=1−IoU+R(B,Bgt),其中 R ( B , B g t ) R(B, B^{gt}) R(B,Bgt) 定義為預測框 B B B和目标框 B g t B^{gt} Bgt 的懲罰項。
DIoU中的懲罰項表示為 R D I o U = ρ 2 ( b , b g t ) c 2 R_{DIoU} = \frac{\rho^{2}(b, b^{gt})}{c^2} RDIoU=c2ρ2(b,bgt) ,其中 b b b 和 b g t b^{gt} bgt 分别表示 B B B 和 B g t B^{gt} Bgt 的中心點, ρ \rho ρ 表示歐式距離, c c c 表示 B B B 和 B g t B^{gt} Bgt 的最小外界矩形的對角線距離,如下圖所示。可以将 DIoU 替換 IoU 用于 NMS 算法當中,也即論文提出的 DIoU-NMS,實驗結果表明有一定的提升。
DIoU Loss function 定義為: L D I o U = 1 − I o U + ρ 2 ( b , b g t ) c 2 L_{DIoU} = 1 - IoU + \frac{\rho^{2}(b, b^{gt})}{c^2} LDIoU=1−IoU+c2ρ2(b,bgt)
DIoU的性質:
- 尺度不變性
- 當兩個框完全重合時, L I o U = L G I o U = L D I o U = 0 L_{IoU} = L_{GIoU} = L_{DIoU} = 0 LIoU=LGIoU=LDIoU=0 ,當2個框不相交時 L G I o U = L D I o U → 2 L_{GIoU} = L_{DIoU} \rightarrow 2 LGIoU=LDIoU→2
- DIoU Loss 可以直接優化 2 個框直接的距離,比 GIoU Loss 收斂速度更快
- 對于目标框包裹預測框的這種情況,DIoU Loss 可以收斂的很快,而 GIoU Loss 此時退化為 IoU Loss 收斂速度較慢
5. CIoU Loss
DIoU 那撥人在 2020 年又整出了個 CIOU( Complete-IoU)。論文見Enhancing Geometric Factors in Model Learningand Inference for Object Detection and InstanceSegmentation。套路和 DIoU 差不多。
CIoU Loss 的表達式如下:
L D I o U = 1 − I o U + ρ 2 ( b , b g t ) c 2 + α υ L_{DIoU} = 1 - IoU + \frac{\rho^{2}(b, b^{gt})}{c^2} + \alpha\upsilon LDIoU=1−IoU+c2ρ2(b,bgt)+αυ
CIoU 的懲罰項是在 DIoU 的懲罰項基礎上加了一個影響因子 α υ \alpha\upsilon αυ ,這個因子把預測框長寬比拟合目标框的長寬比考慮進去。其中 α \alpha α 是用于做 trade-off 的參數, α = υ ( 1 − I o U ) + υ \alpha = \frac{\upsilon}{(1 - IoU) + \upsilon} α=(1−IoU)+υυ, υ \upsilon υ 是用來衡量長寬比一緻性的參數,定義為 υ = 4 π 2 ( a t c t a n w g t h g t − a r c t a n w h ) \upsilon = \frac{4}{\pi^{2}}(atctan{\frac{w^{gt}}{h^{gt}}} - arctan{\frac{w}{h}}) υ=π24(atctanhgtwgt−arctanhw)。
參考
- 目标檢測回歸損失函數簡介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss