本专栏会手把手带你从源码了解YOLOv10(后续会陆续介绍YOLOv8、RTDETR等模型),尽可能地完整介绍整个算法,这个专栏会持续创作与更新,大家如果想要本文PDF和思维导图,后台私信我即可(创作不易,不喜勿喷),大家如果发现任何错误和需要修改的地方都可以私信我,我会统一修改。
上一章在ultralytics/utils/loss.py中对GT进行处理,得到的target_bboxes维度为[16, 8400, 4]:每个图像中的锚点对应GT的GT边框;target_scores维度为[16, 8400, 80]:每个图像中的锚点对应GT的GT类别得分(归一化指标得分);fg_mask维度为[16, 8400]:每个图像匹配锚点的情况
接着就是计算分类损失,在ultralytics/utils/loss.py的第234行,分类损失用的是nn.BCEWithLogitsLoss
接着再计算目标边框损失(ultralytics/utils/loss.py的第239行),包括CIoU Loss和dfl Loss
调用ultralytics/utils/loss.py中的BboxLoss类的forward方法计算CIoU loss和dfl loss
第73行计算预测框对应GT类别的预测置信分;
第75行计算预测框与GT的CIoU
第80行计算GT的dfl分布
第82行计算dfl Loss
在ultralytics/utils/metrics.py的bbox_iou函数计算CIoU
在ultralytics/utils/loss.py的_df_loss函数中计算dfl Loss
最后返回的第一个值为总损失,第二个包含box、cls以及dfl loss
之后再one2many算好Loss之后,继续计算one2one的Loss
等Loss计算完成之后,继续在ultralytics/engine/trainer.py中执行Backward、打印指标、优化器参数更新、画图等
最后在ultralytics/engine/trainer.py中继续训练epoch剩下的batch
这部分关于的整体流程如下图所示,需要原图和思维导图的朋友关注我私信获取