初读YOLOv1算法

图片来源于b站up主:同济子豪兄,大部分整理也来源于他讲的YOLOv1视频

特点及优势

1、将分类问题转化为回归问题, 预测出一系列连续的数值,将边界框和相关的分类可能性从空间上分离开了

2、利用单一的神经网络实现端到端的检测,无需复杂的工作流,实时性好

3、又快又好,不太可能可能出现将背景误判为目标,因为它是一次性装入全图,隐式学习全图的信息

4、泛化迁移能力强,在自然物体上训练的模型在艺术作品上进行预测效果依然比其他模型好。普适性强,可以应用于多个领域

缺点

1、相比当年最强的几个模型在准确率上还有些落后

2、定位能力和识别小目标的能力比较差(每个grid cell只能识别一个物体)

3、由于我们的模型从数据中学习如何预测边界框,因此它遇到新的数据或数据不寻常的高宽比或配置时将较难适应

以往目标检测

1、DPM的分类器平均在图像上滑动,将每次滑动的结果汇总综合出最后的目标检测结果--耗时繁琐

2、RCNN使用选择性搜索方法从图像中先提取上千个候选框,再用神经网路对其逐一的分类和回归,最后进行后处理,每一个步骤都需要单独的训练,一旦一个环节出错,会影响整个网络

网络设计

模型以卷积神经网络来实现,在PASCAL VOC数据集上评估。网络的初始卷积层用来提取图像特征,全连接层用来预测类别概率和坐标。网络结构受到图像分类网络GoogLeNet的启发,包括24层卷积层和2层全连接层,不同于GoogLeNet使用的Inception块,使用一个1×1卷积层后面跟一个3×3卷积层,交替使用的1×1卷积层降低前一层的特征空间。使用一半(224×224输入图像)的输入在ImageNet图像分类任务中预训练卷积层,然后在检测时将输入加倍。


  为了加快检测速度还训练了一个快速的YOLO版本。Fast YOLO 使用较少的卷积层,9层而不是普通版的24层,和更小的卷积核。除了网络较小,Fast YOLO和YOLO训练和测试参数是一样的。网络最终输出是7 × 7 × 30的预测张量 。

训练阶段(监督学习使损失函数最小化的过程)

1、   将输入图片划分为S*S个网格grid cell,人工标记的标签Ground Truth框中心点落在哪个grid cell中,就在哪个grid cell中预测该物体(即由该grid cell负责拟合Ground Truth框),每个grid cell预测B个bounding boxs,与Ground Truth框IoU最大的bounding box负责预测这个物体,每个grid cell只能检测一个物体。

     每个grid cell预测B个bounding box,每个bounding box包含5个参数x,y,w,h and confidence:中心点的横纵坐标,框的宽度和高度、置信度。(x,y)是bounding box中心点相对于所在grid cell左上角格点的坐标,(w,h)是相对于整幅图片的宽高,故值都在0~1之间,起到了均一化的效果。confidence预测值表示预测框和任意Ground Truth box的交并比IOU,反映了候选框是否包含物体及离Ground Truth有多近(即预测候选框有多准确),用数学公式表示为confidence=

在训练阶段Pr标签值非0即1,IoU按实际计算,两者乘积即为confidence score的标签值,对于负责预测物体的box,这个标签值其实就是IoU。

    除此之外,每个grid cell还预测C个类别条件概率Pr(Classi | Object),即在当前bounding box已经包含物体的条件下各类别的概率。每个grid cell只预测一组条件类别概率,它所对应的B个bounding box共享这个条件概率,在测试阶段将每个bounding box的confidence score与所在的grid  cell的条件类别概率相乘得到每一个box的各类别的置信度得分

结果既表明了分类的精度也表明了定位的精度。

通过Class probability map可以知道每个网格只能有一个类别,是从其预测的一组条件类别概率中选出的最高的一个,进而说明每个网格只能预测出一个物体,故只能预测S*S个物体,这也是YOLOV1对小目标和密集目标识别性能差的原因

在PASCAL VOC数据集上训练,故类别C=20,且S=7,B=2,所以最后预测结果是一个7*7*30的张量。在ImageNet 1000类数据集上预训练我们的卷积层。预训练时我们使用图3中的前20个卷积层后面再加上一个平均池化层、一个全连接层。然后我们转化网络执行检测。Ren等人提出在预训练模型中加入卷积层和全连接层可以提高性能,根据他们的想法,我们添加了随机初始化参数的4个卷积层和2个全连接层。检测任务需要细粒度的视觉信息,所以我们将网络输入的分辨率从224×224增加到448×448。

2、我们对最后一层使用线性激活函数,其他层使用激活函数leaky ReLu。这里写图片描述

3、损失函数:我们使用平方和误差来优化模型。使用平方和误差较容易优化(容易求导),但是不能完全符合我们最大化平均精度的目标。它将定位误差和分类误差同等对待是不太合理的。
  为了弥补这一点,我们增加了边界框坐标预测损失的权重,并减少了不包含物体的边界框的置信度预测损失的权重。我们使用两个参数λcoord和λnoobj来完成这个。我们设置λcoord = 5和λnoobj =0 .5。
  平方和误差计算损失时将大框和小框同等对待,同样的一个损失值对大框的影响大于对小框的影响。为了解决这个问题,我们计算损失时先对框的宽度和高度求根号再计算平方和。
  YOLO为每个网格预测多个边界框。在训练时我们希望每个物体只有一个边界框负责检测这个物体。我们选择和真实物体位置IOU最大的边界框作为负责检测这个物体的边界框。这使得我们的边界框预测变量都负责预测特定物体。所以每个预测变量可以更好地预测边界框尺寸,纵横比或物体类别,(B个框逐渐特化,每个框都聚焦特定形状或长宽比)从而改善整体召回率(真正的物体被检测出来的比例)。
  训练期间我们优化下图中的损失函数:

4、 训练中我们的batch size为64,momentum为0.9,decay为0.0005(权重衰减L2正则化)。
  我们的learning rate(学习率)计划如下:在第一个epoch中我们将learning rate慢慢的从0.001提高到0.01,如果我们从较高的学习率开始训练,由于不稳定的梯度会导致网络发散。我们继续以0.01训练75个epoch,再以0.001训练30个epoch,以0.0001训练30个epoch。
  为了避免过拟合我们使用了dropout (神经元随机失效)层和数据增强的办法。在第一个连接层之后,速率为0.5的dropout层防止了层之间的联合依赖性(dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合依赖性,增强了泛化能力。)。对于数据增强,我们引入达到原始图像大小20%的随机缩放和平移。我们还在HSV色彩空间中随机调整图像的曝光和饱和度达1.5倍。

 预测阶段:(无需反向传播,只需用训练好的模型进行前向传播)

 1、前向推断:YOLO类似一个黑箱,输入是一个448*448*3的图像,输出的是7*7*30的张量。

7*7*30的解释:将输入图片分为7*7个网格,每个网格负责预测2个边界框和20个条件类别概率。每个边界框含5个参数(x,y,w,h,c),且这两个边界框中心都落在所在的网格中。

 2、后处理:置信度过滤+NMS非极大值抑制(ps:训练阶段无需进行NMS,因为每个框在损失函数都占据一席之地)

后处理就是把产生的7*7*2=98个预测框筛选过滤,只保留目标结果,如下图所示。

 将每个预测框的置信度和20个条件类别概率分别相乘,得到该框的类别全概率,共有98个预测框,故是一个20*98的张量

设张量第一行是狗的概率,先设置一个阈值(如0.2)将小概率设为0,再按照狗的概率从高到低排序,再进行非极大值抑制。

NMS处理详细过程:先将最大的概率(bbox_max)取出,再将其和后面的每一个概率(bbox_cur)作比较,若比较的IOU大于某个阈值,就认为重复识别了同一个物体,就将低概率的过滤掉(将概率设为0)


按照这个规则,将第二高的概率设为bbox_max,再将比bbox_max低概率的设为bbox_cur进行下一轮比较。最后每个类别只剩下两个预测框(图中bb47,bb15)。

 

最后将每个预测框最大的类别概率输出。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip 基于改进的YOLOv5算法的交通标志识别系统算法python源码+项目说明+数据.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值