【深度学习】目标检测之YOLOv3算法

【深度学习】目标检测之YOLOv3算法

  • YOLO系列目标检测算法官方代码
  • YOLOv3
    • 网络结构
    • anchor的编解码
    • 损失函数
    • binary cross-entropy loss
  • AP(Average Precision)的含义和计算方法
  • mAP(mean Average Precision)的含义和计算方法
  • 结语

YOLO系列目标检测算法官方代码

https://pjreddie.com/darknet/yolo/

YOLOv3

网络结构

Darknet-53:
共有53个卷积层进行32倍下采样
【深度学习】目标检测之YOLOv3算法_第1张图片
Darknet-53为了加深网络,也采取的类似ResNet的跳接结构,但和ResNet的残差块结构不同:

  • ResNet的下采样过程,在与上一个卷积组邻接的残差块中实现。【深度学习】ResNet系列网络结构
  • Darknet-53的下采样过程,是在Residual跳接之前,用一个单独的卷积层实现的

【深度学习】目标检测之YOLOv3算法_第2张图片
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网络结构如下:
【深度学习】目标检测之YOLOv3算法_第3张图片

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,... cxcy=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) FeaturnMapwidthheight之间;
    YOLOv3中的anchor,width和height是以初始输入图像(第一个卷积层的输入tensor)的witdh和height为基准的绝对的值,其值范围在 0 0 0 初 始 输 入 图 像 的 w i d t h ( h e i g h t ) 初始输入图像的width(height) widthheight之间。(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 bxbybwbh​)。label是 g x ​ 、 g y ​ 、 g w ​ 、 g h g_x​、g_y​、g_w​、g_h gxgygwgh​(注意计算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 bxbybwbh​)。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))+(1y/)log(1p(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值的均值

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

你可能感兴趣的:(深度学习)