yolo v3关键点梳理

yolo v3 官方地址:https://pjreddie.com/darknet/yolo/

paper地址: https://arxiv.org/abs/1804.02767

官方darknet代码地址:https://github.com/pjreddie/darknet

pytorch版本地址:https://github.com/andy-yun/pytorch-0.4-yolov3

pytorch版本地址:https://github.com/DeNA/PyTorch_YOLOv3

darknet模型转ncnn及调用:https://github.com/xiangweizeng/darknet2ncnn

darknet模型转Caffe及调用:https://github.com/ChenYingpeng/caffe-yolov3

 

yolo v3 比v2的性能进一步得到了提升,本文主要对yolo v3中的关键点进行梳理,以及记录一下在pytorch框架下训练的过程,以下仅针对416*416的输入进行记录。

1.模型结构

yolo v3模型共106层,包含了conv层、BN层、shorcut层、route层、upsample层、yolo层。其中,shortcut层借鉴了resnet的残差结构;route层为路由层,索引到前面的feature map;upsample为双线性上采样层;yolo层为feature map解析层。

 

2.输出形式:

yolo v3采用了多尺度输出,是一个全卷积网络,共有75个卷积层,三个yolo层分别对三个尺度的输出进行解析,作者共使用了9个anchors,每个yolo层使用了其中的三个anchors。当输入为416*416时,第一个yolo层解析的特征图尺寸为13*13,对应在输入上每个grid的宽度为32,故这一层负责检测大目标,对应的先验框为w和h最大的三个anchors;第二个yolo层解析的特征图尺寸为26*26,对应在输入上每个grid的宽度为16,故这一层负责检测中等目标,对应的先验框为w和h中间的三个anchors;第三个yolo层解析的特征图尺寸为52*52,对应在输入上每个grid的宽度为8,故这一层负责检测小目标,对应的先验框为w和h最小的三个anchors。

yolo v3关键点梳理_第1张图片

3.如何预测:

三个yolo层负责分别对各自的前一层卷积层输出的feature map进行解析,输入yolo层的feature map维度和解析过程如下:

以第一个yolo层的输入的feature map为例,feature map 大小为13*13,对应于416*416输入图像上的13*13个grid,每个grid负责给出三个框的预测信息和类别信息,故每个grid需要给出的向量维度为:B * (5 + C),其中B为预测的框的个数,此处对应为3——三个anchors,C表示要检测的类别数——C个class_confidece,5表示每个框包含五个信息(center_x, center_y, wigth, height, objectness),由此可知,输入到yolo层的feature map数量为B * (5 + C)。

同时,yolo v3中,模型不对框的信息进行直接预测,模型输出须经yolo层解析得到预测框信息。解析公式表示为:

预测的center_x: sigmoid(out_x) + grid_x

预测的center_y: sigmoid(out_y) + grid_y 。

预测的框的宽:anchor_w * exp(out_w);

预测的框的高:anchor_h * exp(out_h).

上述公式中,out为模型输出,(grid_x, grid_y)为当前grid的左上顶点坐标,anchor_w为先验框的wigth,anchor_h为先验框的height。(grid_x, grid_y)anchor_wanchor_h为grid相对于图像w、h的scale,故公式得到的结果也是相对于输入图像的w、h的scale。

objectness为预测框的置信度,同样由feature map经过sigmoid函数变换得到。在训练时,当某个bounding box与ground truth的IoU大于其他所有bounding box时,target给1。如果某个bounding box不是IoU最大的那个,但是IoU也大于了某个阈值(我们取0.5),那么我们忽略它(既不惩罚,也不奖励)。我们对每个ground truth只分配一个最好的bounding box与其对应。如果某个bounding box没有与任何一个ground truth对应,那么它对边框位置大小的回归和class的预测没有贡献,我们只惩罚它的objectness。

你可能感兴趣的:(目标检测)