首先搞清yolo检测网络的输入输出:
最终输入的是416*416的三通道图像,输出的是三个尺度特征图上的预测张量。
第一尺度:13*13,对此特征图使用最大的三个anchor box,最终得到13*13*3*(4+1+num_class)维度的张量。此尺度的特征图对原图来说有最小的分辨率,这个anchor尺寸适宜检测大物体。特征图每个像素点感受野为32*32,即原图片空间划分的每个grid的尺寸为32*32
第二尺度:26*26,此尺度由第一尺度featuremap上采样并融合而来,对此特征图使用中间大的三个anchor box,最终得到26*26*3*(4+1+num_class)维度的张量。此尺度的特征图对原图来说有中间大小的分辨率,这个尺度anchor适宜检测中等尺度的物体。特征图每个像素点感受野为16*16,即原图片空间划分的每个grid的尺寸为16*16
第三尺度:52*52,此尺度由第二尺度featuremap上采样并融合而来,对此特征图使用最小的三个anchor box,最终得到52*52*3*(4+1+num_class)维度的张量。此尺度的特征图对原图来说有最大分辨率,此尺度anchor最适宜检测小物体。特枕图每个像素点感受野为8*8,即原图片空间划分的每个grid的尺寸为8*8。
每一个pred_box都是(4+1+num_class)维度,4通过struct box box实现。完整的pred_box张量用结构体detection实现的。
得到的所有的bouding box先用物体得分obj_score = 0.5粗过滤,然后剩下的再用类别置信度和IOU阈值做。
通过找到最大类别概率大于阈值的anchor,予以显示preb_box。且如果有其它分类概率,大于阈值,那么也会在box旁打印概率。
(4+Confidence+C):
Confidence =(是目标的概率P)*(框到了目标多少部分IOU)。
C是条件类别概率:已知是目标的前提下,属于某类别的概率。
图片空间分三个尺度划分Grid:(三种划分方法,每种划分其grid内都有3个anchor)
s = 32*32
s = 16*16
s = 8 * 8
每个grid放置3个尺度的anchor box
如何确定物体被哪个区域的anchor预测?物体中心落在哪个grid里,就用这个gird里对应的3个anchor负责预测。
如何确定哪个anchor负责预测目标?这9个anchor与GT_box交并比最大的那个anchor负责预测。
每个格子上的每个anchor都是一个回归器,所有这些回归器是独立的。