YOLO-V3笔记
YOLO-V3模型结构
YOLOv3于2018年推出,基础框架为Darknet-53
还是很多卷积层的叠加,有特点的地方是使用了残差模块
第1个框内的部分重复1次,第2个框内的部分重复2次,第3个框内的部分重复8次等等。网络的总层数是53
参考了SSD的做法,采用不同尺度的多个特征图的特征来获取这个预测框。用到了3个尺度的特征,不同尺度的特征也是能够检测不同大小的物体。Scale1检测大的物体,Scale3检测小的物体,
下图3个红色框内的是结果
YOLOv3有3个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255。
YOLOv3一般使用416x416大小的图片作为输入,最后得到的特征图为13x13,再大一些的特征图为26x26,再大一些的特征图为52x52。
论文中YOLOv3使用COCO数据集训练,COCO数据集目标检测有80个种类,YOLOv3中每个cell有3个box,每个box还有(x,y,w,h,confidence)五个基本参数。所以每个cell会产生3*(5+80)=255个值,这也是输出的通道数都是255的原因(13x13,26x26,52x52的特征图都一样)
对于416*416的图片,YOLOv2的bounding boxes有13x13x5=845个,YOLOv3的bounding boxes有3x(13x13+26x26+52x52)=10467个。
YOLO-V3先验框
YOLOv3有3个不同特征尺度的输出,分别为13×13×255,26×26×255,52×52×255。
YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:
(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116x90),(156×198),(373×326)。
分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116×90),(156×198),(373×326),适合检测较大的对象。中等的26x26特征图上(中等感受野)应用中等的先验框(30×61),(62×45),(59x119),适合检测中等大小的对象。较大的52x52特征图上(较小的感受野)应用较小的先验框(10×13),(16x30),(33×23),适合检测较小的对象。
每个k框有4个坐标值,1个object置信度,该框中的object属于80种物体的概率(Coco数据集检测80种物体),一共85个值。
YOLO-V3代价函数修改
YOLOv3对类别预测的代价函数进行了修改,但是没有使用softmax。首先说明一下为什么不用softmax,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类。
所以YOLOV3用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输出约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类,这样一个框就可以预测多个类别。代价函数用的是sigmoid的交叉熵。
YOLO-V3结果
从上图可以看出YOLO-V3已经是非常好了,mAP和FPS这两项指标都达到了顶级的