YOLO v3

news2024/10/7 18:24:25

参考   YOLO v3 - 云+社区 - 腾讯云

摘要

我们对YOLO进行了一些更新!我们做了一些小的设计改变使它更好。我们还训练了这个非常棒的新网络。比上次大一点,但更准确。不过还是很快的,别担心。在320 × 320的情况下,YOLOv3在28.2 mAP下运行时间为22 ms,与SSD一样精确,但速度是SSD的3倍。当我们看旧的 0.5 IOU mAP检测指标YOLOv3是相当好的。它在Titan X上实现了57.9 AP_{50}在51毫秒内,而RetinaNet在198毫秒内实现了57.5 AP_{50},性能类似,但快了3.8倍。

1、介绍

有时候你就得憋上一年,知道吗?我今年没有做很多研究。花了很多时间在推特上。玩了一下GANs。我从去年开始有了一点动力;我设法对YOLO做了一些改进。但是,说实话,没有什么特别有趣的,只有一些小的改变让它变得更好。我也帮了别人一点忙。

事实上,这就是我们今天来到这里的原因。我们有一个拍摄截止日期,我们需要引用一些我对YOLO的随机更新,但我们没有来源。所以,准备好接受科技报道吧!

科技报告最棒的一点就是他们不需要自我介绍,你们都知道我们为什么在这里。因此,这篇介绍的结尾将会成为本文其余部分的路标。首先,我们将告诉你YOLOv3是什么。然后告诉你我们怎么做。我们也会告诉你一些我们尝试过但没有成功的方法。最后,我们将考虑这一切意味着什么。

2、The Deal

所以YOLOv3是这样的:我们主要是从别人那里获得好点子。我们还训练了一个新的分类器网络,它比其他的更好。我们会从头开始,带你了解整个系统,这样你就能完全理解了。

                     

2.1、bounding box预测

和v2版的YOLO 9000一样,在v3版中使用维度聚类预测bounding box作为anchor box。网络对每个bounding box预测四个坐标,t_xt_yt_wt_h,如果单元格与图像左上角偏移(c_x, c_y),且边界框先验具有宽度和高度p_wp_h,则预测结果为:

                             \begin{aligned} b_{x} &=\sigma\left(t_{x}\right)+c_{x} \\ b_{y} &=\sigma\left(t_{y}\right)+c_{y} \\ b_{w} &=p_{w} e^{t_{w}} \\ b_{h} &=p_{h} e^{t_{h}} \end{aligned}

在训练中,我们使用误差损失平方和。如果某些坐标预测的ground truth是\hat{t}_{*},我们的梯度是ground truth值(从ground truth框计算)减去我们的预测:\hat{t}_{*}-t_{*}。这个ground truth可以很容易地通过把上面的方程反过来计算出来。

YOLOv3使用逻辑回归来预测每个bounding box的回归分数。如果bounding box先验与ground truth目标的重叠比任何其他bounding box先验都要大,那么这个值应该是1。如果bounding box先验不是最佳的,但确实和一个ground truth目标重叠超过某一个阈值,我们应该忽略这一个预测,这篇文章中使用的阈值是0.5。和Fast R-CNN不同的是这个系统仅仅对每个ground truth目标分配一个bounding box先验。如果一个bounding box 先验没有分配给一个ground truth目标,将会造成坐标和类预测没有损失,仅仅对目标。

               

2.2、分类预测

每个box使用多标签分类来预测bounding box可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能是不必要的,而是简单地使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失进行类预测。

当我们转移到更复杂的领域,比如Open Images Dataset时,这种形式会有所帮助。在这个数据集中有许多重叠的标签(即女人和人)。使用softmax强加了这样一个假设,即每个框只有一个类,但通常不是这样。多标签方法可以更好地建模数据。

2.3、跨尺度预测

YOLOv3在3个不同的尺度上预测box。我们的系统使用与特征金字塔网络相似的概念从这些尺度中提取特征。从基本特征提取器中,我们添加了几个卷积层。最后一种方法预测了三维张量编码bounding box、对象和类预测。在用COCO进行实验的时候在每个尺度上预测3个box,因此对4个bounding box补偿,张量为N \times N \times[3 *(4+1+80)],1个目标预测和80类分类预测。

接下来,从之前的两个类中获取特征图,并且进行两倍的上采样。我们还从之前的网络获取特征图,使用连接将其与上采样特性合并。该方法可以从上采样的特征中获取更有意义的语义信息,并从早期的特征图中获取更细粒度的信息。然后,我们添加更多的卷积层来处理这个组合的特征图,并最终预测出一个类似的张量,尽管现在的张量是原来的两倍。

我们再次执行相同的设计来预测最终的比例。因此,我们对第三个尺度的预测受益于所有之前的计算以及网络早期的细粒度特性。

依然使用k-means来决定bounding box来决定最终的先验,仅仅选择9类和任意3个尺度,通过尺度来均匀的分配类。在COCO数据集上,有9个集群:(10×13), (16×30), (33×23), (30×61), (62×45), (59×119), (116×90), (156×198), (373×326)。

2.4、特征提取

使用一个新的网络来执行特征提取,新网络是YOLOv2、Darknet-19中使用的网络和那些新奇的残余网络之间的混合方法。新网络使用连续3×3和1×1卷积层但nowhas一些快捷方式连接,明显增大。有53个卷积层,作者称之为Darknet-53。

这个新的网络比Darknet-19更强力,依然比ResNet-101和ResNet-152更有效率。下面是ImageNet的一些结果:

每个网络训练使用相同的设置和测试在256×256,单一的crop准确性。在Titan X运行时间测量X 256×256。因此,Darknet-53与最先进的分类器性能相当,但浮点运算更少,速度更快。Darknet-53比resnet - 101更好,并且快1.5倍。Darknet-53和resnet - 152性能类似,并且快两倍。

Darknet-53还实现了每秒最高的浮点运算。这意味着网络结构更好地利用了GPU,使其更有效地进行评估,从而更快。这主要是因为ResNets的图层太多,效率不高。

2.5、训练

我们仍然在训练完整的图像,没有硬负面挖掘或任何类似的东西。我们使用多尺度训练,大量的数据增强,批处理归一化,所有的标准的东西。我们使用Darknet神经网络框架对[14]进行训练和测试。

3、我们的做法

YOLOv3很棒! 见表3。 从COCOs怪异的平均AP指标来看,它与SSD版本相当,但速度是SSD版本的3倍。 但在这个指标上,它仍然落后于其他模型,如RetinaNet。  

然而,当我们看看“旧”的地图检测指标IOU=:5(或图表中的AP50)时,YOLOv3是非常强大的。 它几乎与视网膜网相当,远远高于SSD的变体。 这表明YOLOv3是一个非常强的检测器,擅长为对象生成像样的盒子。 然而,当IOU阈值增加时,性能会显著下降,这表明YOLOv3很难使盒子与对象完全对齐。  

在过去,YOLO与小物件斗争。 然而,现在我们看到了这一趋势的逆转。 根据新的多尺度预测,我们可以看到YOLOv3具有相对较高的AP_S性能。 但是,它在中型和大型对象上的性能相对较差。 需要进行更多的调查才能弄清这件事的真相。 

当我们在AP_{50}度量上绘制精度与速度(见图5)时,我们看到YOLOv3比其他检测系统有显著的优势。 也就是说,它更快更好。  

4、我们尝试过的失败的事情

在开发YOLO v3时,我们尝试了很多东西。 很多都没起作用。 这是我们能记住的东西。  

锚框x,y补偿预测:我们尝试使用常规锚框预测机制来预测x;使用线性激活的方框宽度或高度的倍数的Y偏移量。 我们发现这种配方降低了模型的稳定性,并没有很好地工作。  

线性x,y预测替代逻辑:我们试着用线性激活来直接预测x,y补偿,而不是物流激活。 这导致mAP下降了几个点。  

Focal loss:我们尝试使用Focal Loss。 它让我们的地图下降了2个点。 YOLOv3对于试图解决的焦点丢失问题可能已经很健壮了,因为它有独立的对象预测和条件类预测。 因此,对于大多数例子来说,类预测没有损失? 还是什么? 我们不完全确定。  

 

双重欠条阈值和真相分配:

Faster RCNN在训练期间使用两个IOU阈值。 如果一种预测与ground truth重叠了0.7,那么它就作为一个正的例子,如果与ground truth重叠了0.3,那么它就被忽略了,目标是一个负样本。 我们尝试了类似的策略,但没有得到好的结果。  

我们很喜欢我们目前的公式,它似乎至少在局部最优。 有可能这些技术最终会产生好的结果,也许它们只是需要一些调整来稳定训练。  

5、这一切意味着什么

YOLOv3是一个很好的检测器。 它快速,准确。 在0.5到0.95 IOU指标之间的COCO平均AP上就没那么好了。 但它很好,在旧的检测指标有0.5的IOU。

我们为什么要改变参数? 原来的COCO论文中只有这句晦涩的句子:“一旦评估服务器完成,将添加对评估指标的完整讨论”。 Russakovsky等人报告说,人类很难区分0.3和0.5的IOU! “训练人类目视检查欠条为0.3的边界框,并将其与欠条为0.5的边界框区分开来,是非常困难的。 “[18]如果人类很难区分两者,那又有什么关系呢?”    

但也许一个更好的问题是:“现在我们有了这些检测器,我们要用它们做什么?” 很多做这项研究的人都在谷歌和Facebook。 我想,至少我们知道这项技术掌握得很好,肯定不会被用来收集你的个人信息,然后卖给.... 等等,你是说这就是它的用途?? 哦。  

其他大量资助视觉研究的人是军方,他们从来没有做过什么可怕的事情,比如用新技术杀死很多人,哦,等等.....  

我非常希望大多数使用计算机视觉的人只是在用它做快乐的、有益的事情,比如数国家公园里斑马的数量[13],或者当他们的猫在家里闲逛时跟踪它[19]。 但是,计算机视觉已经被用于可疑的用途,作为研究人员,我们有责任至少考虑我们的工作可能造成的危害,并想办法减轻它。 我们欠世界这么多。  

最后,不要@我。 (因为我最终退出了Twitter)。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跳板攻击中如何追踪定位攻击者主机(上)

前段时间西北工业大学遭受NAS攻击事件中,TAO在针对西北工业大学的网络攻击行动中先后使用了54台跳板机和代理服务器,主要分布在日本、韩国、瑞典、波兰、乌克兰等17个国家,其中70%位于中国周边国家,如日本、韩国等。 同时&#x…

芯片漫游指南(3)-- UVM通信

目录1.TLM通信1.1 概述1.2 基本概念1.3 分类1.4 端口的使用2. 单向通信2.1 概念2.2 方法2.3 示例3.双向通信3.1 概述3.2 分类3.3 transport4. 多向通信4.1 概述4.2 示例5.通信管道5.1 概述5.2 TLM FIFO5.3 Analysis Port5.4 analysis TLM FIFO5.5 request & response通信管…

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下(系统+LW)

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#x…

Springboot内置的工具类之ObjectUtils

在实际业务开发中,有时候经常需要判断对象是否为空、数组是否为空、两个对象是否相等,数组中是否包含某个元素,往数组中追加元素等这些操作,每次都手写太麻烦,然后很多人的选择是封装成util工具类,实际上类…

Golang protobuf

文章目录protobuf 和 grpc 的区别下载工具 protoc为什么要使用 protocprotoc 基本语法基础用法结构体声明protoc生成结构体服务声明生成服务使用生成的服务端使用生成的客户端protobuf 和 grpc 的区别 grpc 是开源的rpc框架 protobuf是编码协议下载工具 protoc https://githu…

人工神经网络/ANN简介

目录 前言 1.什么是训练集、测试集和验证集? 2.人工神经网络和 生物神经元结构对应的理解 3.什么是梯度下降法,在神经网络上如何用于调节权重? 4.为什么神经网络要进行归一化处理? 5.激活函数的形式: 6.NN分类 …

序列模型(自回归模型,马尔可夫模型,因果关系)

李沐老师《动手学深度学习 PyTorch版》课程,小破站也有视频51 序列模型【动手学深度学习v2】_哔哩哔哩_bilibili 主要参考8.1. 序列模型 — 动手学深度学习 2.0.0 documentation 目录 1.基本原理 1.1自回归模型 1.2马尔可夫模型 1.3因果关系 2.训练 3.预测 4…

CMake中link_directories/target_link_directories的使用

CMake中的link_directories命令用于添加目录使链接器能在其查找库(add directories in which the linker will look for libraries),其格式如下: link_directories([AFTER|BEFORE] directory1 [directory2 ...]) 添加路径使链接器应在其中搜索库。提供给…

【云计算与大数据技术】数据分片哈希算法、路由算法、复制算法的讲解(图文解释 超详细)

一、大数据的存储问题 随着结构化数据量和非结构化数据量的不断增长,以及分析数据来源的多样化,之前的存储系统设计已经无法满足大数据应用的需求,对于大数据的存储,存在以下几个不容忽视的问题 容量 - “大容量”通常是指可达P…

Python+Qt相片更换背景颜色窗体程序

程序示例精选 PythonQt相片更换背景颜色窗体程序 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 QTPython是非常经典的窗体编程组合,功能完善,可视化界面美观易维护,这篇博…

fpga实操训练(按键输入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在fpga上面进行按键的输入,要比stm32编写按键输入要容易的多。这里面最主要的工作就是把led输出和按键输入绑定在一起。当然&#xff0…

MySQL MVCC

1.隔离级别 1.1.理论 1.1.1.序列化(SERIALIZABLE) 如果隔离级别为序列化,则用户之间通过一个接一个顺序地执行当前的事务,这种隔离级别提供了事务之间最大限度的隔离; 1.1.2.可重复读(REPEATABLE READ,MySQL默认的隔离级别) 在可重复读在这一隔离级别上,事务不会被看成是一…

代码随想录刷题记录 day42 打家劫舍 1 2 3

代码随想录刷题记录 day42 打家劫舍 1 2 3 参考:代码随想录 198. 打家劫舍 思想 1.dp[i]表示偷取[0,i]房间内获取的最高的金额 2.递推公式 偷取第i号房间时的价值 dp[i]dp[i-2]nums[i]; 不偷取第i号房间时的价值 dp[i]dp[i-1] 所以递推公式 dp[i]Math.max(d…

【Linux】一文简单了解操作系统在硬件中的作用,解析操作系统是做什么的?

目录前言一.操作系统的介绍二.计算机软件体系结构接口各层接口三.操作系统做什么1.不要让CPU打盹多道程序分时系统多任务系统2.设备驱动操作系统对软硬件进行合理的管理,以达到为上层用户提供良好的,稳定的,安全的运行环境的目的!…

AppScan使用教程

一、安装 IBM AppScan 该产品是一个领先的 Web 应用安全测试工具,曾以 Watchfire AppScan 的名称享誉业界。Rational AppScan 可自动化 Web 应用的安全漏洞评估工作,能扫描和检测所有常见的 Web 应用安全漏洞,例如 SQL 注入(SQL-i…

多时点DID实证流程笔记(Aggregate Effects from Public Works: Evidence from India)

文章、数据及stata代码来源: 链接:https://pan.baidu.com/s/1nBvlYGXkV7ednEx93ge1ZQ 提取码:vs5q本文进行的平行趋势检验、异质性检验均与大部分中文文献的处理方式不同,以及Bacon分解的方法对交叠did的潜在偏误进行诊断的做法也是比较新颖的。另外&a…

林业数字孪生打造实时树木“管家”

数字孪生是物联网、人工智能、虚拟现实、云计算等技术高度融合的综合性集成技术,主要目的是进行数字模型的智能分析、预测,为实体提供决策支持。林业数字孪生应用是智慧林业的具体实现手段,服务于智慧林草的业务需求,从而实现实体…

C语言#include的用法详解(文件包含命令)

#include叫做文件包含命令,用来引入对应的头文件(.h文件)。#include 也是C语言预处理命令的一种。 #include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件&…

AI-多模态-2021:FILIP【一种基于交互的细粒度图文预训练模型】

前言 FILIP(Fine-grained Interactive Language-Image Pretrain)是一种基于交互的细粒度图文预训练模型,用于解决图文双塔匹配模型中的细粒度匹配问题。本文对该论文进行阅读笔记, 论文:https://arxiv.org/abs/2111.…

【C#基础教程】第二十章、事件

目录 事件 1.事件 2.扩展EventArgs类 事件 1.事件 事件的组成:事件由事件发布者和事件订阅者组成。事件内包含一个私有委托。 当事件发布时,事件发布者会发布消息、而事件订阅者会接受到事件已发生的通知,并作出相应的处理。 其中&#xf…