YOLOv3网络结构

YOLOv3网络结构

简介

YOLOv3是一种基于深度学习的目标检测算法,由Joseph Redmon等人于2018年提出。YOLOv3是YOLO系列的第三个版本,相比于前两个版本,YOLOv3在速度和精度上都有了很大的提升,相较于YOLOv2的主要变化在于引入了多尺度的概念。

实现原理

YOLOv3实现的大致原理是由卷积神经网络(CNN)网络的输出把图片分成N×N个网格,然后每个网格负责去检测那些中心点落在该格子内的目标。YOLOv3设定的是每个网格单元预测3个box,所以每个box需要有 (x, y, w, h, confidence)五个基本参数,然后根据数据集的类型的不同还要有20或80个类别的概率。

整体结构图示

在这里插入图片描述

各结构组成及分析

1. backbone部分

YOLOv3使用了darknet-53的前面的52层(没有用于图像分类的全连接层)作为backbone部分,这部分是通用的,也可以加上全连接层拿来做图像分类等任务。

DarkNet53中大量使用残差结构的跳层连接,并且为了降低池化带来的梯度负面效果,作者直接摒弃了POOLing,用conv的stride来实现降采样。在这里插入图片描述

如上图所示,蓝色方块×1,×2,×8分别表示该模块重复1次、2次和8次,橙色方块是该模块的名字,Conv Block 表示该模块是一个普通的卷积模块,Residual Block 代表该模块是一个残差网络结构(残差网络具体结构见《常用的卷积结构》)。

2. neck部分

YOLOv3的neck部分使用的是FPN,FPN是特征金字塔网络的缩写。它是一种特征提取方法,可用于目标检测任务。FPN可以从图像中提取不同尺度和分辨率的特征,然后将它们组合成一个特征金字塔。这个特征金字塔可以用于检测图像中不同大小的物体。

在这里插入图片描述

如上图所示,backbone部分输出的shape分别为(13,13,1024),(26,26,512),(52,52,256)。将这三个输出分别输入到FPN中,(13,13,1024)这一个输入,经过5次卷积后,输出(13,13,512),然后兵分两路,一路传入到head中,一路再经过一个卷积和上采样,得到(26,26,256),将这个输出和backbone的第2个输出也就是(26,26,512)进行堆叠操作(concat),得到(26,26,768)。以此类推:(26,26,768)再经过5次卷积,然后兵分两路,将上采样输出和backbone的输出进行堆叠操作;最后对(52,52,256)的输出也进行相同操作。最终得到三个分支来传给head部分。

区别concat与add操作:concat操作是把两个矩阵通道堆叠到一起,里面的数据不变,通道数为两者相加;add操作是把两个矩阵数据加在一起,两者通道数相同且不变,只是单纯的数据相加。

3. head部分

YOLOv3的head部分是YOLOv3的检测头部分,用于将neck部分的输出特征图转换为检测结果。YOLOv3的head部分包括三个卷积层,其中两个卷积层使用1×1卷积核,以减少特征图的通道数,最后一个卷积层使用1×1卷积核和3×3卷积核,以生成最终的检测结果。

在这里插入图片描述

如上图,FPN输出的3个分支,通过两层卷积输出预测head。这里最终输出的形式为:batchSize×(4+1+类别总数)×特征图宽×特征图宽。其中的4为预测框的tx,ty,tw,th。这里假定采用coco数据集,有80个类别,所以输出的tensor的channel输为255。

输出解耦

YOLOv3网络在head部分输出后还要经历对输出解耦的部分。具体实现过程如下:

我们以13×13的输出为例,原本416×416大小变成13×13,相当于缩小了416/13=32倍,也就是说原图32×32个小方块对应于最后输出的1×1的像素点。

如下图,蓝色的是实际的标注框,粉红色的是对应到13×13上的先验框,先验框是固定不变的,它的中心就是落在13×13的交点上,长宽就是除以32的结果每个特征图。由于先验框是我们一开始自己确定的,显然是不正确,需要模型对它调整。

在这里插入图片描述

我们将初始先验框坐标记为(cx,cy,pw,ph),模型输出的4为(tx,ty,tw,th),调整的公式如上图所示,中心点取sigmoid激活函数,sigmoid函数范围是0~1,也就是中心点的调整范围永远在右下角的框内,这也就是我们说的,物体的中心落在哪个格子里,该物体就由哪个框负责预测。

范围永远在右下角的框内,这也就是我们说的,物体的中心落在哪个格子里,该物体就由哪个框负责预测。

最后将长宽取exp后与先验框对应坐标相乘。这就得到了在13×13尺寸图上的预测框,然后再乘以32缩放回来就得到了最后的预测框。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yolov3网络结构由几个基本组件组成。其中,CBL是Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。Res unit是借鉴了Resnet网络中的残差结构,使得网络可以构建得更深。ResX由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL起到下采样的作用,因此经过5次Res模块后,得到的特征图大小从608变为304、152、76、38、19。除了这些基本组件外,还有一些其他基础操作,如Concat(张量拼接)和add(张量相加)。在Yolov3的主干网络Backbone中,共有52个卷积层,再加上一个FC全连接层,组成了Darknet53分类网络。需要注意的是,在目标检测Yolov3中,去掉了FC层,但仍然称其为Darknet53结构。\[1\] 另外,通过观察预测层的结构,我们可以清晰地看到它们分别来自哪个部分,并且Concatenate层与哪个层进行拼接。需要注意的是,Convolutional指的是Conv2d+BN+LeakyReLU,与Darknet53图中的一样,而生成预测结果的最后三层只是Conv2d。通过这些信息,我们可以更容易地搭建出Yolov3的网络框架。\[2\] 如果对Yolov3网络结构还有疑惑,可以参考Github上一些大牛们基于Tensorflow搭建的Yolov3模型的代码进行进一步分析。\[3\] #### 引用[.reference_title] - *1* [Yolov3网络架构分析](https://blog.csdn.net/wujianing_110117/article/details/119381158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [YOLO v3网络结构分析](https://blog.csdn.net/qq_37541097/article/details/81214953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值