首先是通过K-means聚类得到anchor box的数目,这里聚类采用1—IOU(box,centriod)作为距离度量,然后在模型复杂度和召回率之间作了一个权衡,确定了K=5(标准是通过手肘法)。
YOLO -v2 损失函数:(yolo-v2开始其编码格式与V1不同。yoloV1 仅有两个box,但是编码(预测)基于单元格,分类向量只有一个,因此一个单元格只能预测一个目标。而yoloV2每个单元格有5个anchor box,且单元格编码方式改变了,编码基于单元格的anchor box,通过anchor box 预测目标类别,实现了一个单元格同时预测多个目标)
特点:所有的预测都是基于单元格的anchor box进行的,若置信得分(所有的概率预测文中都通过sigmoid函数映射得到,可将其限制在0-1之间)大于置信域值则认为有物体,进而计算IOU分配与groudtruth具有最大IOU的anchor预测目标。实际预测到的置信度是“有目标的概率×预测准确度(即IOU)”。另外,在回归位置的时候,为了使模型更快的稳定以适应初始化产生bbox偏移,通过预测一个相对于本cell左上角顶点的偏移量(tx,ty),以及相对于负责预测的anchor-box宽高的缩放因子(tw,th)。
负责预测目标的anchor:
- 第一项:负责预测目标的anchor的坐标损失(包括中心定位和边界定位)。仅计算负责预测目标的那个anchor的坐标损失。(此项在yolo v1中边界定位是采用根号下的差值的平方)——衡量目标定位准确度
- 第三项:负责预测目标的anchor的confidence损失。负责预测物体的anchor需要计算confidence损失,confidence的目标就是让预测置信得分去逼近的预测bbox和Ground Truth的iou。——衡量可能有目标的准确度
- 第五项:负责预测目标的anchor的类别损失。每个类别的输出概率0-1之间,计算的是L2损失。也就是说分类问题也把它当做了回归问题。且yolo-V2中类别预测没有预测背景,因为置信得分值低于阈值就代表不存在目标。(此项与yolo-V1一致,只是因为不同anchor可同时预测不同目标了)——衡量目标分类的准确度
不负责预测目标的anchor:
- 第二项:不负责预测目标的anchor的坐标损失。加了限制,希望直接回归到自身anchor box。
- 第四项:不负责预测目标的anchor的confidece损失。(只计算那些与Groud Truth的IOU小于IOU阈值的anchor box)。首先,如果你与Groud Truth的IOU大于IOU阈值,且不负责预测目标,这种情况是很正常的,不予惩罚。但是,如果你的anchor box小于阈值说明本身就无意预测,那么我们干脆加上限制让你就回归到完全不预测的情况,即回归到与Ground Truth的IOU=0(此项在yolo-v1中没有)