目标检测总结:focal loss 和 RetinaNet
之前总结过,目前常见的目标检测算法分one-stage和two-stage两种,one-stage以Yolo系列和SSD系列为代表,two-stage以Faster-RCNN系列为代表。两种类型的目标检测算法可谓各有所长,one-stage算法计算速度快,但其精度弱于two-stage算法,而two-stage算法计算速度虽然慢,但其精度较高,在精度方面一直是sota。
分析one-stage算法精度不高的原因,作者认为主要是类别的不平衡引起的。在anchor-based的目标检测算法中,绝大部分的anchor都是背景,只有少数的anchor存在object,所以在训练过程中,分类器可以无脑的把所有的anchor分类为background,这样导致了one-stage算法的精度不高。
而two-stage算法可以有效的避免这个问题,原因在于其第一个stage会对anchor进行简单的二分类,经过初步的筛选,属于background的bbox被大幅砍削,虽然数量依然多余存在object的bbox,但是数量的悬殊程度没有那么夸张,在第二个stage时,分类器再一次进行细分,使得two-stage算法精度上由于one-stage的算法。但是经过了两个stage的操作,使得two-stage的算法速度降了下来。
类别不平衡是one-stage算法精度不如two-stage算法的原因所在。
focal loss
由于原有的交叉熵损失函数无法解决类别不平衡这一问题。作者提出了一个新的损失函数focal loss。交叉熵(CE)和focal loss的对比如下: