YOLO v3学习笔记

YOLO v3学习笔记

  • yolo v3网络结构
    • yolo v3的主干网络结构
    • yolo v3的整体网络结构
  • yolo v3的实现过程
    • 网络的输入
    • 9种尺度的先验框
    • 训练及预测
  • [注意]

yolo v1学习笔记之后,继续学习了yolo v3网络并将v3版本的区别记录在此!本文主要参考了一些博主的博客,并将自己的学习结果记录在此。欢迎大家学习交流!("_")原论文地址以及参考的大佬博客如下:

论文地址:

  • yolo v3论文

参考博客:

  • yolo系列之yolo v3【深度解析】
  • Yolo v3目标检测网络详解
  • 史上最详细的Yolov3边框预测分析
  • YOLO v1学习笔记

yolo v3网络结构

Yolo v3的backbone为darknet53,darknet53为全卷积神经网络,采用大小为 3 ∗ 3 3*3 33,step为2的卷积核进行downpolling,有效阻止由于池化层所带来的低层级特征的损失,使得yolov3为一个全卷积网络(FCN)。

yolo v3的主干网络结构

Yolov3网络是由一系列DBL和Res_unit模块堆叠起来的,其backbone如下图所示:

YOLO v3学习笔记_第1张图片

yolo v3的整体网络结构

yolo v3的网络结构如下图所示:

YOLO v3学习笔记_第2张图片

  • DBL:是卷积+BN+Leaky Relu的组合
  • Res_uint:是由两个DBL和上层的快捷链路组成
  • DownPooling:是由大小为 3 ∗ 3 3*3 33,step为2,padding为1的卷积和进行卷积运算得到(卷积运算除不尽时向下取整
  • Concat:张量拼接,与残差单元的add不同,张量拼接会扩充张量的维度,add是直接相加不会导致张量维度的改变

yolo v3的实现过程

  1. 输入图片通过backbone得到3个尺度的特征图(从上往下:feat1 -> ( 256 ∗ 52 ∗ 52 256 * 52 * 52 2565252), feat2 -> ( 512 ∗ 26 ∗ 26 512 * 26 * 26 5122626), feat3 -> ( 1024 ∗ 13 ∗ 13 1024 * 13 * 13 10241313)),分别在3种尺度上进行检测。
  2. 3个尺度的特征图经过5层卷积(DBL)后,分别进入不同的分支,一条分支进行卷积+上采样,得到的特征图与上层的特征图进行通道合并(Concat:扩展通道),另一条分支通过两层卷积直接输出预测结果。
  3. 最后一个卷积层为 1 ∗ 1 1 * 1 11卷积,卷积核尺寸为 ( B ∗ ( 5 + C ) ) ∗ 1 ∗ 1 (B * (5 + C)) * 1 * 1 (B(5+C))11,B表示一个网格可以预测边界框的数目,C代表C个类别概率,5表示了4个坐标值 ( t x , t y , t w , t h ) (tx,ty,tw, th) (tx,ty,tw,th)和1个物体置信度。对于COCO数据集, C = 80 C=80 C=80 B = 3 B=3 B=3。最终3个尺度的检测结果的尺寸分别是 ( 255 ∗ 52 ∗ 52 ) (255 * 52 * 52) (2555252) ( 255 ∗ 26 ∗ 26 ) (255 * 26 * 26) (2552626) ( 255 ∗ 52 ∗ 52 ) (255 * 52 * 52) (2555252)

网络的输入

Yolo v3网络的输入图片大小为 416 ∗ 416 416*416 416416,对于实际图像来说,并不总是 416 ∗ 416 416*416 416416大小的图片,所以需要进行尺寸的缩放。缩放时为保证图像不会扭曲变形,选择缩放比例为 m i n ( w / i m g w , h / i m g h ) min(w/img_w,h/img_h) min(w/imgw,h/imgh)来进行缩放,不满足的尺寸区域用 ( 128 , 128 , 128 ) (128,128,128) (128,128,128)的像素进行填充,如图所示:
YOLO v3学习笔记_第3张图片

9种尺度的先验框

随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。yolo v2已经开始采用K-means聚类得到先验框的尺寸,yolo v3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框,anchor box其实就是对预测的对象范围进行约束,并加入了尺寸先验经验,从而实现多尺度学习的目的。在COCO数据集这9个先验框如下图所示:
在这里插入图片描述
分配上,在最小的 13 ∗ 13 13*13 1313特征图上(有最大的感受野)应用较大的先验框 ( 116 ∗ 90 ) (116*90) (11690) ( 156 ∗ 198 ) (156*198) (156198) ( 373 ∗ 326 ) (373*326) (373326),适合检测较大的对象,注意这9个坐标是针对 416 ∗ 416 416*416 416416大小图像下的,因此针对于 13 ∗ 13 13*13 1313特征图的anchor要除以32即(416/13)将尺度缩放至 13 ∗ 13 13*13 1313下。中等的 26 ∗ 26 26*26 2626特征图上(中等感受野)应用中等的先验框 ( 30 x 61 ) (30x61) (30x61) ( 62 x 45 ) (62x45) (62x45) ( 59 x 119 ) (59x119) (59x119),适合检测中等大小的对象。较大的 52 ∗ 52 52*52 5252特征图上(较小的感受野)应用较小的先验框 ( 10 ∗ 13 ) (10*13) (1013) ( 16 ∗ 30 ) (16*30) (1630) ( 33 ∗ 23 ) (33*23) (3323),适合检测较小的对象。

训练及预测

具有了anchor后,通过backbone的特征提取,输出3种不同尺寸的特征图,特征图上每个girde cell作为中心坐标,产生3个anchor box,anchor box和ground truth box的IOU最大的负责这个真实的目标检测,训练时,主要是通过线性回归对anchor box的平移位置和缩放尺寸进行微调达到逐渐靠近的目的。

这样在进行预测时,流程大致如下:

  1. 对于训练图片中的ground truth,若其中心点落在某个gride cell内,那么该cell内的3个anchor box负责预测它。
  2. 具体是哪个anchor box预测它,需要在训练中确定,即由那个与ground truth的IOU最大的anchor box预测它,而剩余的2个anchor box不与该ground truth匹配。
  3. YOLOv3需要假定每个gride cell至多含有一个grounth truth,而在实际上基本不会出现多于1个的情况。与ground truth匹配的anchor box计算坐标误差、置信度误差(此时target为1)以及分类误差,而其它的anchor box只计算置信度误差(此时target为0)。

Yolov3的误差同样包括位置误差、置信度误差、分类误差,每个gride cell的三个anchor都具有5+C个属性,5表示了4个坐标值 ( t x , t y , t w , t h ) (tx,ty,tw,th) (tx,ty,tw,th)和1个物体置信度,这里的4个坐标是相对于物体中心所处网格的左上角而言的,物体置信度表示该预测框包含物体的概率,包含物体则置信度为1,否则为0。C表示C个类别概率。如下图所示:
YOLO v3学习笔记_第4张图片
上图中红色框为真实框,中心的红点为真实框的中心点,黑色框为映射到feature map上的anchor box。 t x t y t_x t_y txty是预测坐标的偏移值, t w t h t_w t_h twth是尺度缩放

网络不会预测边界框中心的确切坐标,而是预测与预测目标的gride cell左上角相关的偏移,这时会考虑,预测相对gride cell左上角的偏移,究竟是哪个gride cell呢?毕竟网络输出的feature map上最小也要 13 ∗ 13 13*13 1313个gride cell。我们现在就要在yolo v1的文章中查找答案了,在yolov1中提到对于训练图片中的ground truth,若其中心点落在某个cell内,那么该cell内的3个anchor box负责预测它。YOLOv3需要假定每个cell至多含有一个grounth truth,具体是哪个anchor box预测它,需要在训练中确定,即由那个与ground truth的IOU最大的anchor box预测它,而剩余的2个anchor box不与该ground truth匹配。

网络在进行训练时,偏移量的计算为:
t x = g x − c x t_x=g_x-c_x tx=gxcx
t y = g y − c y t_y=g_y-c_y ty=gycy
t w = l o g ( g w / a w ) t_w=log(g_w/a_w) tw=log(gw/aw)
t h = l o g ( g h / a h ) t_h=log(g_h/a_h) th=log(gh/ah)

直接求bbox距离gride cell左上角坐标的偏移量。长宽的缩放比例预测不是直接回归bounding box的长宽而是尺度缩放到对数空间,是怕训练会带来不稳定的梯度。因为如果不做变换,直接预测相对形变 t w t_w tw,那么要求 t w > 0 t_w>0 tw>0,因为你的框的宽高不可能是负数。这样,是在做一个有不等式条件约束的优化问题,没法直接用SGD来做。所以先取一个对数变换,将其不等式约束去掉,就可以了。

[注意]

  • yolov3需要的训练数据的label是根据原图尺寸归一化了的,这样做是因为怕大的边框的影响比小的边框影响大,进行了归一化后,使得训练更容易收敛。
  • 大小为 52 ∗ 52 52*52 5252特征图具有对应的标签结构
  • 大小为 26 ∗ 26 26*26 2626特征图具有对应的标签结构
  • 大小为 13 ∗ 13 13*13 1313特征图具有对应的标签结构

你可能感兴趣的:(深度学习,图像,计算机视觉,卷积,深度学习)