YOLO系列算法学习
YOLOV1算法
预测阶段(前向推断)
yolo基准模型和tiny模型结构
基准模型
为什么是7x7x30的输出?
流程可视化
预测阶段后处理-NMS非极大值抑制
两个bboxs分别和20个类别的置信概率相乘,可以得到该框对应的真正类别
对应49个patch,分别得到对应的两个bboxs的对应类别的概率
怎样只在结果图中展示出正确的类别?
基本流程如下
先使用非极大抑制,通过遍历的方法,每次让置信概率最大的和后面全的框进行IOU比较,如果大于0.5(设定好的阈值)就让该框的值为0,遍历一遍之后,在从头进行剩下的元素第二大的进行比较,知道全部比较完成。
通过上面的筛选之后,获得到关于类别的稀疏矩阵,之后在竖直方向上比较,进行筛选最大的类别概率获得结果,对应正确的bboxs留在图中即可
训练阶段(反向传播)
一个方块(grid cell)生成两个bboxs,两个虚线是生成的bboxs,实线是Ground Truth,其中两个框中和Ground Truth IOU大的尽可能拟合Ground Truth
没有Ground Truth落入grid cell时,该grid cell生成的bboxs都被舍弃
Loss函数
这是回归损失函数,将目标检测当成回归问题
论文细节
对比faster-rcnn
基于faster-rcnn的模型融合
下游任务表现好
YOLOV2-YOLO 9000:Better,Faster,Stronger
回顾
增加的trick(Better)
Batch normalization
High Resolution Classifier
适应大分辨率,先在224x224数据上训练一会,在使用resize的448x448数据上训练10epoch,再使用目标检测数据集上进行训练
Anchor 、Dimension Clusters 、Direct location prediction
其中V1中的bboxs在选定的时候没有任何限制和规则,例如图中的人和汽车的bbox都是相同的
改进后的bboxs选定有初始设定,一个细长,一个矮胖,两个分别识别不同类型的物体,细长倾向于高的目标,矮胖的倾向于低长的目标
分成13x13的grid cell,使用五种初始bboxs
feature map设定为奇数长宽,而不是使用偶数,因为奇数会有一个中心的grid cell,
输出向量结构改变,因为一次性会生成五个框,所以这里是(4+1+20)*5=125
anchor的大小怎样设定?
对两个目标检测数据进行了kmeans聚类,发现当选择5时性能折中 (蓝框是coco数据集框,黑框为VOC数据集)
对grid cell的选择进行归一化(0,1)之间,预测中心店约束在grid cell 内,使用sigmoid函数。
宽和高允许更大
防止野蛮生长,全图乱标
YOLOV2损失函数
Fine-Grained Features(细粒度特征)
整合不同尺度信息,底层细粒度特征和高层信息融合,有利于小目标物体检测
Multi-Scale Training
训练时每经过10个epoch更换输入图像大小,
可以通过调整不同大小的图像,提升精度,选择一个合适的size配比
trick总结
Faster
更换骨干网络
Darknet结构(分类和检测结构)
Stronger(类别更多)
将coco数据集和Imagenet数据集联合训练
分级完成softmax
对imagenet类别重新划分
同等级的进行softmax
树状分类
YOLOV3
性能展示
Backbone骨干网络–Darknet-53
去掉分类头之后就变成了一个全卷积网络,输入大小不受限制
YOLOV3网络结构
分别融合32倍、16倍、8倍下采样
上采样使用差值法扩展图像
不同尺度对应的anchor box
不再使用那个anchor的中心点落在那个grid cell里,而是选择那个anchor和ground truth的IOU最大
YOLOV3损失函数
训练过程
测试过程
YoloV3-SPP
Mosaic图像增强
使用四张图像进行拼接输入
一次性输入四张等同于batch-size为4,BN可以一次性统计多张图片的参数
SPP模块
添加一个spp层和三个的对比
Ciou Loss
iou的发展
IOU loss
GIou Loss
其中AC代表两个框中对应的最小边界矩形框,u为两个框的并集,有效避免了不相交loss为0的情况
但是当两个框处于水平或者垂直的情况时,Giou会退化为Iou
Diou loss
其中d是两个框中心点的距离,c是大框的对角线距离
Ciou loss
三个角度考虑:重叠面积、中心点、长宽比
Focal Loss
其中 α \alpha α代表的不是比例系数,而是一个超参数,主要作用是平衡正负样本的比例
论文中提出的公式
这里我们一般希望 p t p_t pt越大越好,对应的,到正样本中p则是越大越好,负样本中P越小越好
展开详细的,并添加 α \alpha α效果相较之前会有些许提升
效果
其中rate是指将原先的样本数量缩小多少倍
CE损失为常用的方法
FL为本文提到的focal loss
三种颜色代表区分的难易程度,越难学习的样本,降低的倍数越少
使用Focal loss有两点需要注意:
1、调参比较麻烦,调不好效果差
2、标注数据尽量不要出错,否者会出现疯狂学习错误特征的情况,整个网络效果会变差
YOLOV4
网络结构
在Darknet53的基础上使用了CSP结构
cspnet结构是将输入特征图均分,在yolov4中是融合到输入的一半(卷积核步幅为2),并没有均分
下面downsample3-5和2相同
添加SPP结构
PAN结构
整体网络结构
优化策略
Eliminate grid sensitivity
原始方式
这种情况如果gtboxs的中心在一个grid cell的左上角,也就是 C x , C y C_x,C_y Cx,Cy,原本的计算公式很难到这个值
优化之后
Mosaic data augmentation
IoU threshold(match positive samples)
V3中的用法
V4的用法
由于V3中的做法生成grid cell对应anchor template正样本量太少,所以对应右下角的计算公式,旁边两个grid cell也是符合要求的,因此将这两个的对应anchor temple也设置成正样本,扩充正样本量。
对应的最后一种只会使用一个框,尽量避免公式中缩放的极限-0.5和1.5情况的出现
Optimizered Anchors
CIOU
YOLOV5
模型效果
网络结构
数据增强
Mosic
Copy paste
Random affine(仿射变换)
MixUp(将两张图片按照一定的透明度混合在一起)
只有10%的概率会启用
Albumentations(需要单独下包,默认不安装该包)
滤波、直方图均衡化以及改变图片质量等等
Augment HSV(Hue,Saturation,Value)
Random horizontal flip
训练策略
Multi-sacale training(0.5~1.5x)
输入图像会被缩放到0.5倍到1.5倍之间整数倍
AutoAnchor(For training custom data)
等同于迁移学习,如果输入数据分类不合理,会自动通过聚类重新标注
Warmup and Cosine LR scheduler
训练初期热身,学习率根据cosin的方式下降
EMA(Exponential Moving Average)
学习参数加入动量,整个流程更平滑
Mixed precision
启动可以减少显存占用,加快训练,使用需要含有TensorCores的GPU才支持混合精度训练
Evolve hyper-parameters
调参方式
损失计算
其中的Objectness loss和v3的不太一样,v3及以前的使用的是非0即1,这里使用的是与GT的Ciou
平衡不同尺度损失
P3,P4,P5对应不同大小目标,小、中、大
消除Grid cell 敏感度
对比之前的方法,v5在长宽的基础上做了限制,不变之前长度和宽度可能会出现爆炸性增长,使用sigmoid修改之后将大小限制在0-4之间,避免了这种问题
匹配正样本
anchor_t=4的设置是因为上面敏感度的设置将长宽限制在0~4
匹配的时候通过左边的公式计算,如果 r m a x r^{max} rmax小于4,则匹配成功,否者失败
接下来得到正样本的方法和之前一样,扩充正样本数量
YOLOX
概述
旷世研究院新作
对于两种网络怎么选择?
对于小分辨率,640x640大小,二者都可以进行尝试,如果是大分辨率图像最好使用V5,因为yolox在官方仓库中为提供大分辨率的检测
网络结构
解耦的分类头
V5的检测头
yoloX的检测头