【深度学习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 v3总的详细结构图,由于图片太大,不便于直接放在博客里。
YOLO v3有三个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255。
YOLO v3一般使用大小的图片作为输入,最后得到的特征图为,再大一些的特征图为,再大一些的特征图为。
YOLO v3在使用数据集训练时,如果数据集目标检测有20个种类,YOLOv3中每个cell有3个box,每个box还有 五个基本参数,所以。如上面右边图的输出特征图所示。
对于416*416的图片,YOLOv2的bounding boxes有个,YOLOv3的bounding boxes有个。
YOLO-v3先验框
YOLOv3最大的改进就在其结构上的改进。使用的基础结构为Darknet53+多个尺度的特征图,来预测最后的结果。如上面描述所示。同时先验框也是一个重要的改进。
YOLOv3有三个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255。
YOLOv2已经开始采用K-means聚类得到先验框的尺寸,YOLOv3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:。
分配上,在最小的 特征图上(有最大的感受野)应用较大的先验框 ,适合检测较大的对象。中等的 特征图上(中等感受野)应用中等的先验框 ,适合检测中等大小的对象。较大的特征图上(较小的感受野)应用较小的先验框 ,适合检测较小的对象。
特征图 | 13*13 | 26*26 | 52*52 | ||||||
---|---|---|---|---|---|---|---|---|---|
感受野 | |||||||||
先验框 | (116×90) | (156×198) | (373×326) | (30×61) | (62×45) | (59×119) | (10×13) | (16×30) | (33×23) |
如上面左边的图所示,在 的特征图中,负责检测大的物体(如蓝色的先验框所示),在 的特征图中,负责检测中等的物体(如蓝色的先验框所示),在 的特征图中,负责检测大物体(如图中比较小的先验框)。
如上面右边图展示的是,每个先验框都有对应的值(如85或25),前五个值包括位置值的偏移和置信度 , 后面的值即为类别的概率值。
YOLOv3代价函数修改
YOLOv3对类别预测的代价函数进行了修改,但是没有使用softmax。首先说明一下为什么不用softmax,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要和woman和person两个类,这就是多标签分类。
所以YOLOv3用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输出约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就代表属于该类,这样一个框就可以预测多个类别。代价函数用的是sigmoid的交叉熵。
YOLOv3结果
YOLOv3的结果其实已经非常好了,不管在检测的速度上和检测的精度上。