YOLO v3

yolo为you only look once.

是一个全卷积神经网络(FCN),它有75层卷积层,包含跳跃式传递和降采样,没有池化层,当stide=2时用做降采样。

yolo的输出是一个特征映射(feature map)

Yolo是将输入图像划分为sxs个格子,每个格子越策b个bounding box,每个bbx有5个系数。

s的取值为输出特征映射的最低维度,例如输入图像为416X416,则输出特征映射为13x13(具体算法为416,208,104,52,26,13,每次降采样相当于图像大小减小为原来的一半)

其中:cx,cy是网格左上角坐标,pw,ph表示bbx的size,bx,by,bw,bh是预测得到的bbx的中心坐标和size,tx,ty,tw,th是模型的预测输出。

预测框的大小判定:例如某目标的置信度为(0.3,0.8),而最小特征映射为13x13,则预测框的大小为(13*0.3,13*0.8)

yolo v3预测是从3个不同的尺度上预测的。

 以416x416大小的图片为例,yolo v3将输出((52*52)+(26*26)+(13*13))*3=10647个bbx,如何从这么多的bbx预测出我们的目标,我们采用两步,1是阈值,忽略置信度小于阈值的框;2,非极大值抑制。

 

pytorh实现yolo

1.创建一个文件,命名为darknet.py,    darknet是yolo基础框架的名称。这个文件中包含yolo的框架的代码。用一个名为util.py的文件对其进行补充,util.py文件中包含一些函数

2.配置文件,从网址https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg下载文件,保存到检测器文件中的cfg文件夹里。

    配置文件里有卷积层和快捷层,快捷层是跳过连接。

    YOLO中共有五种层:卷积层、快捷层、降采样层、Route(路线)、YOLO层、Net层

    Route层的参数具有一个或两个值,当只有一个值时,它输出由该值索引的层的特征映射,比如该值为-4,则输出该层向后的第4层的特征映射。当该值有两个时,则输出其值的索引层的特征映射。比如当值为-1,64时,则输出为上一层和上64层的特征映射,并沿深度维度连接。

卷积层参数如上所示。

快捷层参数如上所示。

降采样层参数如上所示。

路线层如上所示。

YOLO层参数如上所示。

Net,cfg文件中的一种块,不是层,因为它只是描述一些输入和训练的参数的信息。在之前的YOLO中没使用,

iou计算:

iou相当于两个边界框重叠部分占两边界框总面积的比例,iou数值超过阈值,则除掉具有较低类置信度的边界框,保留具有较高类置信度的边界框。

 

 

调整图像大小还要保持纵横比的方法是填充左侧部分。

coco.name.txt文件中包含数据集中对象的名称。

pytorch的输入图像格式是批次-通道-高度-宽度,图片通道的顺序是RGB

原程序中共106层,

posted @ 2019-01-07 11:12  小小小小小码农  阅读(764)  评论(0编辑  收藏  举报