【深度学习YOLO系列】对YOLO v3的解读

最近我一直在攻读YOLOv3算法,想要深入了解YOLOv3算法,就需要先了解v1和v2算法,以下是我对v1和v2的解读。
YOLOv1的解读:《【深度学习YOLO系列】对YOLO v1的解读
YOLOv2的解读:《【深度学习YOLO系列】对YOLO v2的解读


YOLO v3模型结构

YOLO v3在2018年推出,基础框架为Darknet-53

【深度学习YOLO系列】对YOLO v3的解读【深度学习YOLO系列】对YOLO v3的解读

YOLO v3总的详细结构图,由于图片太大,不便于直接放在博客里。

YOLO v3有三个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255

YOLO v3一般使用416416416*416大小的图片作为输入,最后得到的特征图为131313*13,再大一些的特征图为262626*26,再大一些的特征图为525252*52

YOLO v3在使用数据集训练时,如果数据集目标检测有20个种类,YOLOv3中每个cell有3个box,每个box还有 (x,y,w,h,confidence)(x, y, w, h, confidence) 五个基本参数,所以3(5+20)=753*(5 + 20) = 75。如上面右边图的输出特征图所示。

对于416*416的图片,YOLOv2的bounding boxes有13135=84513*13*5=845个,YOLOv3的bounding boxes有3(1313+2626+5252)=104673*(13*13+26*26+52*52)=10467个。

YOLO-v3先验框

YOLOv3最大的改进就在其结构上的改进。使用的基础结构为Darknet53+多个尺度的特征图,来预测最后的结果。如上面描述所示。同时先验框也是一个重要的改进。

YOLOv3有三个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255

YOLOv2已经开始采用K-means聚类得到先验框的尺寸,YOLOv3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(13×13)(16×30),(33×23)(30×61)(62×45)(59×119)(116×90)(156×198)(373×326)(13×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)

分配上,在最小的131313*13 特征图上(有最大的感受野)应用较大的先验框 (116×90)(156×198)(373×326)(116×90),(156×198),(373×326) ,适合检测较大的对象。中等的 262626*26 特征图上(中等感受野)应用中等的先验框 (30×61)(62×45)(59×119)(30×61),(62×45),(59×119) ,适合检测中等大小的对象。较大的525252*52特征图上(较小的感受野)应用较小的先验框 (13×13)(16×30),(33×23)(13×13),(16×30),(33×23),适合检测较小的对象。

特征图 13*13 26*26 52*52
感受野
先验框 (116×90) (156×198) (373×326) (30×61) (62×45) (59×119) (10×13) (16×30) (33×23)
【深度学习YOLO系列】对YOLO v3的解读【深度学习YOLO系列】对YOLO v3的解读

如上面左边的图所示,在131313*13 的特征图中,负责检测大的物体(如蓝色的先验框所示),在 262626*26 的特征图中,负责检测中等的物体(如蓝色的先验框所示),在525252*52 的特征图中,负责检测大物体(如图中比较小的先验框)。

如上面右边图展示的是,每个先验框都有对应的值(如85或25),前五个值包括位置值的偏移和置信度 (x,y,w,h,confidence)(x, y, w, h, confidence) , 后面的值即为类别的概率值。

YOLOv3代价函数修改

YOLOv3对类别预测的代价函数进行了修改,但是没有使用softmax。首先说明一下为什么不用softmax,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要和woman和person两个类,这就是多标签分类。

所以YOLOv3用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输出约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就代表属于该类,这样一个框就可以预测多个类别。代价函数用的是sigmoid的交叉熵。

YOLOv3结果

YOLOv3的结果其实已经非常好了,不管在检测的速度上和检测的精度上。

【深度学习YOLO系列】对YOLO v3的解读