YOLOv3网络结构的理解

 


第一次写博客,参考一些资料总结了一些有关YOLOv3目标检测网络理解方面的内容。如有不当之处欢迎大家批评指正!


一、模块说明

模块名称模块名称

模块含义模块含义

模      块模块作用作用

CBL

(conv+BN+Leaky relu)

CBL为卷积块:由Conv,Batch Normalization,Leaky relu 这三个网络层组成。

  1. Conv层为卷积层,对输入图像采用多个不同的卷积核进行处理,得到不同的响应特征图。
  2. BN层为批归一化层,BN层作为神经网络的一层,放在激活函数之前卷积层之后使用。当得到的特征图个数为m,特征图大小为w*h(即图像像素点个数),则做BN的数据量为m*w*h。BN层的主要运算步骤为对所有的批处理数据求均值与方差,之后像素值与均值求差之后除以方差进行规范化,同时加入偏移因子与尺度变化因子控制归一化后的值,因子的值由神经网络在训练中学习得到的。
  3. Leaky Relu函数是Relu函数的变体,在Relu函数中当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数该函数输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢),解决了Relu函数进入负区间后,导致神经元不学习的问题。

Res

Res 为残差块:包含两个卷积块和一个add层。

add层只是将相同维度的张量进行相加,残差这种结构能够保证网络结构在很深的情况下,仍能收敛,使模型能训练下去

ResX

由一个CBL与X个残差组件构成

每个Res模块前面的CBL都起到下采样的作用,每个ResX中包含1+2*X个卷积层,因此整个主干网络的Backbone中一共包含1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)=52个卷积层。

上采样

下采样

上采样为放大图像,下采样为缩小图像。

下采样原理:图像尺寸为M*N。对其进行s倍下采样,即得到(M/s)*(N/s)尺寸的分辨率图像,s需为M和N的公约数,对于矩阵形式图像的含义即为将原始图像s*s窗口内的图像编程为一个像素,这个像素点的值就是窗口内所有像素的均值。在YOLOv3的网络结构中并未采用最大值池化或平均值池化方法进行降采样,而是采用步长为2的卷积来进行降采样。

上采样原理:图像放大几乎都是采用内插值方法,即在原有图像的基础上在各个像素之间采用合适的插值算法插入新的元素。

在YOLOv3的网络结构中共图像的像素进行了5次下采样,每次采样步长为2,所以输入图像的大小需要为32的倍数。

Concat

张量拼接层

例如26 ×26 ×256 和 26 ×26 ×512这两个张量,经过Concat层后变为26 ×26 ×768。通过特征融合可以使检测网络同时利用到所提取的浅层特征与深层特征

二、结构图展示

(图片来源于博客https://blog.csdn.net/weixin_46269983/article/details/107637613?fps=1&locationNum=2

三、网络结构每一层的详细信息如下图

四、网络输入输出的说明

输入一张任意大小图片,保持长宽比不变的情况下,缩放至 w 或 h 达到416,生成416x416的新图,(例如图像的大小为1914x2294,按比例压缩后变成347x416,最后再进行填充得到416x416)作为网络的输入input。即网络的输入是一张416x416、3通道的RGB图片。

3*3为卷积核的尺寸,32为卷积核通道数

S 为strides,表示卷积核的滑动步长

P为padding指定了边缘处理方式

 

(此处应为13*13*255)

该模块为第一个尺度的YOLO检测层,yolov3共在三个尺度的特征图进行目标检测,能够提升对不同尺度目标的检测效果。

13*13为该层输出图的尺度大小

255为该层的通道数

255=3*(4+1+80),3为该尺度所用的anchor数目,anchor框的预设大小由标签框进行k-means聚类得到。4为预测的边框坐标,1为边框置信度,80 为预测的类别数。

26*26与52*52的尺度预测同理。

对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 26*26*3 52*52*3 = 10647 个预测。每一个预测是一个(4 1 80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种)

五、网络检测示例说明

图片来源于https://blog.csdn.net/weixin_41943311/article/details/95457375

YOLOv3的卷积神经网络(CNN)网络的输出把图片分成NxN个网格(YOLOv3多尺度预测,输出有3层featue maps,每层feature map有NxN个网格,分别为13x13 、26 x26 和52x52),然后每个网格负责去检测那些中心点落在该格子内的目标。下图是在一个13x13的feature map中对小狗进行识别:

真值对象框中心所在的网格(标记为红色,第7行的第7个)会作为负责预测目标是否是小狗的单元格,它是真值框(标记为黄色)的中心。

每个单元格需要预测并产生3x(4+1+B)个值。如果将输入的特征图(feature map)划分为NxN网格,那么每层特征图最终预测值为 NxNx3x(4+1+B) 大小的张量。 其中,3为每层特征图anchor box数量;4为边界框中心点坐标(x , y)、宽w 和高h ;1为置信度;B:可识别目标的类别数(在YOLOv3中,COCO集为80类),即B=80。

YOLOv3输出的不同尺寸的特征图,其检测目标的不同效果如下图所示:

 

26x26和52x52尺寸的特征图可以帮助该网络学习细粒度特征,有利于检测较小的目标。在最小的13*13特征图上(有最大的感受野)应用较大的先验框(116×90),(156×198),(373×326),适合检测较大的对象。中等的26*26特征图上(中等感受野)应用中等的先验框(30×61),(62×45),(59×119),适合检测中等大小的对象。较大的52*52特征图上(较小的感受野)应用较小的先验框(10×13),(16×30),(33×23),适合检测较小的对象。

六、每个边框预测的原理

Cx,Cy是feature map中grid cell的左上角坐标,在yolov3中每个grid cell在feature map中的宽和高均为1。如下图1的情形时,这个bbox边界框的中心属于第二行第二列的grid cell,它的左上角坐标为(1,1),故Cx=1,Cy=1.公式中的Pw、Ph是预设的anchor box映射到feature map中的宽和高。

tx,ty,tw,th为网络实际学习的目标,tx,ty是预测的坐标偏移值,tw,th是尺度缩放。最终得到的边框坐标值是bx,by,bw,bh即边界框bbox相对于feature map的位置和大小,是需要的预测输出坐标。由上述公式求得。求出每个grid cell中每个anchor box与ground truth box的IOU(交并比),IOU最大的anchor box对应的bounding box就负责预测该ground truth,通过该anchor box坐标经过线性回归微调(平移加尺度缩放)去逐渐靠近groundtruth,学习所需tx,ty,tw,th的值

置信度:Cij​表示第i个grid cell的第j个bounding box的置信度,是个区间在[0,1]之间的值,越接近1越好。

类别概率:对象条件类别概率是一组概率的数组,数组的长度为当前模型检测的类别种类数量,它的意义是当bounding box认为当前box中有对象时,要检测的所有类别中每种类别的概率.

对于大小为 416x416 的图像,YOLOv3预测 一共会输出((52 x 52)+ (26 x 26) +(13 x 13)) x3 = 10647 个边界框。但最终的检测结果并没有这么多框,所以需要以下步骤缩减预测框的数目。

目标置信度阈值:首先,我们根据它们的 Objectness 分数过滤边界框。通常,分数低于阈值的边界框会被忽略。

非极大值抑制:非极大值抑制(NMS)可解决对同一个图像的多次检测的问题,只保留得分最高的边界框。例如,红色网格单元的 3 个边界框可以检测一个框,或者临近网格可检测相同对象。

最后,调用画图函数绘制目标检测的结果输出。

七、YOLOv3网络时间复杂度的计算

  • 30
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值