【深度学习】目标检测之YOLOv3算法
YOLO系列目标检测算法官方代码
https://pjreddie.com/darknet/yolo/
YOLOv3
网络结构
Darknet-53:
共有53个卷积层,进行32倍下采样
Darknet-53为了加深网络,也采取的类似ResNet的跳接结构,但和ResNet的残差块结构不同:
- ResNet的下采样过程,在与上一个卷积组邻接的残差块中实现。【深度学习】ResNet系列网络结构
- Darknet-53的下采样过程,是在Residual跳接之前,用一个单独的卷积层实现的。
Darknet-53中所有的Residual都是如上图所示的结构
YOLOv3保留Darknet-53标准结构Avgpool以上的部分(不包括Avgpool)。在此基础上和SSD一样,在三个不同size的Feature Map上接Detection Head。此外,仿照FPN,较深层的Detection Head的Feature Map经过上采样,和较浅层的Detection Head的Feature Map按channel方向进行拼接。
YOLOv3网络结构如下:
anchor的编解码
YOLOv3的编解码和YOLOv2的编解码方式相同:
先验:
- 每个Detection Head的最后一个卷积层的输入Feature Map(也就是使用anchor的Feature Map)的每一个cell的左上角点坐标 c x c_x cx、 c y c_y cy( c x 、 c y = 0 , 1 , 2 , . . . c_x、c_y=0,1,2,... cx、cy=0,1,2,...)
- anchor的width和height,
p
x
p_x
px、
p
h
p_h
ph。注意,YOLOv3中的anchor和YOLOv2、SSD中的anchor都不相同。
SSD中的anchor,width和height是相对于原图像的size进行归一化后的值,其值范围在 0 0 0到 1 1 1之间;
YOLOv2中的anchor,width和height是以使用anchor的Feature Map的width和heigth为基准的绝对的值,其值范围在 0 0 0到 F e a t u r n M a p 的 w i d t h ( h e i g h t ) Featurn Map的width(height) FeaturnMap的width(height)之间;
YOLOv3中的anchor,width和height是以初始输入图像(第一个卷积层的输入tensor)的witdh和height为基准的绝对的值,其值范围在 0 0 0到 初 始 输 入 图 像 的 w i d t h ( h e i g h t ) 初始输入图像的width(height) 初始输入图像的width(height)之间。(YOLOv3的anchor的值,除以各自所在的Feature Map的下采样倍数,就和YOLOv2的anchor的值定义相同了)
YOLOv3通过COCO数据集的ground truth box的大小,聚类得到9个anchor的值。每个Detection Head使用其中的三个。具体值如下:
最浅的Detection Head:
(10,13), (16,30), (33,23),
中间的Detection Head:
(30,61), (62,45), (59,119),
最深的Detection Head:
(116,90), (156,198), (373,326)
输出:
和YOLOv2相同,YOLOv3每个cell生成三个anchor(YOLOv2是五个),每个anchor对应自己的输出:4(center_x, center_y, width, height) + 1(置信度) + num_classes(和SSD不同,这个num_classes不包括background,SSD就是通过增加一个background起到YOLO中置信度的作用)
center_x:
t
x
t_x
tx
center_y:
t
y
t_y
ty
width:
t
w
t_w
tw
height:
t
h
t_h
th
置信度:
t
o
t_o
to
编码方式:
b
x
=
S
i
g
m
o
i
d
(
t
x
)
+
c
x
b_x=Sigmoid(t_x) + c_x
bx=Sigmoid(tx)+cx
b
y
=
S
i
g
m
o
i
d
(
t
y
)
+
c
y
b_y=Sigmoid(t_y)+c_y
by=Sigmoid(ty)+cy
b
w
=
p
x
e
t
w
b_w=p_xe^{t_w}
bw=pxetw
b
h
=
p
h
e
t
h
b_h=p_he^{t_h}
bh=pheth
b
o
=
S
i
g
m
o
i
d
(
t
o
)
b_o=Sigmoid(t_o)
bo=Sigmoid(to)
label:
g
x
g_x
gx、
g
y
g_y
gy、
g
w
g_w
gw、
g
h
g_h
gh:原始图像上的ground truth box的中心点坐标、width以及height归一化后的值(注意计算loss时,
g
x
g_x
gx、
g
y
g_y
gy要乘预测所使用的Feature Map的width、height;
g
w
g_w
gw、
g
h
g_h
gh要乘初始输入图像的width、height)
置信度label:计算方式和YOLOv2相同。【深度学习】目标检测之YOLOv2算法&6D姿态估计之YOLO-6D算法
损失函数
和YOLOv2相同,计算损失函数前,要先确定哪个anchor负责哪个落入cell中的object的预测,确定方法与YOLOv2相同。【深度学习】目标检测之YOLOv2算法&6D姿态估计之YOLO-6D算法
损失函数计算:
- 第一项:所有负责预测目标的anchor的坐标损失( b x 、 b y 、 b w 、 b h b_x、b_y、b_w、b_h bx、by、bw、bh)。label是 g x 、 g y 、 g w 、 g h g_x、g_y、g_w、g_h gx、gy、gw、gh(注意计算loss时, g x g_x gx、 g y g_y gy要乘预测所使用的Feature Map的width、height; g w g_w gw、 g h g_h gh要乘初始输入图像的width、height)。使用均方损失函数。衡量目标定位准确度。前面的系数设置为1
- 第二项:不负责预测目标的anchor的坐标损失( b x 、 b y 、 b w 、 b h b_x、b_y、b_w、b_h bx、by、bw、bh)。label是cell的左上点 x x x、cell的左上点 y y y、anchor的 w i d t h width width、anchor的 h e i g t h heigth heigth。因为这样的label对应的实际输出是零。使用均方损失函数。前面的系数设置为1
- 第三项:负责预测目标的anchor的confidence损失 b o b_o bo。label是 P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) Pr(object)∗IOU(b,object) Pr(object)∗IOU(b,object)。使用binary cross-entropy loss(不使用Softmax)。衡量可能有目标的准确度。前面的系数设置为5
- 第四项:不负责预测目标的anchor的confidece损失 b o b_o bo。计算 P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) Pr(object)∗IOU(b,object) Pr(object)∗IOU(b,object),如果计算结果小于0.5,label是零。使用binary cross-entropy loss(不使用Softmax)。前面的系数设置为1
- 第五项:负责预测目标的anchor的类别损失。使用binary cross-entropy loss(不使用Softmax)(在这里相当于多个独立的逻辑分类器,这样的多标签方法有助于对训练数据更好的建模)。
binary cross-entropy loss
二分类的交叉熵损失函数:
对于一个样本:
H
y
/
(
p
(
y
)
)
=
−
[
y
/
∗
l
o
g
(
p
(
y
)
)
+
(
1
−
y
/
)
l
o
g
(
1
−
p
(
y
)
)
]
H_{y^/}(p(y)) =-[y^/*log(p(y))+(1-y^/)log(1-p(y))]
Hy/(p(y))=−[y/∗log(p(y))+(1−y/)log(1−p(y))]
其中,
y
/
y^/
y/是label信息,positive是1,negative是0。
p
(
y
)
p(y)
p(y)是网络的输出,也就是结果是positive的概率。
AP(Average Precision)的含义和计算方法
注意,多类别的目标检测任务中,AP是针对单独一类目标而言的
-
正确率(Precision):
正 确 率 ( P r e c i s i o n ) = T P T P + F P 正确率(Precision) = \dfrac{TP}{TP + FP} 正确率(Precision)=TP+FPTP
判断为True的样本中,真实为True的比例 -
真阳性率(True Positive Rate,TPR),灵敏度(Sensitivity),召回率(Recall):
真 阳 性 率 = T P T P + F N 真阳性率 = \dfrac{TP}{TP + FN} 真阳性率=TP+FNTP
真实为True的样本中,判断为True的比例
Precision和Recall用到目标检测领域,就是:
假设有一组图片,里面有若干待检测的目标,Precision就代表模型检测出来的目标有多大比例是真正的目标物体;Recall就代表所有真实的目标有多大比例被模型检测出来了。
以Recall为横轴,Precision为纵轴绘制的曲线,就是PR曲线。
AP(Average Precision),就是对PR曲线的纵轴(Precision)的值取平均。所谓11point-AP,就是将R轴平分11个点,对应的P轴的值取平均。
mAP(mean Average Precision)的含义和计算方法
mAP是所有类别的AP值的均值
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。