主要对yolo v2最后一层卷积conv23输出的特征如何转换为bbox和置信概率结果输出进行分析?
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:channel 0~channel 84
区域2:channel 85~channel 169
区域3:channel 170~channel 254
区域4:channel 255~channel 339
区域5:channel 340~channel 424
转换后的数据格式如下:
横排为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中检测到物体后,各类的预测概率。
首先设定13*13个cell的定点坐标,取每个cell的左上角坐标为grid_x,grid_y,示意图如下:
然后,按步骤1中得到的Δx和Δy,结合预设的cell坐标,计算得到推理后anchor box的坐标xs和ys
计算公式如下:
坐标位置,cell还有anchorbox对应关系如下:
参照步骤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
det_confs为anchor box中检测到物体的概率;cls_confs为anchor box中检测到物体后,各类的预测概率。找到cls_confs中概率最大的值和索引位置class_index,class_index对应该物体的类别。
那么最终的物体检测概率为:
sigmoid(det_confs)*softmax(cls_confs)
设置一个conf阈值,大于阈值的进行输出,以每个detection为单位,输出格式为:
[xs ys ws hs det_confs cls_confs class_index],前6个元素为float类型,最后一个为int
为了在多特征金字塔做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个坐标值计算得到的,为面积的交并比:
根据上图计算A、B和A B重叠的面积如下:
那么IoU值计算公式如下: