目标检测学习-YOLO-v1

前言

前面几篇讲目标检测的是R-CNN系列,基本都是基于候选区来进行分类和回归,可以说是分了两步。本篇开始介绍YOLO系列的yolo-v1,引入了一种新的思路,就是把分类和回归问题都归结为回归问题,一步到位。
在这里插入图片描述

主要思想

YOLO的主要思想在于全局的去看整个图像,从左到右,从上到下的去看每一个地方,然后给每个地方两个框,以便于回归物体的位置和边界框,然后去判断每个地方是否是有物体,如果存在物体,又属于哪一类,然后进行边界框的回归。

具体做法

将图像分割成SxS的格子(你会发现没有真正的分割,只是最后是7x7x30的特征图,也就是对应原图分割成了7x7格子,有30个通道),如果某个对象的中心落在某个格子的话,那这个格子就负责检测这个对象。每个格子里会有物体的置信度,也就是物体在这个格子的可能性大小,可信度c包括两部分:是否存在物体 P r ( O b j e c t ) Pr(Object) Pr(Object)的概率,预测框和真实框之间的交并比 I O U p r e d t r u t h IOU_{pred} ^{truth} IOUpredtruth。定义为:
P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU_{pred} ^{truth} Pr(Object)IOUpredtruth

刚才说了每个格子有30个通道,也就是30个特征,其实分为前10个和后20个。

先说前10个特征,前10个特征代表2个框的特征,每个框5个特征,分别对应x,y,w,h,置信度C。x,y对应于框的中心,是相对于某个格子来说的,也就是归一化了0-1,比如格子大小是10x10,框坐标是5,5,那x=0.5,y=0.5。w,h是框的宽和高对应于整个图像的宽和高,也是归一化了0-1,比如图像是100x100,框的宽高分别是20,30,那w=0.2,h=0.3。

后20个就是每个格子的类别的条件概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject),实验中是20个类别,所以是20个,为什么是条件概率呢,因为格子里面可能不存在物体呀,所以得是有物体的存在下是某个类别的概率,即条件概率。

我们要知道某个格子是哪个类别的概率,只要将格子的置信度和类别的条件概率相乘,即该类存在的概率和框的重叠程度:
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU_{pred} ^{truth}=Pr(Class_i)*IOU_{pred} ^{truth} Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth
在这里插入图片描述

模型

在这里插入图片描述
这个没啥好说的,作者说是借鉴一些比较好的网络结构修改而来的,至于为什么有些参数是这样,因为实验结果比较好呀,理论上用了1x1卷积的降维,增加非线性,使得网络更深不至于特征更加抽象等特性。

训练

重要的还是这部分,先来看看损失函数吧,有点长,所以截图了:
在这里插入图片描述
其实是分为3部分,红框是边界框之间的损失,绿框是置信度的损失,蓝筐是预测类概率的损失,即坐标,置信度,类别。

先看红框,主要是每个边界框都要算损失:
λ c o o r d \lambda_{coord} λcoord表示边界框损失的权重系数,也就是这部分损失多重要,也可以理解成惩罚系数,系数大说明对这项比较看重。
∑ i = 0 S 2 \sum_{i=0}^{S^2} i=0S2表示格子的总数,总共SxS个格子。
∑ i = 0 B \sum_{i=0}^{B} i=0B表示每个格子内边界框的总数,总共B个,每个边界框都要这么去算损失。
1 i j o b j 1_{ij} ^{obj} 1ijobj表示第i个格子,第j个框是否对物体预测负责,就是要不要算这个损失。

后面x,y之间的损失就是方差,但是w,h的不是,因为可能出现大框和小框,大框偏差一点可能还没关系,但是小框和大框同样偏差,那就偏差大了,比如1000米预测,你说偏差个10米也就算了,但是100米偏差10米,那就差大了,所以为了把这种偏差放大,又因为取值是0-1,所以选择开根号,放大这种差距。

再看绿框,主要是每个边界框的置信度损失:
置信度也是两项,包含物体的和不包含物体的。
λ n o o b j \lambda_{noobj} λnoobj表示边界框中不含有物体的权重系数。

再看蓝色的框,主要是计算每个格子中的预测类别损失:
1 i o b j 1_{i} ^{obj} 1iobj表示第i个格子是否有对象。

总结

细节的东西就不多讲了,具体看代码比较好理解,比如预测里涉及到IOU,NMS等技术,总的来说yolo v1
还是可以的,虽然精确度可能不是最高的,但是速度是确实很快,而且那种思想也相对简单,但是也有不少缺点,比如一个格子只能预测一个类别的物体,导致如果物体很小,或者扎堆,那这样一堆里面只能检测一个物体,就漏了。还有貌似对输入图片尺寸也是有要求的,不能任意的。还有作者也说了边界框宽高比不寻常的物体效果不好,定位错误比较大,大框中的小误差影响不大,但是小框中的小误差影响就大了,同时也给出了和Fast R-CNN的错误比较,可见yolo的背景错误比较少,因为yolo是全局的,一格格过去的当然比较仔细,而Fast R-CNN是用了选择性区域,这个就不好说了,然后定位问题还是上面说的,应该是对于大框小框的误差敏感问题:
在这里插入图片描述

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自网络,侵删。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值