当前位置: 首页 > news >正文

目前为止看过最帅气的一篇论文YOLOv3: An Incremental Improvement(2018.4)


文章目录

  • Abstract
  • Introduction
  • The Deal
    • Bounding Box Prediction
    • Class Prediction
    • Predictions Across Scales
    • Feature Extractor
    • Training
  • How We Do
  • Things We Tried That Didn’t Work
    • Anchor box x, y offset predictions
    • Linear x, y predictions instead of logistic
    • Focal loss
    • Dual IOU thresholds and truth assignment
  • What This All Means
  • Rebuttal

原文链接
源代码
代码

Abstract



我们对YOLO进行了一些更新,在设计上做了一些小改动,让它变得更好。我们还训练了这个非常棒的新网络,比上次大一点,但更准确。在320 × 320时,YOLOv3在28.2 mAP下运行22毫秒,与SSD一样精确,但速度快三倍。当我们看到旧的0.5 IOU mAP检测指标时,YOLOv3是相当不错的。它在Titan X上在51毫秒内达到57.9 AP50,相比之下,在RetinaNet上在198毫秒内达到57.5 AP50,性能相似,但速度快3.8倍

Introduction

我不用介绍你们也知道我来干什么[doge]

因此,这篇引言的结尾将为本文的其余部分指明方向。首先,我们将告诉你YOLOv3的Deal是什么。然后我们会告诉你怎么做。我们还会告诉你一些我们尝试过但没有成功的事情。最后,我们将思考这一切意味着什么

The Deal

我们主要是从别人那里吸取好主意,我们还训练了一个新的分类器网络,它比其他的分类器网络更好

Bounding Box Prediction


(我们预测盒子的宽度和高度作为簇质心的偏移量。我们使用sigmoid函数预测相对于过滤器应用位置的框的中心坐标)

YOLO9000之后,我们的系统使用维度集群作为anchor boxes来预测边界框。网络为每个边界框(tx, ty, tw, th)预测4个坐标。如果单元格与图像左上角的偏移量为(cx,cy),并且先前的边界框的宽度和高度为pw, ph,则预测结果对应于:
在训练过程中,我们使用误差损失平方和。如果某些坐标预测的真值为t´*,我们的梯度是真值(从地面真值框计算)减去我们的预测:t´* - t *。这个基真值可以很容易地通过对上面的方程求反来计算
YOLOv3使用逻辑回归预测每个边界框的对象得分。如果先前的边界框与一个基础真值对象的重叠比任何其他先前的边界框都多,则该值应为1。如果先验的边界盒不是最好的,但是与一个基础真值对象的重叠超过某个阈值,我们忽略预测,遵循RPN。我们使用0.5的阈值。与RPN不同,我们的系统只为每个地面真值对象分配一个边界框。如果没有将边界框先验赋值给基础真值对象,则不会对坐标或类预测造成损失,只会对对象造成损失

Class Prediction

每个框使用多标签分类预测边界框可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能来说是不必要的,而是简单地使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失进行类预测
当我们移动到更复杂的领域,如开放图像数据集时,这个公式会有所帮助。在这个数据集中有许多重叠的标签(即女人和人)。使用softmax强制假设每个盒子只有一个类,而事实往往并非如此。多标签方法可以更好地为数据建模

Predictions Across Scales

YOLOv3在3个不同的尺度上预测boxes。我们的系统使用类似金字塔网络特征的概念从这些尺度中提取特征。从我们的基本特征提取器,我们增加了几个卷积层。最后一个预测了一个3-d张量编码边界框、对象和类预测
在我们使用COCO的实验中,我们在每个尺度上预测3个boxes,因此张量为N × N ×[3∗(4 + 1 + 80)],用于4个边界框偏移,1个对象预测和80个类别预测

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

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

我们仍然使用k均值聚类来确定我们的边界盒先验。我们只是随意选择了9个集群和3个尺度然后将集群均匀地划分在不同的尺度上。在COCO数据集上,9个聚类分别为:(10 × 13)、(16 × 30)、(33 × 23)、(30 × 61)、(62 × 45)、(59 × 119)、(116 × 90)、(156 × 198)、(373 × 326)

Feature Extractor

我们使用一种新的网络来进行特征提取。我们的新网络是YOLOv2、Darknet-19中使用的网络和那些新奇的残差网络之间的混合方法。我们的网络使用连续的3 × 3和1 × 1卷积层,但现在也有一些快捷连接,并且明显更大。它有53个卷积层,所以我们叫它Darknet-53

这个新网络比Darknet- 19强大得多,但仍然比ResNet-101或ResNet-152更有效。下面是一些ImageNet结果

每个网络都用相同的设置进行训练,并以256 × 256的单次crop精度进行测试。运行时间是在256 × 256的Titan X上测量的。因此,Darknet-53的性能与最先进的分类器相当,但浮点运算更少,速度更快。Darknet-53比ResNet-101好,速度快1.5倍。Darknet-53的性能与ResNet-152相似,速度是ResNet-152的2倍
Darknet-53还实现了每秒最高的测量浮点运算。这意味着网络结构更好地利用GPU,使其更有效地评估,从而更快。这主要是因为resnet有太多的层,效率不高

Training

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

How We Do

YOLOv3非常好!见表3。就COCOs的平均AP指标而言,它与SSD变体相当,速度快了3倍,但在这个指标上,它仍然落后于其他骨干模型(如RetinaNet)
然而,当我们观察IOU= 0.5(或图表中的AP50)时mAP的“旧”检测指标时,YOLOv3非常强大。它几乎与RetinaNet相当,远远高于SSD变体。这表明YOLOv3是一个非常强大的检测器,擅长为物体产生合适的boxes。然而,随着IOU阈值的增加,性能显著下降,这表明YOLOv3努力使盒子与对象完全对齐
过去,YOLO在处理小物体时遇到了困难。然而,现在我们看到了这一趋势的逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。但是,它在中型和大型对象上的性能相对较差。要弄清这件事的真相,还需要进行更多的调查
当我们在AP50指标上绘制精度与速度的关系时(见图5),我们看到YOLOv3比其他检测系统具有显著的优势。也就是说,它更快更好
(根据mAP对这两幅图像的分析,这两个假设的探测器是完美的,他们完全平等)

Things We Tried That Didn’t Work

Anchor box x, y offset predictions

我们尝试使用正常的anchor boxes预测机制,其中使用线性激活预测x, y偏移量为框宽度或高度的倍数。我们发现这个公式降低了模型的稳定性,并没有很好地工作

Linear x, y predictions instead of logistic

我们尝试使用线性激活来直接预测x, y偏移量,而不是逻辑激活,这导致mAP下降了几个点

Focal loss

我们试过用focal loss,它使我们的mAP下降了2点。YOLOv3可能已经对焦点丢失试图解决的问题具有鲁棒性,因为它具有单独的对象预测和条件类预测。因此,对于大多数例子来说,从类预测中没有损失?还是什么?我们不能完全确定。

Dual IOU thresholds and truth assignment

Faster R- CNN在训练中使用两个IOU阈值。如果一个预测与基本事实的重叠度为0.7,那么它就是一个正检验。[0.3 – 0.7]被忽略,小于0.3对于所有的基础真理对象,它是一个负面的例子。我们尝试了类似的策略,但效果不佳。我们非常喜欢我们目前的配方,它似乎至少在局部最优。这些技术中的一些可能最终会产生良好的结果,也许它们只是需要一些调整来稳定训练

What This All Means

YOLOv3是一个很好的检测器。它又快又准,在0.5到0.95 IOU之间的COCO平均AP就不那么好了。但在旧的0.5 IOU的检测指标上,这是非常好的.
我们为什么要改变指标呢?最初的COCO论文只有这句隐晦的话:“一旦评估服务器完成,将添加对评估指标的完整讨论”。Russakovsky等人报告说,**人类很难区分0.3和0.5的IOU !**训练人类从视觉上检查IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开来,这是非常困难的。但如果人类很难分辨出两者的区别,这又有什么关系呢?

但也许一个更好的问题是:“既然我们有了这些探测器,我们将如何利用它们?”很多做这项研究的人都在b谷歌和Facebook上。我想至少我们知道这项技术很好,绝对不会被用来收集你的个人信息并卖给…等等,你是说这就是它的用途??哦

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

我非常希望大多数使用计算机视觉的人只是在做一些快乐的、好的事情,比如计算国家公园里斑马的数量,或者跟踪他们的猫,当它在他们的房子里徘徊。但是,计算机视觉的使用已经受到质疑,作为研究人员,我们有责任至少考虑到我们的工作可能造成的危害,并想办法减轻这种危害。我们欠这个世界那么多

最后,不要@我。(因为我最终放弃了Twitter)

Rebuttal

我们要感谢Reddit的评论者,实验室的同事,邮件的发送者,以及走廊里路过的呼喊者,感谢他们可爱的,发自内心的话语。如果你,像我一样,正在为ICCV做评审,那么我们知道你可能还有37篇其他的论文要读,你总是把它们推迟到最后一周,然后有一些领域的传奇人物给你发邮件,告诉你应该如何完成这些评审,除非你不完全清楚它们在说什么,也许它们来自未来?不管怎么说,这篇论文不会是,如果没有你们过去所做过的所有工作这篇论文也不会是,如果没有你们过去所做过的所有工作,这篇论文也不会是,如果没有你们过去所做过的所有工作,这篇论文也不会是,如果没有你们过去所做过的所有工作,这篇论文也不会是,如果没有你们过去所做过的所有工作,这篇论文也不会是。如果你发推特,我也不会知道

评论者2号又名Dan Grossman(谁会这么做,哈哈)坚持要我在这里指出我们的图表有两个非零原点,而不是一个。丹,你说得很对,因为这比承认我们只是在这里争夺2% -3%的地图要好得多。但这里是要求的图表。我也加入了一个FPS,因为当我们在FPS上绘图时,我们看起来非常棒

评论者#4又名JudasAdventus在Reddit上写道:“有趣的阅读,但反对MSCOCO指标的论点似乎有点弱”。我一直都知道你会背叛我,犹大。你知道当你在做一个项目的时候结果是好的所以你必须找到一些方法来证明你所做的是多么的酷?我试着这么做,但我对COCO的指标有点不满。但既然我已经监视了这座山,我还不如死在上面

事情是这样的,mAP已经有点坏了,所以它的更新可能会解决一些问题,或者至少证明为什么更新版本在某些方面更好。我认为最重要的是缺乏正当理由。对于PASCAL VOC来说,IOU阈值“被故意设置得很低,以补偿地面真实数据中边界框中的不准确性”[2]。可可是否比挥发性有机化合物有更好的标签?这是绝对可能的,因为COCO有分割掩码,也许标签更值得信赖,因此我们不担心不准确。但同样,我的问题是缺乏理由

COCO指标强调更好的边界框,但这种强调必须意味着它不强调其他东西,在本例中是分类准确性。是否有充分的理由认为更精确的边界框比更好的分类更重要?一个分类错误的例子比一个稍微移动的边界框要明显得多。

mAP已经搞砸了,因为所有重要的是每个类的排名排序。例如,如果你的测试集只有这两个图像,那么根据mAP,产生这些结果的两个检测器是一样好的

这显然是对mAP问题的过度夸大了,但我想我的新观点是,在“现实世界”中人们所关心的与我们当前的衡量标准之间存在着如此明显的差异,我认为如果我们要提出新的衡量标准,我们应该关注这些差异。而且,它已经是平均精度了,我们怎么称呼COCO度量,平均平均年龄精度?

这是一个建议,人们真正关心的是给定一个图像和一个检测器,检测器在图像中找到并分类物体的能力如何。去掉每个类的AP,只求全局平均精度怎么样?还是对每个图像进行AP计算并取其平均值?

boxes是愚蠢的,我可能是masks的忠实信徒,除了我不能让YOLO学会它们。

相关文章:

  • Cuda cmake支持C++17
  • 学习笔记:利用CANOE Panel和CAPL脚本模拟主节点发送LIN通信指令
  • AI:63-基于Xception模型的服装分类
  • 大数据学习之Spark性能优化
  • USB HID在系统下通信的一些总结
  • IP地址修改方法有哪几种
  • C#学习中关于Visual Studio中ctrl+D快捷键(快速复制当前行)失效的解决办法
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 失物招领小程序 设计与实现
  • 富文本编辑器
  • HDFS系统权限详解
  • source activate my_env 和conda activate my_env 有什么区别
  • AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画
  • 死锁的原因及解决方法
  • 【C++】开源:rapidjson数据解析库配置与使用
  • 力扣第300题 最长递增子序列 c++ 动态规划题 附Java代码
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JAVA 学习IO流
  • js正则,这点儿就够用了
  • PHP 小技巧
  • Redis字符串类型内部编码剖析
  • spring boot下thymeleaf全局静态变量配置
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue全家桶实现一个Web App
  • 测试开发系类之接口自动化测试
  • 基于遗传算法的优化问题求解
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 译米田引理
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • postgresql行列转换函数
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • zabbix3.2监控linux磁盘IO
  • "无招胜有招"nbsp;史上最全的互…
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragam once 和 #ifndef 预编译头
  • #pragma data_seg 共享数据区(转)
  • #QT(串口助手-界面)
  • (03)光刻——半导体电路的绘制
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (七)c52学习之旅-中断
  • (一)基于IDEA的JAVA基础12
  • (转)【Hibernate总结系列】使用举例
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)Linux网络编程入门
  • .form文件_一篇文章学会文件上传