前言 目标检测任务有很多损失函数,这里做个记录。方便以后查阅。
更多损失函数见这篇文章 【CV知识点扫盲】|损失函数篇
各种loss的实现可以查看 iscyy/yoloair/utils/loss.py
函数
IOU Loss I O U = a r e a ( p r e d ) ∩ a r e a ( g t ) a r e a ( p r e d ) ∪ a r e a ( g t ) IOU = \frac{area(pred) \cap area(gt)}{area(pred) \cup area(gt)} IOU=area(pred)∪area(gt)area(pred)∩area(gt)?
缺点: 不相交时IOU loss为0.
I O U L o s s = ? l n p r e d∩g t p r e d∪g t IOU Loss = -ln\frac{pred ~\cap~ gt}{pred ~\cup~ gt} IOULoss=?lnpred ∪ gtpred ∩ gt?
【目标检测|目标检测损失函数】
GIOU Loss G I O U = I O U ? A r e a ? p r e d∪g t A r e a GIOU= IOU - \frac{Area - pred ~\cup~ gt}{Area} GIOU=IOU?AreaArea?pred ∪ gt?
? 1 ≤ -1 \leq ?1≤ GIOU Loss≤ \leq ≤ 1
其中 Area 是能够覆盖住 pred 和 gt 框的最小矩形的面积。
G I O U L o s s = 1 ? G I O U GIOU Loss = 1-GIOU GIOULoss=1?GIOU
DIOU Loss G I O U = I O U ? d i s t a n c e ( p r e d c e n t e r , g t c e n t e r ) 2 c 2 GIOU= IOU - \frac{distance(pred_{center}, gt_{center})^2}{c^2} GIOU=IOU?c2distance(predcenter?,gtcenter?)2?
? 1 ≤ -1 \leq ?1≤ DIOU≤ \leq ≤ 1
其中 c 是能够覆盖住 pred 和 gt 框的最小矩形的对角线。
G I O U L o s s = 1 ? G I O U GIOU Loss = 1-GIOU GIOULoss=1?GIOU
CIOU Loss 三项分别考虑重叠面积,中心点距离,宽高比
C I O U = I O U ? ( d i s t a n c e ( p r e d c e n t e r , g t c e n t e r ) 2 c 2 + α v ) CIOU = IOU - (\frac{distance(pred_{center}, gt_{center})^2}{c^2}+\alpha v) CIOU=IOU?(c2distance(predcenter?,gtcenter?)2?+αv)
v = 4 π 2 ( a r c t a n ( w g t h g t ) ? a r c t a n ( w h ) ) v = \frac{4}{\pi^2}(arctan(\frac{w^{gt}}{h^{gt}})-arctan(\frac{w}{h})) v=π24?(arctan(hgtwgt?)?arctan(hw?))
α = v 1 ? I O U + v \alpha=\frac{v}{1-IOU+v} α=1?IOU+vv?
C I O U L o s s = 1 ? C I O U CIOU Loss = 1-CIOU CIOULoss=1?CIOU
Focal Loss F L ( p t ) = ? ( 1 ? p t ) γ l o g ( p t ) FL(p_t) = -(1-p_t)^\gamma log(p_t) FL(pt?)=?(1?pt?)γlog(pt?)
p t = { p i fy = 1 1 ? p o t h e r w i s e p_t = \left\{ \begin{array}{ll} p & if ~y = 1 \\ 1-p & otherwise \end{array}\right. pt?={p1?p?if y=1otherwise?
( 1 ? p t ) γ (1-p_t)^\gamma (1?pt?)γ可以降低易分样本的损失贡献。
3.1 YOLO系列理论合集(YOLOv1~v3)_yolov3 spp _Focal Loss讲解 33:10时刻
有时候实际代码实现中会乘多一个 α t \alpha_t αt?来平衡一下loss的权重( ( 1 ? p t ) γ (1-p_t)^\gamma (1?pt?)γ)。作为一个超参数。
F L ( p t ) = ? α t ( 1 ? p t ) γ l o g ( p t ) FL(p_t) = -\alpha_t(1-p_t)^\gamma log(p_t) FL(pt?)=?αt?(1?pt?)γlog(pt?)
注意,数据集标注要比较准确,不然这些噪声会干扰focal loss下的训练。
并且使用时需要调好参。
推荐阅读
- 文献阅读|Transformer系列目标检测模型小抄(1)
- python|利用Python制作证件照
- Python|Python 证件照换背景色(蓝底->白底,蓝底->红底)!
- Digital|图像梯度(Image gradient)
- 计算机视觉|图像形态学操作
- python|他来了!性能吊打 Node.js 和 Deno 的新一代 javaScript 运行时!
- 目标检测|YOLOv5-6.1添加注意力机制(SE、CBAM、ECA、CA)
- 爬虫案例合集|36氪详情页AES
- magical_spider|magical_spider远程采集方案