首页 >> 大全

2. YOLOv1算法原理介绍

2023-12-04 大全 28 作者:考证青年

本文主要记录的重要知识点、研读论文时产生的疑问问题及解决过程。

本文出现的图片和部分文字源于网络,侵删~~

文章目录

1. 重要知识点总结 输入图像尺寸:448×448将图片分成7×7个网格(grid cell)每个网格预测生成2个 box所以,整个图像含有7×7×2=98个 box每个 box含有5个信息,分别是[x,y,w,h,c],表示中心点相对grid cell的偏移量x,y、物体框的宽度w和高度h、置信度c中心点所在的grid cell负责检测物体,其他网格不负责。置信度公式为: P r ( O b j e c t ) × I O U p r e d t r u t h Pr()×IOU^{truth}_{pred} Pr()×​,其中 P r ( O b j e c t ) ∈ Pr()∈ Pr()∈ {0,1}所以,整个图像含有的信息总数为:S×S×(5 × B + C) = 7×7×(5×2+20)=1470,其中7表示7×7个网格,2表示2个 box,5表示[x,y,w,h,c],20表示待训练数据集共有20个种类。每个网格只预测一种类别,也就是每个网格有20种可能性。每个网格有类概率,每个 box有置信度。最后预测是7×7×30的,其中30=5×2+20。含有24个卷积层,2个全连接层。其中卷积层借鉴了网络。 truth框即标签框交并比IOU非极大抑制NMS(Non- )对于卷积层和全连接层,采用Leaky ReLU激活函数。但是最后一层却采用线性激活函数。

Φ ( x ) = { x , i f x > 0 0.1 x , o t h e r w i s e \Phi(x)= \begin{cases} x,\qquad if \quad x>0 \\ 0.1x,\quad \end{cases} Φ(x)={x,ifx>00.1x,​在每个图像中,许多网格单元不包含任何对象。增加了边界框坐标预测的损失,并减少了不包含对象的框的置信预测的损失。使用两个参数, λ c o o r d λ_{coord} λcoord​和 λ n o o b j λ_{noobj} λnoobj​来实现这一点。我们设置了 λ c o o r d = 5 λ_{coord}=5 λcoord​=5和 λ n o o b j = 0.5 λ_{noobj}=0.5 λnoobj​=0.5。YOLO训练和检测均是在以单独的网络中进行的。

存在的问题:

1.中心点是怎样确定的?

2. box是怎样生成的?

3. 如果中心点落在某个网格的边线上或者顶点上,哪个网格负责检测物体?

4. 模型是怎样的?为什么采用这种模型?

5. 24个卷积层是哪24个?在结构图中怎样表示的?

6. 怎样理解损失函数?

7. 怎样解决过拟合问题?

8. IOU是怎样计算的?有什么用?

9. 非极大抑制是怎样实现的?为什么用NMS算法?

10. 条件类概率 P r ( C l a s s ∣ O b j e c t ) Pr(Class|) Pr(Class∣)是怎样计算的?

11. 是怎样预测物体的种类的?

12. 为什么说是把这个物体分类任务当做一个“回归问题()”?

2. 算法原理介绍

3. 网络结构图

4. 损失函数

损失函数的设计目标就是让坐标(x,y,w,h),, 这个三个方面达到很好的平衡。

简单的全部采用了sum- error loss来做这件事会有以下不足:

a) 8维的 error和20维的 error同等重要显然是不合理的。

b) 如果一些栅格中没有(一幅图中这种栅格很多),那么就会将这些栅格中的 box的 置为0,相比于较少的有的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。

针对这两个问题,论文引入了 λ c o o r d \{coord} λcoord​和 λ n o o b j \{noobj} λnoobj​两个平衡参数。

5. 存在缺点 6. 解决问题 中心点是怎样确定的?

预测的bbox的中心点坐标是网络直接输出的,要归一化。在找到了.py文件才知道中心坐标是根据标签中的xmin,xmax,ymin,ymax计算出来的。

def convert(size, box):dw = 1./size[0] # 归一化的时候就是使用宽度除以整个image_size的宽度 dh = 1./size[1] # 归一化的时候就是使用高度除以整个image_size的高度x = (box[0] + box[1])/2.0 # 使用(xmin+xmax)/2得到x的中心点y = (box[2] + box[3])/2.0 # 使用(ymin+ymax)/2得到y的中心点w = box[1] - box[0] # 然后宽度就是使用xmax-xmin计算得到h = box[3] - box[2] # 然后高度就是使用ymax-ymin计算得到x = x*dw # 归一化中心坐标xw = w*dw # 归一化bbox宽度y = y*dh # 归一化中心坐标yh = h*dh # 归一化bbox高度return (x,y,w,h)

box是怎样生成的?

简单的说, box是回归产生的。运行CNN,得到一些bbox的坐标、bbox中包含物体的置信度和class 。其实回归的输入并不是这些预测的坐标数字,而是预测的坐标对应的 map中的内容,这个内容与相对于 truth进行对比,计算,是回归的根本依据。

通过不断的训练,得到了回归的参数,在预测时,网络产生了图像的 map,对于任意一个预测框,背后对应了一个 区域,将学习到的参数与此区域进行运算,就会得到调整预测框的参数了。

参考链接:

如果中心点落在某个网格的边线上或者顶点上,哪个网格负责检测物体?

暂时未找到答案。

模型是怎样的?为什么采用这种模型?

yolo算法原理简介__lm算法原理介绍

是一个分类网络。遵循分类网络的结构,在这个基础上不使用 ,而是使用1×1卷积层+3×3卷积层简单代替。使用1×1的原因:1x1卷积层能够跨通道信息整合。

24个卷积层是哪24个?在结构图中怎样表示的?

采用卷积网络来提取特征,然后使用全连接层来得到预测值。对于卷积层,主要使用1x1卷积来做 ,然后紧跟3x3卷积。在训练之前,先在上进行了预训练,其预训练的分类模型采用前20个卷积层,预训练之后,在预训练得到的20层卷积层之上加上随机初始化的4个卷积层和2个全连接层。

怎样理解损失函数?

首先要明确两个概念:一是网格中有无目标;二是网格中的一个目标只有一个box负责(),另一个box也算没有目标。根据在线计算IOU的大小确定哪一个bbox负责。

位置损失: 容易理解,负责检测的才有位置损失,其他的都不需回传损失,也就不需要计算,此外小目标对于预测wh的误差更敏感,用开根的方法缓解。举例来说,大小为10和大小为100的目标,预测大小分别为20和110,损失一样,按道理说,检测效果应该是一样的,但是显然小目标检测的更差一些。开根后, ( 20 − 10 ) 2 = 1.7 (\sqrt{20}-\sqrt{10})^2=1.7 (20​−10​)2=1.7,而 ( 110 − 100 ) 2 = 0.24 (\sqrt{110}-\sqrt{100})^2=0.24 (110​−100​)2=0.24,相当于强化了小目标的wh的损失。这样就使同样的偏移量,小目标损失比大目标损失大,呈现小目标检测效果更差的现象。符合常理。

损失: 不负责和无目标的box比较多(除了负责检测物体的那个框),为了平衡,加入这部分box加入平衡参数 λ n o o b j \{noobj} λnoobj​

类别损失: 含有目标的网格才有类别损失,其他都不需要回传损失,也就不需要计算。(也就是负责检测物体的那个框需要计算损失,其他都不需要)

怎样解决过拟合问题?

为了防止过拟合,在第一个全连接层后面接了一个 ratio=0.5 的 层。

IOU是怎样计算的?有什么用?

IOU 的值可以认为是两个区域的重叠部分(交集)除以两个区域的集合部分(并集)所得到的比值。 I O U = A ∩ B A ∪ B IOU=\frac{A{\cap}B}{A{\cup}B} IOU=A∪BA∩B​,用于去除多余的 box,保留最好的一个 box。

非极大抑制是怎样实现的?为什么用NMS算法?

NMS算法主要解决的是一个目标被多次检测的问题,使用NMS算法能输出其中一个最好的预测框。NMS算法实现过程:首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该框剔除;如果其值小于一定阈值,那么就先保留,等待第二轮处理。对剩余的检测框重复上述过程,直到处理完所有的检测框(筛选出最好的一个预测框)。

条件类概率 P r ( C l a s s ∣ O b j e c t ) Pr(Class|) Pr(Class∣)是怎样计算的?

概率其实就是···,某一个是1,其余19个是0。

在判断网格中是否存在物体时,如果 P r ( O b j e c t ) Pr() Pr()!=0,表明该网格中有物体,那么需要继续计算该网格中的物体属于某一类的后验概率 P r ( C l a s s i ∣ O b j e c t ) Pr(|) Pr(​∣)。假定一共有C类物体,那么每一个网格只预测一次C类物体的条件类概率 P r ( C l a s s i ∣ O b j e c t ) , i = 1 , 2 , . . . , C Pr(|), i=1,2,...,C Pr(​∣),i=1,2,...,C;每一个网格预测B个 box的位置,就有B个后验概率值。即这B个 box共享一套条件类概率 P r ( C l a s s i ∣ O b j e c t ) , i = 1 , 2 , . . . , C Pr(|), i=1,2,...,C Pr(​∣),i=1,2,...,C。

是怎样预测物体的种类的?

最后一个fc层是用来预测物体属于不同类的概率+bbox中心点坐标x,y和高宽w,h。bbox的高宽是相对于图像归一化后得到的,bbox的中心位置的坐标是相对于某一个网络的位置坐标进行过归一化,因此x,y,w,h的值在[0,1]之间。

为什么说是把这个物体分类任务当做一个“回归问题()”?

原来的目标检测网络比如fast-rcnn 都是先生成提取框(也就是检测区域),然后基于这些区域后面进行的就是一个“分类问题”,但是yolo直接输出就是回归框偏移量、置信度以及每一类的概率(全为连续量),包括损失函数采用均方差损失函数,从这些看这就是一个回归问题。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了