YOLO-V3笔记

YOLO-V3模型结构

YOLOv3于2018年推出,基础框架为Darknet-53
还是很多卷积层的叠加,有特点的地方是使用了残差模块
第1个框内的残差模块重复1次,第2个框内的残差模块重复2次,第3个框内的残差模块重复8次等等。网络的总层数是53。
参考了SSD的做法,采用不同尺度的多个特征图的特征来获取这个预测框。用到了3个尺度的特征(Scale1、Scale2、Scale3),不同尺度的特征也是能够检测不同大小的物体。Scale1检测大的物体,Scale3检测小的物体,
YOLO-V3笔记_第1张图片
下图3个红色框内的是结果
YOLO-V3笔记_第2张图片
YOLOv3有3个不同特征尺度的输出,分别为 13 × 13 × 255 13×13×255 13×13×255 26 × 26 × 255 26×26×255 26×26×255 52 × 52 × 255 52×52×255 52×52×255
YOLOv3一般使用 416 ∗ 416 416*416 416416大小的图片作为输入,最后得到的特征图为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),适合检测较小的对象。
在这里插入图片描述
YOLO-V3笔记_第3张图片
每个k框有4个坐标值,1个object置信度,该框中的object属于80种物体的概率(Coco数据集检测80种物体),一共85个值。
YOLO-V3笔记_第4张图片

YOLO-V3代价函数修改

YOLOv3对类别预测的代价函数进行了修改,没有再使用softmax。首先说明一下为什么不用softmax,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类。如果用softmax,就只会选预测概率最大的那个类别,woman和person肯定有一个预测概率大,这样就只能检测到1个类别。
所以YOLOV3用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输出约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类(如果小于0.5,就表示属于该类),这样一个框就可以预测多个类别。代价函数用的是sigmoid的交叉熵。

YOLO-V3结果

YOLO-V3笔记_第5张图片
从上图可以看出YOLO-V3已经是非常好了,mAP和FPS这两项指标都达到了顶级的

你可能感兴趣的:(YOLO-V3笔记)