参考:https://www.paddlepaddle.org.cn/tutorials/projectdetail/1659421
1.目标检测基础概念
1.2 边界框(bounding box,bboxx)
表示物体的位置,是正好能包含物体的矩形框
表示形式:
1. xyxy,即(x~1~, y~1~, x~2~, y~2~),其中(x~1~,y~1~)是矩形框左上角的坐标,(x~2~,y~2~)是矩形框右下角的坐标.
2. xywh,即(x,y,w,h),其中(x,y)是矩形框中心点的坐标,w是矩形框的宽度,h是矩形框的高度。
1.2.1 锚框(Anchor box)
锚框是由人们假想出来的一种框。先设定好锚框的大小和形状,再以图像上某一个点为中心画出矩形框。
1.2.2 交并比(Intersection if Union, IoU)
描述两个框之间的重合度
I
o
U
=
A
∩
B
A
∪
B
IoU=\frac{A\cap B}{A \cup B}
IoU=A∪BA∩B
# 计算IoU,矩形框的坐标形式为xyxy,这个函数会被保存在box_utils.py文件中
def box_iou_xyxy(box1, box2):
# 获取box1左上角和右下角的坐标
x1min, y1min, x1max, y1max = box1[0], box1[1], box1[2], box1[3]
# 计算box1的面积
s1 = (y1max - y1min + 1.) * (x1max - x1min + 1.)
# 获取box2左上角和右下角的坐标
x2min, y2min, x2max, y2max = box2[0], box2[1], box2[2], box2[3]
# 计算box2的面积
s2 = (y2max - y2min + 1.) * (x2max - x2min + 1.)
# 计算相交矩形框的坐标
xmin = np.maximum(x1min, x2min)
ymin = np.maximum(y1min, y2min)
xmax = np.minimum(x1max, x2max)
ymax = np.minimum(y1max, y2max)
# 计算相交矩形行的高度、宽度、面积
inter_h = np.maximum(ymax - ymin + 1., 0.)
inter_w = np.maximum(xmax - xmin + 1., 0.)
intersection = inter_h * inter_w
# 计算相并面积
union = s1 + s2 - intersection
# 计算交并比
iou = intersection / union
return iou
# 计算IoU,矩形框的坐标形式为xywh
def box_iou_xywh(box1, box2):
x1min, y1min = box1[0] - box1[2]/2.0, box1[1] - box1[3]/2.0
x1max, y1max = box1[0] + box1[2]/2.0, box1[1] + box1[3]/2.0
s1 = box1[2] * box1[3]
x2min, y2min = box2[0] - box2[2]/2.0, box2[1] - box2[3]/2.0
x2max, y2max = box2[0] + box2[2]/2.0, box2[1] + box2[3]/2.0
s2 = box2[2] * box2[3]
xmin = np.maximum(x1min, x2min)
ymin = np.maximum(y1min, y2min)
xmax = np.minimum(x1max, x2max)
ymax = np.minimum(y1max, y2max)
inter_h = np.maximum(ymax - ymin, 0.)
inter_w = np.maximum(xmax - xmin, 0.)
intersection = inter_h * inter_w
union = s1 + s2 - intersection
iou = intersection / union
return iou
2. 单阶段目标检测模型YOLOv3
2.1 YOLOv3模型设计思想
-
按一定规则在图片上产生一系列的候选区域,根据这些候选区域与物体真实框之间的位置关系进行标注(与真实框足够近的候选区域标记为正样本,偏离真实框较大的区域被标注为负样本)。
-
使用卷积神经网络提取图片特征并对候选区域的位置和类别进行预测。
每个预测框可以看成一个样本,其标签为相对真实框的位置和预测的类别。通过网络模型预测其位置和类别,将网络的预测值和标签值进行比较,就可以建立起损失函数。
2.2 产生候选区域
- 按一定规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。
- 对锚框是否包含目标物体进行预测,如果包含物体还需预测所包含物体的类别、预测框相对锚框位置需要调整的幅度。
2.2.1 生成锚框
将原始图片划分成 m × n m\times n m×n个区域,每个区域产生 k k k 个锚框
2.2.2 生成预测框(xywh)
锚框 | 预测框 | |
---|---|---|
中心坐标(以小方格宽度为单位长度) | c x + 0.5 c y + 0.5 c_x+0.5 \\ c_y+0.5 cx+0.5cy+0.5 | b x = c x + σ ( t x ) b y = c y + σ ( t y ) b_x=c_x+\sigma(t_x)\\b_y=c_y+\sigma(t_y) bx=cx+σ(tx)by=cy+σ(ty) |
大小 | p h p w p_h \\ p_w phpw | b h = p h e t h b w = p w e t w b_h=p_he^{t_h} \\ b_w=p_we^{t_w} bh=phethbw=pwetw |
σ ( x ) = 1 1 + e x p ( − x ) \sigma(x)=\frac{1}{1+exp(-x)} σ(x)=1+exp(−x)1
2.2.3 对候选区域进行标注
-
标注锚框是否包含物体
m × n × k m\times n \times k m×n×k 个锚框中选取 I o U IoU IoU最大的标注为正类1,其他标注为负类0( I o U IoU IoU大于ios_threshold的设置为-1,不参与损失函数的计算),最终每个真实框可对应一个标注为正类的锚框。
-
标注预测框的位置坐标标签
d x ∗ = σ ( t x ∗ ) = g t x − c x d y ∗ = σ ( t y ∗ ) = g t y − c y t w ∗ = l o g ( g t w p w ) t h ∗ = l o g ( g t h p h ) d^*_x=\sigma(t^*_x)=gt_x-c_x \\ d^*_y=\sigma(t^*_y)=gt_y-c_y \\ t^*_w=log(\frac{gt_w}{p_w}) \\ t^*_h=log(\frac{gt_h}{p_h}) dx∗=σ(tx∗)=gtx−cxdy∗=σ(ty∗)=gty−cytw∗=log(pwgtw)th∗=log(phgth)
网络预测 ( σ ( t x ) , σ ( t y ) , t w , t h ) (\sigma(t_x),\sigma(t_y),t_w,t_h) (σ(tx),σ(ty),tw,th)与目标值 ( d x ∗ , d y ∗ , t w ∗ , t h ∗ ) (d^*_x,d^*_y,t^*_w,t^*_h) (dx∗,dy∗,tw∗,th∗)计算损失函数,建立起回归问题,通过网络学习使得 t t t足够接近 t ∗ t^* t∗,从而求解出预测框位置。 -
标注锚框包含物体类别的标签
使用one-hot向量标注物体类别
2.3 卷积神经网络提取特征
通过卷积网络提取图像特征。
YOLOv3使用的骨干网络为Darknet53
2.4 根据输出特征图计算预测框位置和类别
对于一个预测框,网络需要输出 ( 5 + C ) (5+C) (5+C)个实数来表征包含物体、位置和形状尺寸以及属于每个类别的概率。则所有预测框一共需要网络输出的预测值数目为:
2.4.1 建立输出特征图与预测框之间的关联
输出特征图大小与方块区域大小相等
最后输出通道数为 k ( 5 + C ) k(5+C) k(5+C)
P 0 [ t , 0 : 4 + C , i , j ] P0[t,0:4+C,i,j] P0[t,0:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框所需要的 5 + C 5+C 5+C个预测值对应
P 0 [ t , ( k − 1 ) ( 5 + C ) : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C):k(5+C)-1,i,j] P0[t,(k−1)(5+C):k(5+C)−1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框所需要的 5 + C 5+C 5+C个预测值对应
2.4.2 计算预测框是否包含物体的概率
P 0 [ t , 4 , i , j ] P0[t,4,i,j] P0[t,4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的objectness对应
P 0 [ t , ( k − 1 ) ( 5 + C ) + 4 , i , j ] P0[t,(k-1)(5+C)+4,i,j] P0[t,(k−1)(5+C)+4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的objectness对应
2.4.3 计算预测框位置坐标
P 0 [ t , 0 : 3 , i , j ] P0[t,0:3,i,j] P0[t,0:3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的位置对应
P 0 [ t , ( k − 1 ) ( 5 + C ) : ( k − 1 ) ( 5 + C ) + 3 , i , j ] P0[t,(k-1)(5+C):(k-1)(5+C)+3,i,j] P0[t,(k−1)(5+C):(k−1)(5+C)+3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的位置对应
2.4.4 计算物体属于每个类别概率
P 0 [ t , 5 : 4 + C , i , j ] P0[t,5:4+C,i,j] P0[t,5:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的类别对应
P 0 [ t , ( k − 1 ) ( 5 + C ) + 5 : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C)+5:k(5+C)-1,i,j] P0[t,(k−1)(5+C)+5:k(5+C)−1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的类别对应
2.5 损失函数
- 表征是否包含目标的损失函数
- 表征物体位置的损失函数
- 表征物体类别的损失函数
2.6 多尺度检测
目的:能够检测尺寸较小的目标,需要在尺寸较大的特征图上建立预测输出。
方法:将高层的特征图尺寸放大后跟低层级的特征图进行融合。
- 开启端到端训练