YOLO详解参见地址:
YOLO1:https://blog.csdn.net/qq_32172681/article/details/99418000
YOLO2:https://blog.csdn.net/qq_32172681/article/details/99482044
YOLO3:https://blog.csdn.net/qq_32172681/article/details/99595621
一、YOLO1
1、目标检测主要思想
与RCNN系列不同,YOLO把目标检测看作一个回归问题,直接用一个网络进行分类和框回归。
具体做法是:将image划分为S*S个网格,每个网格预测B个bbox的位置(x、y、w、h)、置信度(confidence为交并比)、类别概率。输出维度为S*S*(B*5+C),C为类别数。无论网格中包含多少个boxes,每个网格只预测一组类概率。测试时,将条件类概率和预测框的置信度乘起来,表示每个box包含某类物体的置信度,这个分数可以将box中的类别可能性和预测精确度同时表示出来。
2、整体网络结构
基本网络模型为GoogLe Net,但未使用它的inception模块,而是交替使用1*1和3*3卷积层
卷积层提取特征,全连接层预测类别和框位置回归,共24个卷积层,2个全连接层
3、子网络:预训练分类网络,输入图像大小为224*224
前20个卷积层 + 1个全局平均池化 + 1个全连接
4、子网络:目标检测网络,输入图像大小为448*448
前20个卷积层 + 4个卷积层 + 2个全连接 + 1个全连接(预测类别 / 框位置)
5、损失函数(平方和损失函数)
包括4部分:框中心位置x,y损失 + 框宽高w,h损失 + 置信度confidence损失 + 分类loss
公式看不懂,可以戳YOLO1详解:https://blog.csdn.net/qq_32172681/article/details/99418000
6、YOLO1优点:
- 速度快。看作一个回归问题,不需要复杂的pipeline。
- 对图像有全局理解。用整个图像的特征去预测bbox,而不是像RCNN,只能候选框的特征预测bbox。
- 候选框的数量少很多,仅7*7*2=49个。而RCNN的selectlive search有2000个,计算量大。
7、YOLO1缺点:
- 每个网格只预测2个bbox,限制了模型预测物体的数量。
- 多次下采样,边界框预测所使用的特征是相对粗糙的特征。
二、YOLO2
1、改进一:检测更多种类的目标
利用大型分类数据集ImageNet扩大目标检测的数据种类,可以检测9000种类别的目标(YOLO1仅20种)
2、改进二:批标准化BN
- 让梯度变大,避免梯度消失
- 收敛更快,训练过程更快
- 不是应用在整个数据集,有噪声,提高模型泛化能力
3、改进三:用高分辨率图像训练分类网络
YOLO1分类网络输入图像大小为224*224,目标检测网络输入图像大小为448*448,因此YOLO1需要同时完成目标检测任务和适应更高分辨率图像的任务。
4、改进四:借鉴RPN的anchor boxes,有先验知识,预测更快
5、改进五:用k-mean聚类算法,得到YOLO2的先验框piror boxes
用k-mean聚类算法,让模型自动选择更合适的先验框长、宽(YOLO1是人工指定的,带有一定的主观性)
自定义聚类算法的距离矩阵:,centroid是聚类时被选为聚类中心的框,box是其他框。
6、改进六:将预测的偏移量限制在一个网格范围内,模型更稳定
预测的是预测框中心相对于网格单元的偏移量,使用logistic将预测值限制到0-1范围内,这样框偏移就不会超过1个网络(RPN预测anchor box和预测框bbox的偏移量,有可能偏移量很大,导致模型不稳定)
7、网格为每个bbox预测5个偏移量:tx,ty,tw,th,to
设网格左上角偏移图像左上角的距离是cx,cy,且piror bounding(模板框)的高、宽为ph、pw。
预测框坐标计算如图:
8、改进七:提出passthrough层,有利于小目标检测
前一层26*26*512特征图分为4份,串联成4个13*13*2048的特征图,再与后一层的13*13*1024特征图串联,得13*13*3072特征图。
9、改进八:多尺度输入图像进行训练
FCN网络,不固定输入大小
10、分类网络模型(YOLO2自己的模型):Darknet-19
类似vgg,最后使用全局平均池化,每个特征图得到1个值,再用全连接会少很多参数。
Darknet19:19个卷积层 + 5个池化层,最后一个全局平均池化层输出1000类别(没有使用全连接层)
11、目标检测网络模型
去掉分类网络最后一个1000类输出的卷积层,再加上3个3*3卷积层,每个3*3后都有1个1*1卷积层,最后1个3*3*512和倒数第2个3*3*1024之间添加一个passthrough层,得到更精细的结果,最后一个1*1层输出结果。网络结构图略。(这里貌似新加了11层)
12、混合分类和检测数据集,联合训练分类、检测网络
YOLO2提出一种联合训练机制,混合来自检测和分类数据集的图像进行训练。当网络看到标记为检测的图像时,基于完整的yolov2损失函数进行反向传播。当它看到一个分类图像时,只从特定于分类的部分反向传播损失。
三、YOLO3
1、多标签检测
每个框中可能有多个类别物体,而softmax只能用于单分类,因此换成sigmoid,sigmoid可以做多标签分类。
2、结合不同卷积层的特征,做多尺度预测
将当前层上采样的特征图,加上上层的特征图,得到一个组合特征图,再添加一些卷积层来处理这个组合的特征图,这样可以预测更细粒度的目标。
3、网络结构(DarkNet53 = DarkNet19 + ResNet)
- 结合残差思想,提取更深层次的语义信息。
- 仍然使用连续的3×3和1×1的卷积层。
- 通过上采样对三个不同尺度做预测。如将8*8的特征图上采样和16*16的特征图相加再次计算,这样可以预测出更小的物体。
- 采用了步长为2的卷积层代替pooling层,因为池化层会丢失信息。
4、预测更多目标
用k-mean均值聚类算法为每个网格预测9个模版框,样可以提高recall(YOLO2有5个,YOLO1有2个)
5、损失函数
使用交叉熵损失函数进行类别预测(YOLO2用的是平方误差)