YOLO V1-V3 目标检测:loss functions 总结
YOLO-V1
YOLO v1 框架输入为(448x448x3)rgb图片,输出为(7x7x30(voc数据集))的预测,loss函数由5部分组成,其中S上标2,表示格点的个数,7X7格点一共有49个,B表示每个格点中box的个数,如下图:
在计算loss之前我们需要将 voc的box标签 转换为 yolo的box标签 如下图:
yolo的box标签,是对象中心相对于负责预测这个对象的格点的坐标的偏移量,如下图所示:
yolo最终输出的feature是30维的,其中包括20维的分类和两个 box 位置信息,以及置信度C,
在yolov1中每个格点中设置了两个box,其置信度C帽 = Pr(Object) ∗ IOU(b,b帽),被设置为Pr(Object) 表示box中包含对象的可能想大小,以及box和groundtruth box的IOU。在计算loss之前,会用两个box和groundtruth box 分别做IOU,选出最大的来构建loss。如上图两个包含目标中格点,的两个box分别为蓝色和绿色,最终绿色的IOU更大,所以拿来构建loss,而对应的groundtruth 置信度为最大IOU的值。
YOLO V1 loss 构建
构建最终的loss函数了,λcoord = 5 and λnoobj = 0.5。
classification loss
Localization loss
Confidence loss
在计算Localization loss和Confidence loss,只使用格点中与groundtruth box iou 最大的box,也就是一个格点中只用一个box计算loss。所以可以将这两部分loss中的 B 累加符号去掉
no-object
因为大多数的box都没有包含任何目标。大部分时候模型都是在检测背景而不是对象,所以将
λnoobj 设为很小的值 (default: 0.5).
YOLO-V2
在YOLO-V2中作者加入了预选框 和 单独格点的多目标预测,
这里注意一下,V1的每个格点只检测一个对象,V2的格点则可以检测多个对象,此图以检测两个对象为例,每个格点中每一个box都会预测对象class分类P。
YOLO-V3
YOLO-V3运用了FPNs的思想,从多个不同分辨率的特征层中预测预测最终结果。
其loss形式与 V2 相似。
引用
https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088
https://medium.com/oracledevs/final-layers-and-loss-functions-of-single-stage-detectors-part-1-4abbfa9aa71c