YOLO V3 (一)

https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/

首先明确,YOLO 是一个全卷积网络(fully convolutional neural network,FCN),其中的下采样操作并不使用pooling层,而是使用步长stride=2的卷积操作代替,以避免对于低阶高分辨率特征图的信息损失。YOLO仅包含卷积层,步长卷积层(下采样层),上采样层和跳跃连接层(skip connection layer)

YOLO采用了全卷积结构,我们知道,采用全卷积的网络结构(就是说不包含任何全连接的操作)是可以使用输入图像为任意地空间分辨率的,但是对于目标检测网络而言,还是需要输入图像分辨率固定,这是因为,基于anchor的(包括RPN中的anchor设计和所有one stage detector的anchor设计)物体检测,对于anchor的面积和宽高比的设计非常重要,它非常依赖于数据集。还需要明确的一点是,同一个batch size中的训练图像的分辨率必须相同。YOLO经典的图像空间分辨率设置成416,网络最大的下采样倍数为32,则最终将会得到13*13的特征图。网络的步长指的是:当前层特征图的空间分辨率是输入图像空间分辨率缩小了多少倍。

对于卷积网络最终输出的卷积特征图(即送入classifier或者regressor中的包含丰富语义信息和空间位置信息的特征图,称为feature map),YOLO V3使用1*1卷积核作为classifier/regressor,其中分类器和回归器共享卷积特征图,使用kernel size=1*1 output channels=(#anchor_per_cell)*(C+1+4),经过这个1*1卷积核输出的特征图被称为prediction map,可以看出prediction map和feature map具有相同的空间分辨率,相当于对于 img_size/output_stride  (img_size表示原始输入图像的空间分辨率,output_stride表示特征图空间分辨率相对于输入图像分辨率的缩小倍数),则特征图的空间分辨率为img_size/output_stride,对于特征图上的每一个像素点,它将对应到输入图像上的一个图像块(image patch),相当于把输入图像划分成了 f_m*f_m 个网格(grid cell),其中输入图像每个网格所对应的卷积特征(实际上是卷积特征向量,对应于卷积特征图上的一个像素点)代表了对于输入图像上的对应位置处的图像块所提取的卷积特征,用这个卷积特征向量来预测(原始输入图像上对应位置)图像块中可能有的C个类别的object,其中的1表示objectness score,表示在特征图的当前cell中,是否有ground truth boxes的中心位置点(center_x,center_y)落在该网格的感受野上(感受野是指特征图上的一个像素点网格对应到输入图像的一个图像块的位置),#anchor_per_cell表示每个网格能够预测的bounding boxes数,每个bounding boxes具有C+5个属性:分别表示对于C个类别的类别置信度,bounding boxes的objectness score,以及坐标位置偏移量。YOLO V3模型对于每个网格预测3个bounding boxes。

一、bounding boxes prediction :center_x center_y width height

假设输入图像分辨率416*416,网络stride=32,特征图维度为13*13,则需要将输入图像划分成13*13个网格cell,如果ground truth boxes的中心点位置落在了cell中,则cell就负责预测那个ground truth boxes,其中,由于我们在每个cell设定了3个anchor boxes,则说明YOLO V3预测的是最多允许有3个ground truth boxes的中心点落在同一个网格中,而具体由哪个anchor boxes负责预测当前的ground truth boxes,则要看哪个anchor boxes与ground truth boxes的Iou最大。

为什么object detector都不直接预测bounding boxes的绝对坐标值和绝对宽高,而是设定anchor boxes,预测ground truth boxes相对于anchor boxes的偏移量,这是因为直接预测绝对数值可能会带来梯度的不稳定性。

其中,t_x,t_y,t_w,t_h表示网络模型预测输出的数值,此时只是经过1*1的卷积操作,并没有经过任何的激活函数作用,c_x,c_y表示当前cell的左上角顶点位置值,即在特征图空间分辨率上cell的左上角位置,由于YOLO V3是希望cell中的anchor boxes预测出的是中心点落在当前cell中的ground truth boxes,故而在grid cell特征图的分辨率上,中心点的范围定然是 (c_x,c_y)~(c_x+1,c_y+1)范围内,故而对于1*1的卷积操作输出值再进行sigmoid激活函数作用,将值域归一化到0-1,p_w,p_h表示anchor boxes的宽和高,预测log对数值t_w,t_h。

二、objectness score prediction

objectness的ground truth value实际上表示的是当前cell处的当前anchor boxes是否需要负责预测某个ground truth boxes,故而相当于预测前景概率值,在RPN中是由卷积网络预测出两个数值——前景分数和背景分数,然后经过softmax函数激活操作,但是在YOLO V3中只预测一个前景置信度(概率),故而对于1*1卷积输出值进行了sigmoid激活函数操作。

二分类问题:

1.以sigmoid作为激活函数:二分类单输出

扫描二维码关注公众号,回复: 5275314 查看本文章

2.以softmax作为激活函数:二分类二输出

三、class confidences

经过1*1卷积操作后,再进行softmax激活。

四、在不同尺度的特征图上进行预测

YOLO V3在3个不同尺度的特征图上进行预测,分别是output stride=32,outpu stride=16,output stride=8.其中使用了FPN结构,这需要输入图像的分辨率能被32整除。

YOLO 预测的bounding boxes个数:

((52*52)+(26*26)+(13*13))*3=10647

猜你喜欢

转载自blog.csdn.net/WYXHAHAHA123/article/details/87734224