最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • YOLOv5从入门到部署之:网络和损失函数

    1 网络结构

    Yolov5的网络结构主要由Backbone、Neck、Head构成,其中Backbone主要使用CSPdarknet+SPP结构,Neck使用PANet结,Head使用yolov3 head, yolov5提供了我们yolov5s、yolov5m、yolov5l、yolov5s的四种模型,这几种模型的网络结构相似,这里我们主要以yolov5s为例来分析yolov5的网络结构,yolov5s是四种网络中最小最基础的模型,其他的三种模型都是在加深深度和加宽宽度。这里我按照yolov5.yaml的模型文件自制了一个网络结构图,希望能够帮助大家更好的理解yolov5的网络结构。

     

    YOLOv5从入门到部署之:网络和损失函数

     

    1.1、Backbone

    Backbone网络是检测网络的主干,网络提取出图像的高中低层的特征。
    yolov5的backbone主要使用了Foucus和CSP和SPP结构组成。

    (1)CSP结构(Cross Stage Partial)

    CSP结构从网络结构设计的角度来解决以往工作在推理过程中需要很大计算量的问题,CSP结构认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。CSP结构通过将基础层的特征图划分为两个部分,然后通过CSP结构将它们合并,可以在能够实现更丰富的梯度组合的同时减少计算量。下面是CSP结构在各个网络中的表现。

    YOLOv5从入门到部署之:网络和损失函数

    Yolov5使用CSPDarknet作为Backbone,从输入图像中提取丰富的信息特征。CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸。
    在yolov5中的CSP结构,yolov5采用了两种的CSP结构,第一种主要在Backbone中使用CSP_1(结构图中黄色)其中的Bottleneck就是采用Res 结构,第二种就是在Neck中使用CSP_2(结构图中绿色)其中的Bottleneck没有采用Res 结构。

    CSP结构代码:common.pyc – BottleneckCSP


    (2)Focus

    Focus是一种对 feature map 的切片操作把宽度 w 和高度 h 的信息整合到 c 维度,具体来说就是将相距为 2 的四个位置进行堆叠到一个通道上去,因此长 h 和宽 w 都缩小两倍,通道 c 数增加了4倍,Focus模块设计用于降低FLOPS和提高速度,而不是提高mAP。
    ov5github的讨论区。

     

     

    YOLOv5从入门到部署之:网络和损失函数

                             Focus原理图

    (3)LeakyReLU

    LeakyReLU是一种activation function,是ReLU的一种改进版本,要了解LeakyReLU,我们需要先回顾一下ReLU。ReLU(x) = max(0, x),ReLU是最常用的activation function,但ReLU会面临一个问题,在训练过程中部分神经元不会被激活,导致相应的参数永远不能被更新,我们称这种情况叫神经元挂掉,为了解决这种问题 LeakyReLU 提出了将 ReLU 的前半段设为 ax 而非0。

    YOLOv5从入门到部署之:网络和损失函数

    LeakyReLUa(x)=max(ax, x),激活函数有一个参数a,控制着leaks的数量,斜率非常的小,但是能够保证神经元不会挂掉。
    在pytorch里有相关的函数可以使用 torch.nn.LeakyReLU(0.1,inplace=True),为了更好理解下面有实现的代码。

     

    (4)SPP层:Spatial Pyramid Pooling(空间金字塔池化)

    YOLOv5从入门到部署之:网络和损失函数

    Spatial Pyramid Pooling 原理如上图,feature maps 是经过三个pooling窗口(蓝色,青绿,银灰的窗口) 进行pooling,将分别得到的结果在channel维度进行concat。SPP 可以增大感受野,有助于解决anchor和feature map的对齐问题。

    SPP 的代码如下:  common.py – class SPP

    1.2、Neck

    Yolov5 的 Neck 部分采用了 PANet 结构,Neck 主要用于生成特征金字塔。特征金字塔会增强模型对于不同缩放尺度对象的检测,从而能够识别不同大小和尺度的同一个物体。

    PANet 结构是在FPN的基础上引入了 Bottom-up path augmentation 结构。FPN主要是通过融合高低层特征提升目标检测的效果,尤其可以提高小尺寸目标的检测效果。Bottom-up path augmentation结构可以充分利用网络浅特征进行分割,网络浅层特征信息对于目标检测非常重要,因为目标检测是像素级别的分类浅层特征多是边缘形状等特征。PANet 在 FPN 的基础上加了一个自底向上方向的增强,使得顶层 feature map 也可以享受到底层带来的丰富的位置信息,从而提升了大物体的检测效果。如下图所示,(a)FPN backbone, (b)Bottom-up path augmentation。

    YOLOv5从入门到部署之:网络和损失函数

    1.3、Head

    Head 进行最终检测部分,在yolov5.yaml 的相关配置如下:

    可以看到,YOLOv5 采用了与 YOLOv3 相同的head网络,都是 1*1 的卷积结构,并有三组output,输出的特征图大小分辨为:

    • bs * 255 * 80 * 80;
    • bs * 255 * 40 * 40;
    • bs * 255 * 20 * 20;

    其中,bs是batch size,255 的计算方式为 [na * (nc + 1 + 4)] ,具体参数含义如下:
    • na(number of anchor) 为每组 anchor 的尺度数量(YOLOv5中一共有 3 组anchor,每组有3个尺度);
    • nc 为number of class (coco的class 为80);
    • 1 为前景背景的置信度score;
    • 4 为中心点坐标和宽高;

    最后,输出的特征图上会应用锚定框,并生成带有类别概率、置信度得分和包围框的最终输出向量。
    与YOLOv3不同的是,在 anchor 上 YOLOv5 跨网格匹配规则的方式来区分 anchor 的正负样本。

    YOLOv5从入门到部署之:网络和损失函数

    关于anchor的分配任务,在这篇文章anchor的机制回顾有仔细的介绍:

    请在本站或者百度搜索:目标检测中的Anchor机制回顾

    2 Loss Function

    YOLOv5 采用了BECLogits 损失函数计算objectness score的损失,class probability score采用了交叉熵损失函数(BCEclsloss),bounding box采用了GIOU Loss。
    GIoU Loss 用来计算bounding box的 Loss, GIOU 是在CVPR2019中,论文https://arxiv.org/pdf/1902.09630.pdf中提出。GIOU直接把IoU设为回归的 Loss。

    YOLOv5从入门到部署之:网络和损失函数

    上面公式的意思将两个任意框A,B,我们找到一个最小的封闭形状C,让C可以把A,B包含在内,接着计算C中没有覆盖A和B的面积占C总面积的比值,然后用A与B的IoU减去这个比值。与IoU类似,GIoU也可以作为一个距离,loss可以用  

    YOLOv5从入门到部署之:网络和损失函数

    GIoU代码:general.py  bbox_iou 函数  返回值是GIoU值

    GIoU Loss代码 : 在compute_loss 函数

    Classloss和Obj loss 代码:在compute_loss 函数  obj loss 采用BEC Logits loss,class loss 采用BCEcls loss二分类交叉熵损失。

    3 Next

    下一篇,《YOLOv5从入门到部署》系列将会介绍:实践部分——如何使用YOLOv5训练自己的数据集。

    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » YOLOv5从入门到部署之:网络和损失函数

    发表评论

    • 52会员总数(位)
    • 312资源总数(个)
    • 31本周发布(个)
    • 3 今日发布(个)
    • 331稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情