YOLO: Real-Time Object Detection解读

2024-06-20 19:32

本文主要是介绍YOLO: Real-Time Object Detection解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

YOLO不同于RCNN系列分为region proposal和classification,YOLO是直接输出box位置和box所属的类别,整张图都是网络的输入,是个回归问题。


YOLO的主要特点:

  • 速度快,能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。
  • 使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。
  • 泛化能力强。在自然图像上训练好的结果在艺术作品中的依然具有很好的效果。

这里写图片描述
YOLO的主要思想就是把一副图片分成7x7的网格,如果某个物体中心落在网格中,这个网格就负责这个物体,在最后一层会输出一个7x7x((4+1)x2+20)维度,每个1x1 x((4+1)x2+20)代表原图中的7x7中的一个,其中4表示坐标,1表示得分,x2表示预测两个box,20表示20个类别。(4+1)的意思是每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:

confidence=这里写图片描述
其中如果有ground true box落在一个格子里,第一项取1,否则取0。第二项是预测的bounding box和实际的ground truth box之间的IOU值。即:每个bounding box要预测 ,共5个值,2个bounding box共10个值,对应 1*1*30维度特征中的前10个。大致流程如下:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
NMS算法(非极大值抑制),主要的作用就是来抑制冗余的框,大致过程是迭代-遍历-消除。
1、 将所有的框按得分排序,选中最高分及其对应的框;
2、 遍历余下的框,如果和当前框(得分最高)的IOU大于某个阈值,便将框删除;
3、 从未处理的框中选中一个得分最高的,重复上述步骤
Yolo中的nms执行步骤大致如下:
这里写图片描述
这里写图片描述


训练策略:

该论文的训练策略,总体给人的感觉:比较复杂,技巧性比较强。可以看得出作者为了提升性能花了不少功夫。

  • 首先利用 ImageNet 的数据集 Pretrain 卷积层。使用上述网络中的前 20 个卷积层,外加一个全连接层,作为
    Pretrain 的网络,训练大约一周的时间,使得在 ImageNet 2012 的验证数据集 Top-5 的准确度达到
    88%,这个结果跟 GoogleNet 的效果相当。
  • 将 Pretrain 的结果应用到 Detection 中,将剩下的 4 个卷积层及 2 个全连接成加入到 Pretrain
    的网络中。同时为了获取更精细化的结果,将输入图像的分辨率由 224*224 提升到 448*448。
  • 将所有的预测结果都归一化到 0~1, 使用 Leaky RELU 作为激活函数。
  • 对比 localization error 和 classification error,加大 localization 的权重
  • 在 Pascal VOC 2007 和 2012 上训练 135 个 epochs, Batchsize 设置为 64, Momentum
    为 0.9, Decay 为 0.0005.
  • 在第一个 epoch 中 学习率是逐渐从10−3增大到10−2,然后保持学习率为10−2,一直训练到 75个
    epochs,然后学习率为10−3训练 30 个 epochs,最后 学习率为10−4训练 30 个 epochs。
  • 为了防止过拟合,在第一个全连接层后面接了一个ratio=0.5的 Dropout
    层。并且对原始图像做了一些随机采样和缩放,甚至对调节图像的在 HSV 空间的饱和度。

损失函数:

采用sum-squared error loss,做如下调整:
1、 更重视8维坐标的预测,乘以更大的loss weight,在VOC中取λcoord = 5;
2、 对于没有object的box的confidence loss,赋予更小的loss weight,在VOC中取λnoobj = 0.5
3、 对于有object的box的confidence loss和class loss的loss weight 取1。
4、 训练过程中,小的 Box 对位置回归错误比大的 Box 更加敏感,由于w和h都已经归一化到 0~1,之间,作者使用了一个 trick,不是直接使用w和h,而是使用它们的平方根,这样使得,w和h在较小时,相应的√w和√h会大一点。
这里写图片描述
5、 一个网格预测多个bounding box,在训练时我们希望每个object(ground true box)只有一个bounding box专门负责(一个object 一个bbox)。具体做法是与ground true box(object)的IOU最大的bounding box 负责该ground true box(object)的预测。这种做法称作bounding box predictor的specialization(专职化)。每个预测器会对特定(sizes,aspect ratio or classed of object)的ground true box预测的越来越好。(个人理解:IOU最大者偏移会更少一些,可以更快速的学习到正确位置)(参考:参考链接)
在方程中S取7
这里写图片描述
这里写图片描述


缺陷:

  • 每个格子只预测一个类别的box,而且最后只取置信度最大的box,这就导致了如果多个不同物体(或者同类物体的不同实体)的中心在同一个网格找那个,会造成漏检(对挨着的物体和小物体检测效果不好);
  • 预测的 Box 对于尺度的变化比较敏感,在尺度上的泛化能力比较差;

本文很多都是参考:
http://blog.csdn.net/surgewong/article/details/51864859
图片来源: 可能需要翻墙
本文链接:http://blog.csdn.net/u011956147/article/details/73013106

这篇关于YOLO: Real-Time Object Detection解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079052

相关文章

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet