知乎yolo系列学习笔记

上篇

一般分类模型简述:
包括三部分:前向传播部分、损失函数部分和反向传播部分;
输入为一张图片,通常我们用一个矩阵来表示。输出为一个one hot向量,代表目标属于哪一个类别。中间的过程通常为cbrp的叠加,最后加上全连接层(分类头或者决策层)。

1.当一幅图像中有多个目标时,这时候我们如何输出多个目标的检测框,甚至在未知目标个数的时候。。这时考虑到将特征图划分区域,让每一个区域负责回归一个检测框。如果一个小区域存在多个目标时,可以考虑将区域划分的更细致,但这并不能从根本上解决问题。

如何从这些区域的检测结果中删选自己想要的,两种思路:聚类和NMS,但是采用聚类的时候我们必须要确定目标的个数,当两个目标本身就比较接近的时候无法解决。非极大值抑制则是当两个框重合度较高的时候,只取confidence较高的框。

2.多目标的问题大致解决,那多类的呢?再加上一列one hot 向量。这时候损失函数就包括三部分,检测框回归(定位)损失、分类损失和置信度损失。

3.小目标的检测。针对 每个区域,产生两组回归。也就是每个区域输出两个五元组(x,y,w,h,c)。一个负责回归大目标,一个负责回归小目标,同样添加one hot vector表示目标属于哪个类别。(两个框对应的是同一类别)

yolov1代码解读
定义特征提取层:构建VGG网络,操作包括提取特征(layer包括池化、卷积、BN和激活函数)、全局池化、分类决策(linear-Relu-dropout-linear)。

模型训练:构造迭代器-在迭代过程中取输入、标签和输出,计算并回传损失—优化迭代

数据处理:从batch中获取label,将box的信息进行归一化处理,算出box的重心点坐标,如果存在与某个grid,就将其cat起来。

中篇:

1.在yolo v1中预测的是最后的结果,这样会导致模型刚开始训练时不稳定,因此改为预测偏移量,计算gt框的中心点与网格的左上角点的偏移带入公式计算预测量x,y,计算anchor与gt的log宽高比代入公式计算w,h.因此yolov2实际上是计算anchor框的宽和高和grid的先验位置的偏移量.位置上使用grid,宽高上使用anchor)
2.目标找不到的问题。将77的区域改成1414的区域,划分的更细致,每个区域对应5个anchor,每个anchor对应一个类别。其中每个anchor的大小是通过聚类来确定的。损失函数的改进:confidence的真值变为0和IOU,piror相关的预测只取前12800个。
3.yolov3对输入图像进行8、16、32倍的下采样,得到不同尺度的输出,分别预测大中小目标。cnn提取特征后得到三个分支,每个分支预测三个框,每个框预测5元组和80个one_hot向量。 确定prior时依然使用K均值聚类。使用多标签进行分类,采用多个逻辑分类器代替softmax函数,以计算输入属于某个特定标签的可能性。
4.正负样本的确定:如果边界先验框(anchor)与GT框比其他目标重叠多,则相应的目标性得分是1;对于其他iou>=0.5的先验框不计算损失;每一个GT框只与一个先验边界框相关联,如果未关联到,只会有置信度损失,不会有分类和定位损失。总结:与gt有最大iou的prior框为正样本,iou<0.5的为负样本,iou>0.5但不是最大的为忽略的样本.
5.yolov4采用多个anchor负责一个GT,只要iou大于阈值即可,也就是anchor的数量不变,但是选择的正样本的比例增加,缓解了正负样本不均衡的问题。采用DIOU loss计算损失,可以直接最小化两个目标框的距离,计算公式=1-IOU-预测框与真实框的中心点之间欧式距离的平方和 与 包含两框的最小框的对角线距离的平方 的比。

yolo系列的backbone的对比(下篇)

yolov1的backbone是GoogleNet,将特征图分为77的网格 ,采用的是大量的卷积层,后面跟上两层全连接层,网络不断变宽。按照feature map的分辨率画出一块一块的卷积。
yolov2中采用两个3
3的卷积代替了yolov1中77的卷积,目的是可以使得参数量更小,节约模型。网络做得更深就可以更好的提取特征 ,这是因为每经过一次卷积,后面都会接上一个非线性激活函数,这样可以增强模型的非线性能力。此外还采用了bottleneck结构,33的卷积负责扩大感受野,11的卷积负责减少参数量。 yolov1中的全连接层被global average pooling代替,满足了输入不同尺度的image的需求,不论输入图片多大,最后都可以映射为 10001;还有一点需要注意的是,输入图像的大小有所改变,这有助于创建奇数空间维度。目标的中心点往往落入图片的中心位置,这样可以更容易确定目标所属的位置,此时使用特征图中心的cell去预测目标的bounding box更容易些。
yolov3的关键在于将一个分支拓展为了三个分支,可以有效针对大中小物体进行检测。对特征图进行五次下采样,再回传进行拼接,分别得到下采样8,16,32的feature map。

你可能感兴趣的:(#,目标检测)