深度学习与神经网络-3

1.目标检测

概念

目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。 物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
在这里插入图片描述

常见的目标检测算法

一阶段(one-stage)与两阶段(two-stage)目标检测方法是在深度学习中常用的目标检测方法。
一阶段目标检测方法:

  • 包含一个单独的网络模型,能够同时进行物体位置估计和类别分类。
  • 直接在输入图像上密集地生成候选目标框,并利用分类器对这些框进行分类和边界框回归。
  • 一阶段方法采用单阶段一次完成的方式,因此速度较快。
  • 主要代表算法有YOLO和SSD。
  • 由于只有一个阶段,所以计算成本相对较低。
  • 在小目标的定位和检测上,由于密集生成候选框较多,容易产生较高的误检率。

两阶段目标检测方法:

  • 包含两个独立的网络模型:生成候选目标框的区域建议网络(Region Proposal Network,RPN)和对这些框进行分类和边界框回归的网络。
  • 先利用RPN生成候选框,然后再对这些候选框进行分类和定位。
  • 两阶段方法的精度较高,主要是因为利用RPN进行精确的候选框生成,减少了误检率。
  • 主要代表算法有Faster R-CNN。
  • 两阶段方法需要两个阶段的计算,因此速度较慢。
  • 在大目标和复杂场景中,能够提供更好的检测性能。
    总结:
    一阶段目标检测方法通过一次计算完成物体位置估计和类别分类,速度较快,但在小目标的定位和检测上容易产生较高的误检率。而两阶段目标检测方法通过两个独立的网络模型实现,精度较高,尤其在大目标和复杂场景中有较好的性能,但速度较慢。在实践中,根据不同的需求和应用场景,可以选择适合的目标检测方法。

YOLO

网络结构

在这里插入图片描述网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。

模型处理

利用整张图作为网格的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。
每个bounding box要预测(x,y,w,h)和confidence共五个值,每个网格需预测一个类别的信息,记为C。

在这里插入图片描述
将图片分割为 𝑆 * s个grid(𝑆 = 7),每个grid cell的大小都是相等的。
➢ 每个格子都可以检测是否包含目标
➢ YOLO v1中,每个格子只能检测一种物体(但可以不同大小)。
YOLO网络输出

在这里插入图片描述
输出是一个7 × 7 × 30的张量。对应7 × 7个cell
➢ 每个cell对应2个包围框(boundingbox, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,
分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。

图像分割

Yolo的CNN网络将输入的图片分割为S * S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到狗落在左下角一个单元格内,那么该单元格负责预测这个狗。
在这里插入图片描述
YOLO图像分割流程 假设图像的大小是100 * 100,然后在图像上放一个网格,为了描述的简洁,在此使用3 * 3的网格,实际中会使用更加精细复杂的网格,可能是19*19。
1.基本思想是使用图像分类和定位算法(image classification and Localization algorithm)然后将算法应用到九个格子上
2.然后需要对每个小网格定义一个5+k(k为预测类别个数)维向量的目标标签
3.YOLO算法使用的是取目标对象边框中心点的算法,即考虑边框的中心点在哪个格子中。
图片在网格中的处理
在这里插入图片描述】每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为Pr(object),当该边界框是背景时(即不包含目标),此时Pr(object)=0。而当该边界框包含目标时,Pr(object)=1。边界框的准确度可以用预测框与实际框(ground truth)的IOU(intersection over union,交并比)来表述,记为IOUtruthpred。因此置信度可以定义为Pr(object)*IOUtruthpred。很多人可能将Yolo的置信度看成边界框是否含有目标的概率,但是其实它是两个因子的乘积,预测框的准确度也反映在里面。边界框的大小与位置可以用4个值来表征:(x,y,w,h),其中(x,y)是边界框的中心坐标,而w和h是边界框的宽与高。还有一点要注意,中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的。单元格的坐标定义如图6所示。而边界框的w和h预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。 还有分类问题,对于每一个单元格其还要给出预测出C个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。但是这些概率值其实在各个边界框置信度下的条件概率,即Pr(classi|object)。值得注意的是,不管一个单元格预测多少个边界框,其只预测一组类别概率值,这是Yolo算法的一个缺点,在后来的改进版本中,Yolo9是把类别概率预测值与边界框是绑定在一起的。同时,我们可以计算出各个边界框类别置信度(class-specific confidence scores):Pr(classi|object)*Pr(object)IOUtruthpred=Pr(classi)IOUtruth。边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。 每个单元格需要预测(B5+C)个值。如果将输入图片划分为S×S网格,那么最终预测值为S×S×(B5+C)大小的张量。整个模型的预测值结构如下图所示。对于PASCAL VOC数据,其共有20个类别,如果使用S=7,B=2S=7,B=2,那么最终的预测结果就是7×7×307×7×30大小的张量。
在这里插入图片描述
使用非极大值抑制得到结果
在这里插入图片描述
非极大值抑制算法(non maximum suppression, NMS),这个算法不单单是针对Yolo算法的,而是所有的检测算法中都会用到。NMS算法主要解决的是一个目标被多次检测的问题,如图中人脸检测,可以看到人脸被多次检测,但是其实我们希望最后仅仅输出其中一个最好的预测框,比如对于美女,只想要那个红色那个极爱内测结果,那么可以采用NMS算法实现这样的效果,首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定的阈值,那么就将该框剔除,然后对剩余的检测框重复上述过程,直到处理完所有的检测框。

损失函数

yolov5 中包含了以下三种损失函数:

classification loss: 分类损失
localization loss: 定位损失
confidence loss: 置信度损失
分类预测
通常对于分类任务,输出的标签是互斥的。如将某一个生物可能为人、狗或是猫,且该生物只可能是三种类别中的一种。此时将会用到 softmax 函数将三者的预测值转换为总和为 1 的概率值,并分类为概率最高的那一类。
在这里插入图片描述
yolov3 之后考虑到一个目标可能同时属于多个类别,如同时识别一个人的性别和姿态,则会输出如“男性”、“行走”两个结果。此时概率之和可能将大于 1。故在 yolov3 之后则对每一个类别预测的结果使用二元交叉熵损失:
在这里插入图片描述
边界框预测:
边界框预测是目标检测中最主要的任务之一,目标检测中想要框出检测到的目标,就需要通过对边界框所在位置数据的预测。
在之前的版本中,使用的是平方损失,即:
在这里插入图片描述
其中 x , y , w , h x, y, w, hx,y,w,h 分别代表预测框的左上角坐标与框的长宽。
但该方法存在一定问题,由于边界框预测需要着重于该框与真实框的重叠区域面积,且重叠区域的面积与两者并集区域的面积之比越大越好,但光使用平方损失无法很好地衡量这一点。为了解决这一问题,之后衍生出多个基于 IoU 的损失计算方式。
置信度预测:
目标置信度损失由正样本匹配得到的样本对计算,一是预测框中的目标置信度分数 p0,二是预测框和与之对应的目标框的 iou 值piou,其作为 ground-truth。两者计算二进制交叉熵得到最终的目标置信度损失。表示二分类交叉熵损失;表示正样本的权重公式如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值