文章目录
YOLOv3的论文相较于前两个版本,没有太大的改动,作者以一种实验报告的形式描述了YOLOv3的改进部分及实验结果,也非常坦率地公布了一些不太成功的实验。
1. 细节
1.1 Bounding boxes prediction
Bounding Boxes的预测与YOLOv2中类似,都是预测相较于cell左上角坐标的偏移量 ( t x , t y ) (t_x, t_y) (tx,ty)和长宽的缩放量 ( t w , t h ) (t_w,t_h) (tw,th)。当然这些数据表示的都是相对位置,取值范围为[0,1]。除了这四个量之外,还为每个bounding box预测了一个Objectness score,表示该bounding box中是否存在一个待检测目标,如果一个bounding box prior(就是anchor box)与ground truth的IOU是最大的,那么这个值应该为1;如果其中某个bounding box prior与ground truth的IOU是不是最大的,但是又超过了某一个阈值(这里设置为0.5),那么就忽略他的预测结果。因为在YOLO中,为每一个ground truth只分配一个bounding box prior的objectness score为1,这保证了如果一个bounding box prior没有分配到一个目标,那么他只会受到objectness的影响。
1.2 Class Prediction
在预测分类的时候,并没有采用softmax,而是独立的logistic分类器,采用的是binary cross entropy误差。
H
p
(
q
)
=
−
1
N
∑
i
=
1
N
y
i
l
o
g
(
y
^
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
y
^
i
)
H_p(q) = -\frac{1}{N}\sum_{i=1}^{N} y_ilog(\hat y_i) + (1-y_i)log(1 - \hat y_i)
Hp(q)=−N1i=1∑Nyilog(y^i)+(1−yi)log(1−y^i)
1.3 Predictions Across Scales
在最后的预测阶段,YOLOv3借鉴了特征金字塔网络(feature pyramid networks),组合浅层网络输出的特征图。在YOLOv3中组合3种不同尺寸的特征图,并基于这些组合特征,增加了几层卷积层用于预测最后的结果,最后网络输出的tensor大小为:
N
∗
N
∗
[
3
∗
(
4
+
1
+
80
)
]
N*N*[3*(4+1+80)]
N∗N∗[3∗(4+1+80)]
即每个cell预测3个bounding boxes,每个bounding boxes预测
(
t
x
,
t
y
,
t
w
,
t
h
,
t
o
b
j
)
(t_x, t_y,t_w,t_h,t_{obj})
(tx,ty,tw,th,tobj)和80个类别的概率分布。
在YOLOv3中仍然使用了bounding box prior,通过dimension cluster,得到9个聚类中心,再随机选择其中3个。
1.4 Feature Extractor
在YOLOv3中,作者引入了ResNet中的shortcut的概念,将原来的DarkNet19修改成了DarkNet53,虽然网络规模比之前大,但是准确率提高了,依然很快(It’s still fast though, don’t worry)。其网络结构如下:
2. 结论
- 尽管DarkNet53比DarkNet19要大,但是性能仍然能与ResNet-152媲美,但是速度比它快2倍,比SSD快3倍;
- 在之前的版本中,YOLO在小目标上误差比较大,但是在v3版本中竟然反过来了,在大目标上误差较大;
3. 一些失败的实验
- 直接预测Anchor box x, y的offset;
- 在预测x, y的时候直接用Linear(直接预测结果准确位置)代替Logistic(相对位置0-1);
- 引入Focal Loss;
- 引入双IOU阈值和truth assignment;