前言
yolo系列是目前应用范围比较广的目标的检测算法,经过几轮的改进,在实时性和检测效果上同比第一代yolo也有了较大提升,本文梳理一下yolo系列算法的改进思路。
YOLO
概述
在yolo之前,目标检测更多的是two-stage算法,即先筛选出部分候选框,在进行选择与分类,其中比较有代表性的网络为:faster-RCNN,mask-RCNN等。
you only look once,yolo系列是众多one-stage算法中比较有代表性的,one- stage使用单一网络完成定位与分类。
yolo框架思路
目标检测任务是定位出图像中的物体并说明物体是什么,yolo系列将其转化为回归问题,输入为图片,输出为x,y,w,h,c + 各分类概率
我们从v1 loss 入手看看它的设计思路:loss分为三个大部分:
位置损失、置信度损失、分类损失
位置损失比较容易理解,就是边框x,y,w,h; w,h 取平方根用来平衡大小框对损失影响大小的问题。
置信度指的是候选框内为物体还是背景的置信度,这里的C取值为0和1,图像中背景区域一般来讲远多于物体,lamda用来平衡该差异对整体损失的影响。
第三部分为分类损失。
后面的YOLO都基本按照这个思路进行优化。
YOLOV1
YOLO V1是YOLO的开山之作,它奠定了YOLO系列的基本框架。
基本思想
将图片划分为S*S个格子,每个格子2个预选框,若该格子中心包含物体,则该物体由该格子进行预测。
预测产生 S*S*(B*5+C)
yolov1中S=7,B=2,C为数据集类别数量。
网络结构
网络结构相对简单, gooleNet作为卷积网络,两层全联接网络进行映射。
基本过程
输入:448*448图像
网络预测边框分类及其置信度
NMS去处冗余框
不足之处
1.网络由于使用全连接网络,输入大小不可变。
2.预选框只有两个,对于密集重合以及小目标效果不佳。
YOLOV2
V2在V1的基础上通过一些较有创造性的trick,进一步提升效果与速率。
V2优化内容
- 去除全连接层,采用卷积与池化来进行预测,该网络结构的改进可以使用多尺度进行训练。
- 去除了全连接层也不再使用dropout来防止过拟合,使用Batch Normalization来替代。
- 优化损失函数,对位置的损失函数改用偏移量,更易收敛。
- 特征融合,除了使用最后一层特征图外,融合倒数第二层特征,改善V1对小目标效果较差的问题。
- 预选框使用K-means聚类得到,同比V1提前指定预选框,该方式更贴近数据集,更合理。
- 更大分辨率,有效提升MAP。
- 引入联合训练方式,即检测与分类联合训练,训练分类时,检测部分的loss不生效,为0。
网络结构
基本过程与细节
输入416*416
卷积网络
输出13*13*5*25
细节一:输入大小为32的奇数倍,保证最后框的大小为奇数,方便确定框的中心。
细节二: K-means聚类聚类距离为,1-IOU;规避大小框中心点距离差别大的问题。
细节三:优化loss函数,使用相对偏移量计算损失,计算的是预测框与预选框的偏移(anchor box),只有最接近ground truth的检测框进行损失的计算。V5每个格子5个预选框,同比V1召回明显增加,准确率下降,map略有下降。
YOLOV3
YOLOV3是极有标志性的一代,借鉴了ResNet的残差思想,大幅度提升了时效性与效果。
插曲佚事:V3是原YOLO作者的最后一代YOLO模型,因作者发现V3被用于军事,从此退出了相关研究。
网络结构
过程与细节
输入图像
卷积神经网络
多尺度预测
多尺度预测,
52*52 用于预测小目标
26*26 用于预测中目标
13*13 用于预测大目标
低层融合高层特征,提高中小目标的预测能力和预测效果
高层采用上采样,与中小两层进行拼接融合预测
取消池化层,使用卷积控制步长来进行下采样。
改进loss,使得yolo可以进行多标签预测。