Yolov3理论详解
Yolo系列采用了one-stage的识别方案,故名思意,就是一个阶段,图像进来之后,卷积提取特征,到和labels计算损失,他就一个阶段。相教于fasterrcnn,masterrcnn等需要生成大量候选框的two-stage方案,在识别速度上还是比较到位的,这样就使得它非常的实用,传说被美军应用在了导弹识别方面,传说的很玄乎,也确实,无论在速度还是准确率,yolov3都做的非常不错。
YOLOV3和retinanet模型在速度和map值的对比,yolov3用了很短的时间就达到了很高的map我们看下yolov3的结构,先附上一张整体结构图。
YOLOV3整体结构图从上到下我们走一遍YOLOV3流程。
1.A位置,当图像输入进来以后,图像的尺寸并不是正方形的,为了后面的计算方便,我们首先把他转换成能被32整除的正方形。为什么是32,整个网络要经过16次放缩变换(步长为2的卷积操作{替代池化}),最后得到的特征图尺寸是11*11 或者12*12或者14*14这样的方格。每次转换称的正方形图像并不是固定尺寸,这样就增强了网络适应不同大小图像的能力.
2.B位置, 一个conv2d是Convolution卷积+Batch Normalization+Leaky_relu激活的组合。Batch Normalization归一化替代正则,提升模型收敛速度。Leaky_relu软路激活解决了relu激活时负数不学习的问题。
从A位置进来416*416*3的图像,经过了32(32个卷积核)*3*3(卷积核的尺寸3*3) 步长为1的卷积操作之后,变成了416*416*32的输出。
3.B到C过程中,我们看到图像尺寸从416*416转换成208*208,中间有一层步长为2的卷积层,来替代池化层。比单纯的用池化层效果要好一些。
4.C位置,这里是卷积和残差连接的组合,yolov3的残差连接是同模块内的残差连接,shape相同才能连接。
C位置以下的resnet层 ,我们就不再说明了,原理和连接都是一致的。越往下,特征图的尺寸约小,特征核的层数越多。
5.我们看下E位置的尺寸是13*13*1024,D位置的尺寸是26*26*512 ,越往下的层越能识别大物体,而上面的层越能识别小物体,我们把上下两层相加,使得它同时具备了识别大物体和小物体的能力。上下两层即E层和D层怎么融合呢,我们把E层上采样,变成26*26*256,这样他就能和D层首尾相连进行拼合了。
6.拼合以后我们看到到了F位置,注意F位置的尺寸 (batch_size,26,26,75),分类数是 70 ,这里却是75,多出来的五个就是,x,y,w,h,conf(是物体与不是物体的判断)。
F位置YOLO层7.YOLO层是一个预测值和Lables目标值相减求损失的层。
yolov3一共有三个YOLO层分别去训练网络,为什么有三个,较小的特征图有比较大的视野,教大的特征图有比较小的视野,这样yolo3就拥有了既能识别大目标也能识别小目标的能力,同时,一个点既能是一种分类,也可以属于另外的分类.
8.好了,pytorch执行loss.back(),反向传播,就开始训练了。