YOLO 检测算法分析

主要对yolo v2最后一层卷积conv23输出的特征如何转换为bbox和置信概率结果输出进行分析?

步骤1---数据变换

Conv23输出的blob数据是[batch_num,(5+cls_num)*anchor_num,cell_w,cell_h],其中batch_num是batch size,infer的时候一般为1,cls_num是目标分类数量,对于一般通用的coco数据集为80类,cell为输入图像的格子数量,yolov2里设为13*13,每个cell上设5个anchor。那么典型的conv23输出的数据为[1,425,13,13]维。

在步骤1中需要做维度变换,转换为[85,425]维进行处理,425=85*5为yolov2一共detection的数量,85为每次detection的检测信息。

转换步骤如下:

  1. 将425个channel矩阵从上到小排列,编号为0~424;
  2. 对于每个channel,将13*13展平为1*169,按照从左到右,从上到小的顺序展平;
  3. 变换后的矩阵为85行,13*13*5列,将13*13*5列分为5个区域,每个区域将输入的channel展平后的向量按从上到下顺序依次排列,举例说明:

区域1:channel 0~channel 84

区域2:channel 85~channel 169

区域3:channel 170~channel 254

区域4:channel 255~channel 339

区域5:channel 340~channel 424

YOLO 检测算法分析_第1张图片

转换后的数据格式如下:

YOLO 检测算法分析_第2张图片

横排为detection,顺序为每个anchor按cell的排列从左到右,从上到下依次遍历,共13*13个,每个cell预设了5个anchor,所以是13*13*5=425次。

纵排一共85维,均为浮点数,说明如下:

Δx:anchor box中x坐标的相对偏移量;

Δy:anchor box中y坐标的相对偏移量;

Δw:anchor box中宽度w的相对偏移量;

Δh:anchor box中高度h的相对偏移量;

det_confs:anchor box中检测到物体的概率;

cls_confs:anchor box中检测到物体后,各类的预测概率。

步骤2---计算x、y偏移量

首先设定13*13个cell的定点坐标,取每个cell的左上角坐标为grid_x,grid_y,示意图如下:

YOLO 检测算法分析_第3张图片

然后,按步骤1中得到的Δx和Δy,结合预设的cell坐标,计算得到推理后anchor box的坐标xs和ys

YOLO 检测算法分析_第4张图片

计算公式如下:

坐标位置,cell还有anchorbox对应关系如下:

YOLO 检测算法分析_第5张图片

步骤3--计算w和h

参照步骤3,根据步骤1得到的Δw和Δh,结合预设的anchor长宽比,得到推理后anchor box的宽ws和高hs

计算公式如下:

其中anchor_w和anchor_h为5个预设anchor的宽和高,规格如下:

Anchor1:w=0.57273 h=0.677385

Anchor2:w=1.87446 h=2.06253

Anchor3:w=3.33843 h=5.47434

Anchor4:w=7.88282 h=3.52778

Anchor5:w=9.77052 h=9.16828

参数规格和conf阈值设置详见yolo.cfg

步骤4--计算框内出现物体的概率和物体分类概率

det_confs为anchor box中检测到物体的概率;cls_confs为anchor box中检测到物体后,各类的预测概率。找到cls_confs中概率最大的值和索引位置class_index,class_index对应该物体的类别。

那么最终的物体检测概率为:

sigmoid(det_confs)*softmax(cls_confs)

步骤5--根据分类概率阈值进行信息过滤

设置一个conf阈值,大于阈值的进行输出,以每个detection为单位,输出格式为:

[xs  ys  ws  hs  det_confs  cls_confs  class_index],前6个元素为float类型,最后一个为int

步骤6--非极大值抑制进行二次过滤

为了在多特征金字塔做detection,避免漏检提高检测率,实际上做了很多低效率的detection,要通过非极大值抑制掉,也叫nms,nms是detection的通用处理方法,不局限于SSD、yolo、faster_rcnn、SPPnet,适用于多种目标检测算法框架。

基本实现流程如下:

Step 1:选取一个特定的label;

Step 2:对于该label下的所有detection,按conf从大到小排序;

Step 3:选其中conf最大的做基准,其他的detection和基准框计算面积重合度(IOU),这个IOU和nms阈值做比较,高于阈值的detection是没有意义的,从该label的detection列表中移除;

Step 4:从该label的detection列表中找到conf第2大的做基准,重复step3,直到列表中所有detection没有能移除的为止;

Step 5:选取下一个label,重复step2~4;

Step 6:遍历结束所有label对应的detection,最终完成nms,排列得到最后的nms_out detection列表。

其中IOU是根据各个detection的4个坐标值计算得到的,为面积的交并比:

YOLO 检测算法分析_第6张图片

YOLO 检测算法分析_第7张图片

根据上图计算A、B和A B重叠的面积如下:

那么IoU值计算公式如下:

你可能感兴趣的:(Machine,Learning,yolov2算法,卷积conv23,检测概率,非极大值抑制,目标检测框架)