YOLOv4 tricks解讀(三)B-Box回歸損失篇


論文題目:YOLOv4: Optimal Speed and Accuracy of Object Detection

文獻地址:https://arxiv.org/pdf/2004.10934.pdf

源碼地址:https://github.com/AlexeyAB/darknet

  YOLOv4中談及了一些B-Box回歸損失的方法,諸如MSE(L2 loss),Smooth L1 loss,IoU loss, GIoU loss,DIoU loss,CIoU loss。本篇主要介紹目標檢測任務中近幾年這些損失函數的具體操作。

MAE(L1 loss),MSE(L2 loss)與Smooth L1 loss

  MAE和MSE在回歸任務中做損失函數早已屢見不鮮,

  • MAE(L1 loss):

其圖像是與y軸對稱的折線:

  • MSE(L2 loss):

其圖像為一條與y軸對稱且過原點的拋物線:

  對於上述兩種損失函數中,L1損失函數的導數為常數,在訓練后期,當損失數值變小后,如果學習率不變,損失函數會在穩定值附近波動,很難收斂到跟高的精度。L2損失函數的導數與損失有關,在訓練初期,當損失較大時,其導數也很大,會造成訓練的不穩定。

  Smooth L1 loss便是針對MSE和MAE的這些不足。Smooth L1 loss 的提出是在Fast RCNN中:

其中,vi表示ground-true 框的坐標,ti表示預測的框的坐標(其中包含x,y,w,h)。

  上述的三種loss方法在計算B-Box損失時,會存在一些問題:

  • 將框的坐標以相對獨立的方式進行損失的計算,這種做法的假設是這四個坐標相對獨立,但實際上是有一定關聯的。
  • 不同的檢測框可能有相同大小的Smooth L1 loss,不能很好的衡量檢測框。

IoU loss

  Smooth L1 loss不能很好的衡量預測框與ground true 之間的關系,相對獨立的處理坐標之間的關系。可能出現Smooth L1 loss相同,但實際IoU不同的情況。

  因此,提出IoU loss,將四個點構成的box看成一個整體進行損失的衡量。通過計算兩個框的交並比,再求-ln(IoU),當然,很多時候可以直接定義IoU loss = 1-IoU。

  算法流程如下:

  YOLOv3中使用的便是IoU loss。

GIoU loss

  文獻地址:https://arxiv.org/pdf/1902.09630.pdf

  源碼地址:https://github.com/generalized-iou/g-darknet

  

  IoU loss 其實並不完美,也會存在一些問題:

  • IoU loss僅能衡量兩個框相交的情況,而不能反應預測框與目標框不相交的情況。即當IoU(a, b) = 0時,是不能反應a, b的遠近。
  • 即使具有相同大小的交並比,IoU loss也不能很好的衡量兩個框是如何相交的。如下圖所示,具有相同的IoU=0.33,相交的情況卻大不相同。

  GIoU loss的提出便是針對上述問題,GIoU中對於上述三幅圖,GIoU分別=0.33, 0.24, -0.1。感覺當框的對齊方向更好一些時,GIoU的值會更高一些。下圖可以對比一下MSE、IOU與GIoU的區別:

  GIoU的算法流程:

  通過上述算法流程可以看出,GIoU≤IoU; 並且,LGIoU = 1-GIoU。

  C表示可以將A,B包含在內的最小的封閉形狀,這樣就可以衡量預測框與真實框不相交的情況。添加了C中非A、B區域部分占C的比例,從而添加不想交和相交情況的約束。

  具體的計算方式:

DIoU loss

  文獻地址:https://arxiv.org/pdf/1911.08287.pdf

  DIoU可以使YOLOv3漲近3個百分點。https://github.com/Zzh-tju/DIoU-darknet

    

  GIoU同樣也不是完美的,DIoU loss的作者發現當預測框被目標框完全包裹的時候,IoU和GIoU是一樣的,並不能區分此時的位置關系,此時GIoU退化為IoU。

  因此,作者提出的DIoU引入了中心點歸一化距離的操作。如下圖所示,綠色框表示目標框,紅色框表示預測框。從下圖可以略微感覺到,DIoU loss的計算會包含中心點的指引。

  在上述完全包裹的情況下,C的計算是一樣的,導致在優化時,對於不同的情況,並不能給予合適的懲罰項,導致放慢了收斂速度。

  作者也給出了在不同代數下,DIoU和GIoU收斂情況的可視化。如下圖所示,第一行為GIoU的各代收斂情況;第二行為DIoU的各代收斂情況。綠色框為真實框,黑色框為anchor box,藍色框為GIoU loss 產生的預測框,紅色框為DIoU loss產生的預測框。可以看出,在DIoU loss 的指引下,僅需要120代,預測框便可以很好的滿足真實框。【損失函數其實就是你想讓它按照怎樣的方式去學習,指引的越好,收斂速度越快】

  DIoU loss 的求取:

  這個損失函數中,b和b(gt)表示anchor框和目標框的中心點,ρ表示兩個中心點的歐式距離如下圖標記d)。c代表的是可以同時覆蓋Anchor框和目標框的最小矩形的對角線距離如下圖標記c)。因此DIoU中對Anchor框和目標框之間的歸一化距離進行了建模。

  使用中心點間距離d和覆蓋矩形對角線距離c的比值衡量彼此之間的關系,即可以對不相交有約束,也可以對包含有約束。這樣的指引,可以提供移動方向,加快收斂速度。

CIoU loss

  DIoU loss 文章中還提出了一種CIoU loss(Complete IoU loss),作者歸納了一個好的目標框回歸損失應該考慮三個重要的幾何因素:重疊面積、中心點距離和長寬比

  • GIoU loss 解決了IoU為0時,無法優化的問題;
  • DIoU loss 在GIoU Loss的基礎上考慮了邊界框的重疊面積和中心點距離。

  所以,還沒有考慮長寬比一致性的約束,即CIoU loss 在DIoU loss的基礎上添加了長寬比的約束αv

其中,α作為一個trade-off參數:

  參數v用於衡量長寬比一致性:

  下圖展示了DIoU和CIoU在YOLOv3性能上的提升。

  

  YOLOv4中使用的便是DIoU loss!

  AlexyAB大神在源碼的維護中添加了CIoU loss,使用CIoU loss可以進一步提升模型的精度!

  yolov3/-tiny同樣可以修改原先的IoU loss為CIoU loss,也可以為yolov3/-tiny提升精度!

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM