损失函数
- coordinate loss
- class predictions loss
使用多标签分类损失。(使用 binary cross-entropy loss) - objectness loss
默认框和真实目标的匹配策略
- 与真实目标重叠度最大的默认框为正样本。
- 与真实目标重叠度大于阈值的默认框为正样本。(Faster RCNN中阈值为0.7,YOLO-V3阈值为0.5)。
- 每一个真实目标只会指定与一个默认框匹配,其余的框只会有objectness loss(即是否存在物体的损失)
多尺度预测
- 在三种不同的尺度上进行预测。
评价指标
- 使用MAP0.5时,yolov3和其他方法差异不大。按照COCO那样的标准,明显的差异就出来了。作者认为从肉眼观察角度上讲,0.5和0.3的重叠差异不大,反对COCO那种评价标准。
尝试了其他策略,发现没效果
- 采取普通的锚框预测机制,预测锚框相对于真实框中心位置的偏移量(以真实框的w和h,预测值为w和h值的倍数),采取线性激活的方式。
w = prediction[..., 2]
,预测的pred_w和pred_h,w和h的倍数,不过是取了对数后的。pred_boxes[..., 2] = torch.exp(w.data) * anchor_w pred_boxes[..., 3] = torch.exp(h.data) * anchor_h
- 采取线性激活的方式来预测x,y的偏移量,而不是逻辑回归激活函数。
- Focal loss没效果,yolov3将目标存在得分预测和类别预测分开了。(正负样本失衡会得到减轻)。
- 同Faster RCNN一样,采取两个阈值。
作者对COCO数据的认识
- MAP指标不恰当。PASCAL VOC数据将阈值设为0.5,这也是为了适应实际标注过程中存在不确定性这一情况。
2.COCO数据更精确,还有语义分割的标签。COCO的评价指标更强调框的准确性,降低了对分类准确性的重视。但作者认为错误的分类比预测框存在很小的偏移更严重。 - MAP指标已经被玩坏了,因为其唯一在意的是每一类的结果框排序。(如果某个物体有一个预测正确的框,即使这个物体还没预测为其他类别,而且重合度很高,最终在MAP指标上也不会造成影响)
上图中,上下两个检测器预测结果视觉上看起来差别很大,很明显上一个预测结果更好,但是在MAP指标上,两个检测器的效果是差不多的。
作者认为现有的MAP检测指标与人们关心的内容差异很大,新的指标应该关注这些差异。
检测任务人们关心的核心
重点:给定一张图片和检测器,检测器在一张图片中,找到物体并正确分类的能力如何?
建议:需要摆脱每一类的AP(per-class AP),做一个global average precision(摆脱类别的依赖),或者对每张图片做一个AP,然后在整个数据集上做平均!