【Deep Learning】YOLOv3: An Incremental Improvement 原理
yolo_v3 发布了,由于今年找工作,最近才又好好的看了一遍,这里记录一下这篇论文的大概原理。
1. 综述
as accurate as SSD but three times faster.
因此总的来说,这是现阶段一种非常好的目标检测方案,尤其是在应用到实际项目中的时候,往往对网络的实时性具有比较高的要求,因此大多数时候会考虑这种实时性效果比较好的方案。
2. 改进方案
2.1 Bounding Box Prediction
在 bounding box 的坐标预测方式上 yolo_v3 还是延续了 yolo_v2 的方法,也就是依然使用下面这个公式进行计算:
上面的公式中, 也就是模型的预测输出,其中 表示 grid cell 的坐标,比如某层的feature map大小是13*13,那么grid cell就有13*13个,第 0 行第 1 列的 grid cell 的坐标 就是 0, 就是 1。 表示的是预测前bounding box 的 size, 就是预测得到的 bounding box 的中心坐标和 size,对于上述的坐标回归使用的损失函数是平方误差损失。(如果一些坐标真实值是 ,而网络的预测值是 ,则梯度为 )。
2.2 Class Prediction
在进行类别预测方面,主要的改变是将原来的单标签分类改为多标签分类,再具体实现上,将原来网络中的 softmax 替换为多个相互独立的 逻辑回归。这种做法在其余网络中也已经使用过(没记错 FPN ,Mask R-CNN 中也使用了类似的方案)。这样做的好处是,在使用 softmax 时候,我们默认了每个目标仅属于一个类别标签,但是在实际应用中,对于一些比较复杂的场景,一个目标可能同时属于多个类别,比如 dog 可以同时属于 dog 类 和 anmial 类。在实现上,使用多个相互独立的 sigmoid 函数来代替 softmax 函数,应为 sigmoid 可以很方便的将输出约束到 0~1 范围内,而且也十分用以理解,当一个目标最后经过 softmax 后,如果输出的结果大于 0.5,则说明该目标属于这个类别。
2.3 Predictions Across Scales
2.4 Feature Extractor
具体网络结构如下所示: