基于飞桨的单阶段目标检测YOLO-V3模型的简易实现
模型介绍
0.
YOLO-V3使用单个网络结构,在产生候选区域的同时即可预测出物体类别和位置。(不需要像R-CNN等系列双阶段目标检测算法,先产生候选区域,再预测出物体类别和位置)并且,在YOLO-V3模型中一个真实框只对应一个正的候选区域。
1.设计思想
① 按照一定的规则在图片上产生一系列候选区域,然后根据这些候选区域和图片上物体真实框之间的位置关系对候选区域进行标注。
- 将与真实框足够接近的(用交并比来衡量)那些候选区域标注为正样本(objectness=1),同时将真实框的位置作为正样本的目标位置;
- 将那些与真实框偏离较大的候选区域标记为负样本(objectness=0)(负样本不需要预测位置或类别);
- 在YOLO-V3模型中,由于一个真实框只对应一个正的预测框,那么对于那些和真实框足够接近但不是最接近的预测框而言,直接设为负样本是不合理的。因此YOLO-V3算法设置了一个IoU阈值iou_threshold,当预测框的objectness不为1,但是其与某个真实框的IoU大于iou_threshold时,设置objectness=-1,不参与损失函数的计算。
② 使用卷积神经提取图片特征并对候选区域的位置和类别进行预测。
③ 那么,可以将每个预测框看成一个样本,然后根据真实框相对其的位置和类别进行标注进而获得标签值,通过将网络模型预测其位置和类别与网络预测标签值进行对比建立Loss。
2. 产生候选区域
① 按一定的规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。
② 对锚框是否包含目标物体进行预测。如果包含目标物体,还需要预测所包含物体的类别,以及预测框相对于锚框位置需要调整的幅度。
2.1.生成锚框
将原始图片划分成m*n个小块,选定单个小块的区域尺寸就可以确定m和n。YOLO-V3算法会在每个区域的中心根据不同anchor生成一系列的锚框。
2.2.生成预测框
由于生成的锚框的大小和位置是固定的,几乎没有可能会和真实框的边界重合;而对于正样本要进行预测位置和类别,因此需要对锚框进行微调形成预测框。
// 锚框:[ c x c_x cx, c y c_y cy, p w p_w pw, p h p_h ph]
// 预测框:[ b x b_x bx, b y b_y by, b w b_w bw, b h b_h bh]
// 调整幅度:[ t x t_x tx, t y t_y ty, t w t_w tw, t h t_h t