YOLO损失函数解析——你真的读懂YOLO了嘛?
在YOLO的学习过程中,一直有问题困扰着我。那就是作者在文章中说,如果物体中心落在grid cell中则该grid cell负责检测该物体。而之后文章中又说每个grid cell都要进行预测,同时网络输出的是7x7x30的tensor。那就意味着每个grid cell都参与了预测,这个过程具体是怎么实现的呢?实际上这个问题只要仔细阅读论文,真正理解文章中的损失函数是什么意思就可以明白。
YOLO损失函数
仔细阅读论文,发现并不是网络的所有输出都要计算loss,具体地说:
- 有物体中心落入的cell,需要计算分类损失,两个predictor都要计算置信度损失,预测的bounding box与groud truth IOU较大的那个predictor需要计算xywh损失。
- 最关键的部分,没有物体中心落入的cell,只需要计算置信度(confidence)损失。
刚开始我这么去理解的时候觉得云里雾里。置信度大,则说明物体中心存在在该cell中,则xywh和分类损失才有意义。
自动寻找物体中心cell
对于物体中心没有落入的cell,通过控制confidence小,训练后让模型学会寻找物体中心,
因为我是学算法的,模型需要什么值便预测什么值,但是其实会遇到问题的是,计算机往往连要预测什么都不确定。刚开始便觉得7x7x30的tensor是全部是有意义的,而实际上这个过程我把它理解成首先训练是否是物体中心,是物体中心的置信度高的话就进行分类及Bounding Boxyuce 。而在测试时可以认为模型已经学会了寻找物体中心。
有什么问题欢迎评论,可能有不对的地方欢迎讨论。