you only look once
yolo是怎么预测bbox?
超详细的Yolo检测框预测分析 - 知乎 (zhihu.com)
怎么关联的?坐标狂
(166条消息) YOLOv3学习——特征提取与候选区域_天涯尽头黄鹤楼的博客-CSDN博客_yolov3特征图
一、yolov3训练预测流程:
非常好:
(166条消息) YOLOv3学习——特征提取与候选区域_天涯尽头黄鹤楼的博客-CSDN博客_yolov3特征图
1>·在3个尺度上进行预测,得到三个特征图。边长13:26:52,深度都是255。
2>特征图的每个点预测3个box,对应不同大小的anchor,每个box需要(x, y, w, h, confidence)
五个基本参数,还要有80个类别的概率,所以3×(5 + 80) = 255
,这个255就是这么来的。
实际总共有(52×52+26×26+13×13)×3=10647
个proposal box。
3>nms (只用在预测,训练所有框都要向ground truth靠拢)
按每个框的类别置信度排列anchor,再通过IOU递归选取不同的对象。
4>损失函数
分类、置信度、位置偏移量损失。 预测的置信度、位置偏移量相对anchor, 和anchor与标签的置信度偏移量进行计算损失,yolov4采用CIOU计算。
模型不再使用softmax函数作为最终的分类器,而是使用logistic作为分类器,使用 binary cross-entropy作为损失函数(使用sigmoid计算的xy, 物体置信度、类别置信度中均使用了交叉熵)
二、yolov5模型输出解析:
设输出图片大小为1280,768,类别个数为2,则yolov5输出的三种特征图,其维度分别为:[1,3,96,160,7],[1,3,48,80,7],[1,3,24,40,7];相当于yolov5模型总共输出(96*160+48*80+24*40)*3=60480个目标框;
其中,[1,3,96,160,7] 中1指代输入图像个数为1,3指的是该尺度下的3种anchor,(96,160) 指的是特征图的尺寸,7具体指的是:(center_x,center_y, width, height, obj_conf, class_1_prob, class_2_prob ),即分别为box框中心点x,y,长和宽 width,height,以及该框存在目标的置信度obj_conf,类别1和类别2 的置信度,若class_1_prob > class_2_prob,则该框的类别为class1;因此,obj_conf和class_1_prob一个指得是该框存在目标的概率,一个指是该框分类为类别1的概率;
二、yolov5后处理解析;
从一可知模型输出了60480个目标框,因此,要经过NMS进行过滤,进NMS之前需要经过初筛(即将obj_conf小于我们设置的置信度的框去除),再计算每个box框的综合置信度conf:conf = obj_conf * max(class_1_prob ,class_2_prob),此时的conf是综合了obj_conf以及class_prob的综合概率;再经过进一步的过滤(即将conf小于我们设置的置信度的框去除),最后,将剩余的框通过NMS算法,得出最终的框;(NMS中用到了我们设置的iou_thres);
YOLO 原理:
YOLO-YOLOV5算法原理及网络结构整理 - it610.com
一、FasterRcnn 先实现感兴趣区域生成,再进行精细的分类和回归,限制了速度。
二、yolov1 无锚框预测
1、网络结构
卷机神经网络
24个卷机层和两个全连接层。
细节:
3*3卷机后接一个通道数低的1*1卷机,降低计算量
都是激活函数 leaky relu ,最后是线性激活函数
训练使用dropout与数据增强来防止过拟合。
2、特征图意义
7*7*30 大小的特征图。
图像划分成7*7的区域,每个区域对应特征图的一个点,该点通道数为30,代表预测的30个特征。
每个区域内预测两个边框。
预测特征由类别概率、边框的置信度、边框位置组成。
1》类别概率:预测边框是哪个类别。
2〉置信度:该区域内是否包含物体的概率。两个框,两个置信度。
3》边框位置:中心坐标和宽高4个量。 两个边框8个值
细节:
1〉yolov1没有先验框,每个区域预测框的大小和位置,是回归问题。
2》两个边框公用一个类别预测。在训练时选取和物体iou大的框。在预测时,选取置信度高的一个框,所以最多检测出49个物体。
3》采用物体类别和置信度分开预测方法。而fasterrcnn背景当作一个类别,在类别预测中包含了置信度的预测。
不足:
1》只能49,有限制,挨着近的不行
2〉没有anchor,对于新的宽高比例的物体检测效果不好。
3》损失函数,大小物体损失占比失衡,定位不准确。
3、损失计算
原则:
1、与真实物体 iou大的为正样本,这个区域类别真值为真实物体类别,该边框置信度真值为 1
2、除了正样本,其余为负样本.负样本没有类别损失和位置损失,只有置信度损失,其真值为0
损失意义: 均使用均方差损失
1、正样本中心点坐标损失
2、正样本宽高损失
3、正样本与负样本的置信度损失。
4、正样本类别损失
三、yolov2依赖锚框
使用darknet网络结构。
darknet优化点:
1、BN层:解决梯度消失和爆炸问题。加速收敛、正则化。在每个卷机之后,激活函数之前。leakey relu
2、用连续的3*3 替代v1的7*7卷机,减少计算量,增加了网络深度。去掉全连接和dropout层。
3、深浅层特征融合,浅层变化13*13*2048,和深层13*13*1024的特征通道拼接。利于小物体检测。
4、每个区域预测5个边框,每个边框有25个预测值,分别20个类别预测、4个(中心xy,宽高wh)偏移量位置、1个置信度。v1是共享类别预测。
先验框设计
1、v2使用聚类
2、优化偏移公式
faster rcnn 预测的边框中心可以出现在图像任何位置,没有限制。
正负样本和损失函数
将预测的位置偏移量作用到先验框上,得到预测框的真实位置。
如果一个预测框和所有真实物体的最大iou小于一定阈值,该预测框为负样本。
真实物体中心点的区域和物体的iou最大预测框为正样本。
保证recall
损失计算:
1、负样本的置信度损失
2、先验框和预测框的损失
3、正样本的位置损失
4、正样本的置信度损失和类别损失。
工程技巧:
1、多尺度训练
接受任意尺寸的输入图片。
2、多阶段训练
darknet分类. 224*224
分类。448*448
检测 darknet passthrouth
改进:
先验框
不需要直接预测边框,而是预测先验框到真实框的偏移,降低预测难度。和预测值和先验框GT的真实值,求损失。
特征融合
v2不足:
1、虽然采用passrhrouth 采用一层特征图融合,小物体检测有限
2、太工程话,调参数太多
改进点:
1、YOLOv1并没有采用先验框,并且每个grid只预测两个bounding box,也就是整个图像只有98个bounding box。YOLOv2如果每个grid采用9个先验框,总共有13*13*9=1521
个先验框。所以最终YOLOv2去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率,同时对网络结构进行收缩让其运行在416*416
而不是448*448
。
2、Multi-ScaleTraining(多尺度图像训练)
区别于之前的补全图片的尺寸的方法,YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608}
,最小320*320
,最大608*608
,网络会自动改变尺寸,并继续训练的过程。
五、yolov3 多尺度与特征融合
1、网络结构darknet-53
DBL:卷机、BN、leaky relu
Res
上采样
concat
残差思想
多层特征图
无池化层
2、多尺度预测
输出三个尺度特征图,深层感受野大,有利于大物体,浅层有利于小物体。 类似FPN
沿用预选框,聚类,9个不同大小宽高的先验框,每个特征图的一个点需要预测3个框。感受野大的使用大的anchor.
优缺点:
优点:速度快、通用强、背景误检率低。
缺点:位置准确性差,召回率不高,对于遮挡和拥挤较难处理,无法高精度。
改进点:
1、v3中主要包含三种损失,即坐标的损失,置信度的损失、分类的损失。
为了实现多标签分类,模型不再使用softmax函数作为最终的分类器,而是使用logistic作为分类器,使用 binary cross-entropy作为损失函数(使用sigmoid计算的xy, 物体置信度、类别置信度中均使用了交叉熵)
YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:
六、yolov4
yolov4数据输入采用mosaic
1、网络结构
yolov4是CSP darknet53,yolov3是darknet53
yolov3中只有res结构,可以发现yolov4中,res只是CSPx结构的一小部分,CSPx中,一个分支进行过res残差结构,另一个分支,直接和残差结构的结构cat到一起。
base layer后面会分出来两个分支,一个分支是一个大残差边,另外一个分支会接resnet残差结构,最后会将二者经过融合。而yolov3中只有csp中简单的残差,并没有最后的融合操作。
yolov4增加了spp,用来增加感受野
yolov4 ssp之后使用了PANet,进行特征融合。
激活函数:
mish
1.从图中可以看出他在负值的时候并不是完全截断,而是允许比较小的负梯度流入,从而保证信息流动。
2.并且激活函数无边界这个特点,让他避免了饱和这一问题,比如sigmoid,tanh激活函数通常存在梯度饱和问题,在两边极限情况下,梯度趋近于1,而Mish激活函数则巧妙的避开了这一点。
3.另外Mish函数也保证了每一点的平滑,从而使得梯度下降效果比Relu要好。
损失计算:
yolov4中采用CIOU loss
http://www.136.la/jingpin/show-141192.html
YOLOV4与YOLOV3的区别_进我的收藏吃灰吧~~的博客-CSDN博客_yolov4和yolov3的区别
改进点:
1、DropBlock正则化
六、yolov5
深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎
YOLOv5中的Focus层详解|CSDN创作打卡_tt丫的博客-CSDN博客_focus层
yolov5 训练技巧:
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总_yolov5数据增强_Clichong的博客-CSDN博客
七.SPP模块作用
多尺度特征提取:SPP模块通过在不同尺度上进行空间金字塔池化,获得了不同大小的感受野,从而可以对目标的多尺度特征进行有效的提取。这有助于模型在检测不同大小的目标时更加有效和准确。
减少特征图尺寸:SPP模块在进行空间金字塔池化时,会对特征图进行不同大小的池化操作,得到不同尺寸的池化特征。这些特征会被拼接在一起,形成一个多尺度的特征表示。通过这种方式,可以在不增加特征图尺寸的情况下,获得更多的上下文信息,提高特征的丰富性。
提高感受野:感受野是指网络在特定位置上看到的输入图像区域大小。通过在SPP模块中应用空间金字塔池化,可以增加感受野的大小,从而提高模型对整个图像区域的理解和感知能力。
缩减参数量:相较于在backbone中增加更多的卷积层,SPP模块可以在一定程度上减少参数量,从而减轻模型的计算负担,加快推理速度。
FPN和PAN的作用:
在YOLOv5中,neck(即Neck部分)是模型结构的一部分,它位于backbone(骨干网络)和head(检测头部)之间,用于进一步提取特征和融合多尺度特征。FPN(Feature Pyramid Network)和PAN(Path Aggregation Network)是YOLOv5中两种常用的neck模块,它们的作用是增强模型对不同尺度目标的检测能力。
FPN(Feature Pyramid Network):
PAN(Path Aggregation Network):
这两种neck模块都是为了提高模型对不同尺度目标的检测能力而设计的。它们能够有效地融合多尺度特征,提高模型的感知能力和准确性,适用于处理包含不同大小目标的复杂场景。在YOLOv5中,根据不同的网络版本和实验设置,可以选择使用FPN、PAN或其他合适的neck模块来进一步优化模型性能。
nms:
yolov1
前向推理:
YOLO中的NMS_WaitFoF的博客-CSDN博客_nms yolo