Yolo物体检测-系列教程1:YOLOV1整体解读(预选框/置信度/分类任/回归任务/损失函数/公式解析/置信度/非极大值抑制)
作者:小教学发布时间:2023-09-19分类:程序开发学习浏览:84
🎈🎈🎈Yolo系列教程总目录
第一年整体解读
第二年整体解读
YOLOV1提出论文:您只需看一次:统一、实时的对象检测
1个、物体检测经典方法
- 两阶段(两阶段):更快-RCNN掩码-RCNN系列
- 一阶段(单阶段):yolo系列
- 最核心的优势:速度非常快,适合做实时检测任务!
- 但是缺点也是有的,效果通常情况下不会太好!
2个、机器学习分类任务评价指标
机器学习分类任务评价指标
3、YOLOV1简介
- 经典的物体检测算法
- 你只看一次,名字就已经说明了一切
- 把检测问题转化为回归问题,一个美国有线电视新闻网就搞定了
- 可以对视频进行检测,应用领域非常广
只需要一个起始位置坐标,加上长和宽,即(x,y,w,h),就能把一个物体框出来了,这就是转化为回归问题
YOLO算法,在当时15、16年等了很久,因为更快R-cnn精度高,但是太慢了,速度在当时比精度更重要
4、YOLOV1预测流程
- 把图像分词S*S个格子
- 遍历每个格子,如果哪一个物体的中心点落在了这个格子,那么这个格子就负责预测这个物体
- 得到了若干个格子,遍历每一个格子
- 根据当前的格子都生成两个候选框,找出一个接近的框
- 现在有了一个这个物体的位置,需要调整框的长宽来得到最终结果
- 在调整的过程中会得到很多个候选框,每个候选框都会得到一个信心指数(值(即置信度,这个置信度表示了当前框住的部分是否是一个我们需要检测的物体)
- (置信度低的框会被过滤掉(因为目标格子可能会有多个,但是不一定都符合)
总结:
首先输入就是一个S*S个格子,每一个格子都产生两个候选框,产生两个候选框进行微调,但是不是所有候选框都进行微调,需要切实有物体的,什么时候有物体,通过执行度来判断
5个、整体网络架构
输入图像是一个448*448,是一个固定值(这个固定值并不意味着只能检测固定大小的东西,这个固定值是通过OpenCV的Resige到固定值得到,里面的物体会进行缩放,最后的框会映射到一个完整的原始图像中),这个固定值也导致了一些问题,在v1版本中有一定的局限性
- 输入数据(448,448,3)
- 经过20层修改的谷歌,得到(14,14,1024)
- 经过2次转换+REU,得到(14,14,1024)
- 经过2次转换+REU,得到(7,71024)
- 一次拉平操作+FC+REU,得到(4096,1)
- 一次全连接(1470,1)
- 重塑(7,7,30)
- 生成检测
在网络的最后得到一个(7,7,30)的特征图,这个特征图表示的意义:77表示前面提到的SS个GRID格子,在7*7的格子中,每一个格子都有30个值,每一个格子都要预测出30个值.
30个值的意义:
- 7*7个格子分别对应B类 1 B_1B类1、B类 2. B_2B类2.两个框,比如B类 1 B_1B类1框,对应了4个值( X 1 , 是 1 , W 1 , B类 1 ) (x_1,y_1,w_1,b_1)(X1,是1,W1,B类1)就可以表示成一个唯一的框,但是这里的X 1 和 是 1 X_1和y_1X1和是1不是一个具体的坐标值,是经过归一化后得到的一个在0到1之间的相对值
- 因此B类 2. B_2B类2.框,也对应了4个值( X 2. , 是 2. , W 2. , B类 2. ) (x_2,y_2,w_2,b_2)(X2.,是2.,W2.,B类2.)
- 此外每一个框,是不是有框住了物体呢?有一个置信度C值.
- 因此B类 1 B_1B类1框,对应5个值( X 1 , 是 1 , W 1 , B类 1 , C 1 ) (x_1,y_1,w_1,b_1,C_1)(X1,是1,W1,B类1,C1),B类 2. B_2B类2.框,对应了5个值( X 2. , 是 2. , W 2. , B类 2. , C 2. ) (x_2,y_2,w_2,b_2,C_2)(X2.,是2.,W2.,B类2.,C2.)
- 在前面提到了一共有30个值,前10个对应了这10个值,后面的20个值,则是对应了20分类,也就是对应了20个类别的概率值.
了解了30个值的意义,就了解了(7,7,30),就基本懂了yolo-v1了
6个、损失函数计算公式
6.1.每个数字的意义
前面我们已经解释了每个数字的意义
- 10=(X、Y、W、H、C)*2
- 当前数据集有20个类别
- 7*7代表最终网格的大小
- SS(B*5+C)
6.2坐标回归误差(中心点定位)
位置损失计算的是(X,Y,W,H)这4个值和真实值之间的误差
前面我们仔细解释了各项参数的含义,下面陆续给出整个损失计算公式,首先是位置损失,位置损失又包含两部分,分别是坐标和长宽,不是一个具体的坐标值,是经过归一化后得到的一个在0到1之间的相对值
λ
C
O
O
R
D
∑
我
=
0
S
2.
∑
J
=
0
B类
1
我
J
O
B类
J
[
(
X
我
−
X
^
我
)
2.
+
(
是
我
−
是
^
我
)
2.
]
λ_{coord}\sum_{i=0}^{S^2}\sum_{j=0}^{B}1^{obj}_{ij}[(x_i-\hat{x}_i)^2+(y_i-\hat{y}_i)^2]λCoorD我=0∑S2.J=0∑B类1伊杰O比耶[(X我−X^我)2.+(是我−是^我)2.]
- λ C O O R D λ_{coord}λCoorD=5:超参数,坐标损失的权重
- ∑ 我 = 0 S 2. \sum_{i=0}^{S^2}∑我=0S2.:遍历所有的网格单元格格子
- ∑ J = 0 B类 \sum_{j=0}^{B}∑J=0B类:遍历所有的包围盒候选框
- 指示函数1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶:挑选负责检测物体的bbox
- ( X 我 − X ^ 我 ) 2. + ( 是 我 − 是 ^ 我 ) 2. (xi-\hat{x}_i)^2+(y_i-\hat{y}_i)^2(X我−X^我)2.+(是我−是^我)2.:中心点定位预测值和标签值的差的平方和
6.3%坐标回归误差(长宽定位)
+ λ C O O R D ∑ 我 = 0 S 2. ∑ J = 0 B类 1 我 J O B类 J [ ( W 我 − W ^ 我 ) 2. + ( H 我 − H ^ 我 ) 2. ] +λ_{coord}\sum_{i=0}^{S^2}\sum_{j=0}^{B}1^{obj}_{ij}[(\sqrt{w_i}-\sqrt{\hat{w}_i})^2+(\sqrt{h_i}-\sqrt{\hat{h}_i})^2]+λCoorD我=0∑S2.J=0∑B类1伊杰O比耶[(W我−W^我)2.+(H我−H^我)2.]
- λ C O O R D λ_{coord}λCoorD=5:超参数,坐标损失的权重
- ∑ 我 = 0 S 2. \sum_{i=0}^{S^2}∑我=0S2.:遍历所有的网格单元格格子
- ∑ J = 0 B类 \sum_{j=0}^{B}∑J=0B类:遍历所有的包围盒候选框
- 指示函数1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶:挑选负责检测物体的bbox
- ( W 我 − W ^ 我 ) 2. + ( H 我 − H ^ 我 ) 2. (\sqrt{w_i}-\sqrt{\hat{w}_i})^2+(\sqrt{h_i}-\sqrt{\hat{h}_i})^2(W我−W^我)2.+(H我−H^我)2.:宽高定位预测值和标签值算术平方根的差的平方和
求根号能使小框对误差更敏感
6.4.置信度回归误差(含有对象)
主要是判断当前预测的是前景还是背景,含有对象物体即为前景
∑
我
=
0
S
2.
∑
J
=
0
B类
1
我
J
O
B类
J
(
C
我
−
C
^
我
)
2.
\sum_{i=0}^{S^2}\sum_{j=0}^{B}1^{obj}_{ij}(C_i-\hat{C}_i)^2我=0∑S2.J=0∑B类1伊杰O比耶(C我−C^我)2.
- ∑ 我 = 0 S 2. \sum_{i=0}^{S^2}∑我=0S2.:遍历所有的网格单元格格子
- ∑ J = 0 B类 \sum_{j=0}^{B}∑J=0B类:遍历所有的包围盒候选框
- 指示函数1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶:挑选负责检测物体的bbox
- ( C 我 − C ^ 我 ) 2. : (C_I-\HAT{C}_I)^2:(C我−C^我)2.:预测值和标签值差的平方和
- C 我 C_IC我从模型正向推断结果为:SS(B*5+C)维向量找到这个Bbox的置信度得分
- C ^ 我 \HAT{C}_IC^我:计算这个bbox与Ground Truth的借条
6.5置信度回归误差(不含有对象)
λ N O O B类 J ∑ 我 = %0 S 2. ∑ J = %0 B类 1 我 J N O O B类 J ( C 我 − C ^ 我 ) 2. λ_{noobj}\sum_{i=0}^{S^2}\sum_{j=0}^{B}1^{noobj}_{ij}(C_i-\hat{C}_i)^2λN吴比耶我=0∑S2.J=0∑B类1伊杰N吴比耶(C我−C^我)2.
- λ N O O B类 J = 0.5 λ_{noobj}=0.5λN吴比耶=0.5:超参数,非目标置信度损失的权重
- ∑ 我 = 0 S 2. \sum_{i=0}^{S^2}∑我=0S2.:遍历所有的网格单元格格子
- ∑ J = 0 B类 \sum_{j=0}^{B}∑J=0B类:遍历所有的包围盒候选框
- 指示函数1 我 J N O O B类 J 1^{noobj}_{ij}1伊杰N吴比耶:挑选不负责检测物体的bbox
- ( C 我 − C ^ 我 ) 2. (C_I-\HAT{C}_I)^2(C我−C^我)2.:预测值和标签值差的平方和
6.6%分类误差
∑ 我 = 0 S 2. 1 我 O B类 J ∑ C ∈ C L 一个 S S E S ( P 我 ( C ) − P ^ 我 ( C ) ) 2. \sum_{i=0}^{S^2}1^{obj}_{i}\sum_{C∈classes}(p_i(C)-\hat{p}_i(c))^2我=0∑S2.1我O比耶C∈CL一个上证所∑(P我(C)−P^我(C))2.
- ∑ 我 = 0 S 2. \sum_{i=0}^{S^2}∑我=0S2.:遍历所有的网格单元格格子
- 1 我 O B类 J 1^{obj}_{i}1我O比耶:挑选不负责检测物体的bbox
- ∑ C ∈ C L 一个 S S E S \SUM_{C个∈类}∑C∈CL一个上证所:遍历所有类别
7个、指示函数
前面的误差计算公式提到了三个指示函数:
7.1第1个1 我 O B类 J 1^{obj}_{i}1我O比耶
1 我 O B类 J = { 1 , 如果第: 我 我是个网格单元包含目标。 0 , 否则. 1^{obj}_{i}=\Begin{Case}1,&;\Text{如果第}i\Text{个网格单元包含目标。}\\0,&;\Text{否则。)\结束{案例}1我O比耶={1,0,如果第他说:我他说:个网格单元包含目标.否则.
1 我 O B类 J 1^{obj}_{i}1我O比耶:第I个网格单元是否包含物体,也即是否有Groud True框的中心点落在网格单元中,若有则为1,否则为0
7.2第2个1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶
1
我
J
O
B类
J
=
{
1
,
如果第:
我
*个网格单元中的第:
J
我是个边界框预测到了目标。
0
,
否则.
1^{obj}_{ij}=\Begin{Case}1,&;\Text{如果第}i\Text{个网格单元中的第}j\Text{个边界框预测到了目标。}\\0,&;\Text{否则。)\结束{案例}1伊杰O比耶={1,0,如果第他说:我他说:个网格单元中的第他说:J他说:个边界框预测到了目标.否则.
1
我
J
N
O
O
B类
J
1^{noobj}_{ij}1伊杰N吴比耶:第i个网格单元格的第j个边界框若负责预测物体则为%1,否则为%0
7.3第3个1 我 J N O O B类 J 1^{noobj}_{ij}1伊杰N吴比耶
1
我
J
N
O
O
B类
J
=
{
1
,
如果第:
我
*个网格单元中的第:
J
我是个边界框没有预测到目标。
0
,
否则.
1^{noobj}_{ij}=\Begin{Case}1,&;\Text{如果第}i\Text{个网格单元中的第}j\Text{个边界框没有预测到目标。}\\0,&;\Text{否则。)\结束{案例}1伊杰N吴比耶={1,0,如果第他说:我他说:个网格单元中的第他说:J他说:个边界框没有预测到目标.否则.
1
我
J
N
O
O
B类
J
1^{noobj}_{ij}1伊杰N吴比耶:第i个网格单元格的第j个边界框若不负责预测物体则为%1,否则为%0
- 1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶为1,1 我 O B类 J 1^{obj}_{i}1我O比耶也必为1
- 1 我 J O B类 J 1^{obj}_{ij}1伊杰O比耶为1,1 我 J N O O B类 J 1^{noobj}_{ij}1伊杰N吴比耶必为%0
8、网管(非极大值抑制)
置信度是可以设置的,设置的较大的时候则比较严格,可能出现有些物体没有被检测,较小的时候可能一个物体出现多个预选框.
但是有时候就算设置较大的置信度,还是出现了多个预选框,我们可以进行非极大值抑制操作,对预选框的置信度进行排序,最终只选取较大的预选框.
YOLOV1到这里内容就全部都结束了,那YOLOV1有哪些问题呢?
- 小物体检测效果不好:当前一个网格单元格只预测一个类别,当有两个物体高度重合在一起的时候,比如一只狗的旁边还有一只猫,那可能只能检测出狗。
- 多标签预测效果不好:这里介绍的是20分类,实际任务可以设置更多或者更少的分类,假设标签中有狗这个类别,还有斑点狗,还有哈士奇之类的,可能一个物体对应了两个标签,既是狗又是哈士奇,SoftMax可能无法拿到多个标签
那么YOLOV2做了哪些改进呢?
第一年整体解读
第二年整体解读
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版