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,也就是中心点的调整范围永远在右下角的框内,这也就是我们说的,物体的中心落在哪个格子里,该物体就由哪个框负责预测。
范围永远在右下角的框内,这也就是我们说的,物体的中心落在哪个格子里,该物体就由哪个框负责预测。文章来源:https://www.toymoban.com/news/detail-843808.html
最后将长宽取exp后与先验框对应坐标相乘。这就得到了在13×13尺寸图上的预测框,然后再乘以32缩放回来就得到了最后的预测框。文章来源地址https://www.toymoban.com/news/detail-843808.html
到了这里,关于YOLOv3网络结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!