1、YOLOV3框架YOLOV3框架如上图所示,其实,整个框架可划分为3个部分:分别为Darknet-53结构、特征层融合结构(上图concat部分)、以及分类检测结构(上图未画出)。那这三个部分有啥作用或者说怎样工作的呢? 下面从网络结构的输入说起,给一张图像x(大小:416×416)输入到Darkenet-53网络结构,进行一系列的卷积以及参差网络,分别得到原图像1/8(大小:52×52)、1/16(大小:16×26)、1/32的特征图(即feature map),这个过程就是所谓的特征提取过程;在上图也可以看到经过Darkenet-53网络之后有3个分支,分别对应的就是3个不同尺寸的feature map。可能大家想问得到这3个不同尺寸的feature map有什么用呢?为什么要分3个featrue map?(这里不说明,后面原理讲解部分再做解释) 有了3个不同尺寸的feature map,本应该直接利用这些特征进行分类检测的,但考虑到这样的特征层可能表现能力不够,或者说,提取的这些特征不能充分的反应原图中的目标信息。所以接下来需要将3个特征图进行特征融合,以获得更强的特征表现力,从而达到更好的效果;其中由于尺寸不一样,中间需要进行上采样以及下采样(其实就是卷积),使特征图变成相同大小,然后进行堆叠、融合及相应的卷积等操作后,得到最终的3个特征层,即上图中的13×13×255(Y1)、26×26×255(Y2)、52×52×255(Y3),这3个特征图恰好分别为原图像x的1/32、1/16、1/8. 到这,其实整个YOLOV3的框架的核心基本上就讲完了,分类检测结构上图没有画出,后面以原理的形式讲解。 综上所述,对于整个框架,我们抛开其他的细节不看,其实就是将一张大小为416×416×3的输入图像x,经过大量的卷积操作,变成了比它小得多的特征图。下面进行原理讲解 一张大小为416×416×3的原图经过YOLOV3框架卷积后,假设得到一张7×7×255的特征图(为了说明方便,这里没有采用13、26、52的尺寸),原图中可以直观的看到很多的目标,比如有:狗、自行车、小车、树等等;而经过卷积特征提取之后,就变成了不可见的、只有特征点的特征图,其中的每个特征点就反映原图中某个部分的特征,这个特征图就是用来做目标检测与分类的。那具体怎么理解呢???请看下面 进行目标检测其实就是分类预测和回归预测,对应的操作实际上就将7×7×255的特征图进行一个卷积核为3×3的卷积操作和一个卷积核为1×1的卷积操作,经过这样的一个操作之后呢。特征图的预测输出为:7×7×255 →7×7×75。预测输出7×7×75 就是对应于原图中每个块的目标类别与位置信息,至此,就实现了目标的检测以及分类。详细说明如下 如下图所示:预测结果输出与原图的对应关系 有了这些信息之后就可以预测在原图中是否有目标。在上图中,14点对应的75维向量对应于原图中第一块,那么它就负责这一块的区域的目标预测;首先,如果75维中第1个bounding box的信息为: 最后说明一点:上面的过程只是在训练好的基础上进行的目标预测,而对于训练过程来说,其数据集的每张图片已经标注过,即已经知道每张图片中目标的位置及类别信息(称为先验信息),且也是编码为75维的向量形式,在训练时,由于模型参数是随机的,每张图片的目标预测可能是非常不准确的,这个时候,需要把网络的预测结果与真实的先验信息求Loss,然后通过反向传播不断求梯度,降低Loss,从而优化模型的参数,当Loss足够小时,说明模型的效果就比较好了,这时就可保存模型及其参数,用于对某张图片的目标检测。 |
|