1、YOLO1
具体做法:将image划分为S*S个网格,每个网络预测B个bbox的位置(x,y,w,h)、置信度(confidence为交并比)、类别概率。输出维度为S*S*(B*5+C),C为类别数。无论网格中包含多少个boxes,每个网格只预测一组类概率。测试时,将条件类概率和预测框的置信度乘起来,表示每个box包含某类物体的置信度,这个分数可以将box中的类别可能性和预测精确度同时表示出来。
基本网络模型为Google net,但未使用inception模块,而是交替使用1*1和3*3卷积层。
损失函数:框中心位置x,y损失+框宽高w,h损失+置信度confidence损失+分类loss
优点:
1)速度快。看作一个回归问题,不需要复杂的pipeline
2)对图像有全局理解。用整个图像的特征去预测bbox,而不像RCNN,只能候选框的特征预测bbox
3)候选框的数量少很多,仅7*7*2=49个。而RCNN的selective search有2000个,计算量大
缺点:
(1) 每个网格只预测2个bbox,限制模型预测物体的数量
(2) 多次下采样,边界框预测所使用的特征是相对粗糙的特征
2、YOLO2
(1) 批标准化
让梯度变大,避免梯度消失;收敛更快,训练过程更快;不是应用在整个数据集,有噪声,提高模型泛化能力
(2) 借鉴RPN的anchor boxes,有先验知识,预测更快
(3) 用k-mean聚类算法,得到yolov2的先验框prior boxes
用k-mean聚类算法,让模型自动选择更合适的先验框长、宽(yolo1是人工指定的,带有一定的主观性),自定义聚类算法的距离矩阵:
centroid是聚类时被选为聚类中心的框,box是其他框
(4) 将预测的偏移量限制在一个网格范围内,模型更稳定
预测的是预测框中心相对于网格单元的偏移量,使用logistic将预测值限制到0~1范围内,这样框偏移就不会超过1个网格
(5) 网格为每个bbox预测5个预测量:tx,ty,tw,th,to
设网格左上角偏移图像左上角的距离是cx,cy,且模板框的高、宽为ph、pw。
预测框坐标计算如图:
Darknet19:19个卷积层+5个池化层,最后一个全局平均池化层输出1000类别
3、YOLO3
(1) 多标签检测
每个框中可能有多个类别物体,而softmax只能用于单分类,因此换成sigmoid,sigmoid可以做多标签分类
(2) 结合不同卷积层的特征,做多尺度预测
将当前层上采样的特征图,加上上层的特征图,得到一个组合特征图,在添加一些卷积层来处理这个组合的特征图,这样可以预测更细粒度的目标。
(3) 网络结构(DarkNet53=DarkNet19+ResNet)
结合残差思想,提取更深层次的语义信息
仍然使用连续的3*3和1*1的卷积层
通过上采样对三个不同尺寸做预判。如将8*8的特征图上采样和16*16的特征图相加再次计算,这样可以预测出更小的物体
采用步长为2的卷积层代替pooling层,因为池化层会丢失信息
(4) 预测更多目标
用k-mean均值聚类算法为每个网格预测9个anchor
(5) 损失函数
使用交叉熵损失函数进行类别预测(yolov2用的是平方误差)
4、YOLO4
Bag of freebies:
Pixel-wise调整 | 几何畸变 | Random Scaling、Random Cropping、Random Filpping、Random Rotating |
光照变化 | Brightness、contrast、hue、saturation、noise | |
遮挡 | Random Erase、Cutout、Hide-and-Seek、Grid Mask、正则(Dropout、DropConnect、) | |
多张图片进行增强 | Mixup、CutMix | |
GAN | Style Transfer GAN | |
数据分布不均衡 | 两阶段 | Hard Negative Example Mining、Online Hard Example Mining |
单阶段 | Focal loss | |
One-hot类别之间没有关联 | Label smoothing、知识 | |
BBox回归 | IOU loss、DIOU loss、GIOU loss、CIOU loss |
Bag of specials
即插即用模块 | 提升模型感受野 | SPP、RFB、ASPP |
注意力机制 | SE、spatial attention、point-wise attention | |
特征融合模块 | Skip Connection、Hyper Column、FPN(SFAM、ASFF、BiFPN) | |
激活函数 | RelU、LReLu、PRelu、ReLU6、SELU、Swish、Hard Swish、Mish | |
后处理方法 | Greedy NMS、Soft NMS、DIOU NMS | |
核心方法 | 创新点 | Mosaic数据增强方法 |
self adversarial training 自对抗训练 | ||
CmBN 改进了CBN | ||
Modified SAM 改进了SAM | ||
PANet 将shortcut改为concate | ||
其中没有详细展开backbone部分,其实backbone之前在解读CSPNet的时候就讲过了,yolov4使用的是CSPDarknet53作为Backbone.