第一次写博客,参考一些资料总结了一些有关YOLOv3目标检测网络理解方面的内容。如有不当之处欢迎大家批评指正!
一、模块说明
模块名称模块名称 | 模块含义模块含义 | 模 块模块作用作用 |
CBL (conv+BN+Leaky relu) | CBL为卷积块:由Conv,Batch Normalization,Leaky 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。通过特征融合可以使检测网络同时利用到所提取的浅层特征与深层特征 |
二、结构图展示
三、网络结构每一层的详细信息如下图
四、网络输入输出的说明
输入一张任意大小图片,保持长宽比不变的情况下,缩放至 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种) |
五、网络检测示例说明
图片来源于
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 个边界框可以检测一个框,或者临近网格可检测相同对象。
最后,调用画图函数绘制目标检测的结果输出。