第八章:YOLO v3(渐进式改进)网络详解

news2024/11/15 19:56:55

(目标检测篇)系列文章目录


第一章:R-CNN网络详解

第二章:Fast R-CNN网络详解

第三章:Faster R-CNN网络详解

第四章:SSD网络详解

第五章:Mask R-CNN网络详解

第六章:YOLO v1网络详解

第七章:YOLO v2网络详解

第八章:YOLO v3网络详解

文章目录

  • 系列文章目录
  • 技术干货集锦
  • 前言
  • 一、摘要
  • 二、正文分析
    • 1.引入库
    • 2.读入数据
  • 总结


技术干货集锦

0.摘要

我们对YOLO进行了一些更新!我们进行了一系列小的设计改变以提升性能。我们还训练了一个新的网络,效果非常好。相较于上一次,它稍微大一些,但更加准确。不过,不用担心,它仍然很快。在320×320的情况下,YOLOv3在22毫秒内运行,mAP为28.2,在准确度上与SSD相当,但速度快三倍。当我们看旧的0.5 IOU mAP检测指标时,YOLOv3表现非常好。在Titan X上,它在51毫秒内达到了57.9 AP50,而RetinaNet在198毫秒内只有57.5 AP50,性能相似但快3.8倍。和往常一样,所有代码都可以在https://pjreddie.com/yolo/在线上找到。

1.前言

 1.引言 有时候,你可能只是随便做了一年,你知道吗?我今年没有进行太多的研究。在Twitter上花了很多时间。稍微尝试了一下生成对抗网络。我还保留了去年的一些动力[12][1];我设法对YOLO进行了一些改进。但是,老实说,并没有什么特别有趣的东西,只是一些小的改变让它更好。我还稍微帮助了一些其他人的研究。实际上,这就是我们今天在这里的原因。我们有一个摄影准备截止日期[4],需要引用我对YOLO进行的一些随机更新,但我们没有来源。所以准备好进行技术报告吧!技术报告的好处是它们不需要引言,大家都知道我们为什么在这里。所以这个引言的结束将为论文的其余部分指明方向。首先,我们将告诉您关于YOLOv3的情况。然后,我们会告诉您我们的方法。我们还会告诉您一些我们尝试但没有成功的事情。最后,我们将思考这一切意味着什么。

2.正文分析

2.关于YOLOv3的情况 关于YOLOv3的情况如下:我们主要借鉴了其他人的好点子。我们还训练了一个比其他网络更好的新分类器网络。我们将从头开始向您介绍整个系统,以便您可以全面理解。

 

图1.我们从《Focal Loss》论文[9]中调整了这个图。YOLOv3在性能相当的情况下比其他检测方法运行速度更快。时间来自M40或Titan X,它们基本上是相同的GPU。

2.1 边界框预测

根据YOLO9000,我们的系统使用维度聚类作为锚框来预测边界框[15]。网络为每个边界框预测4个坐标:tx,ty,tw,th。如果单元格相对于图像的左上角有偏移量(cx,cy),并且边界框先验具有宽度和高度pw,ph,则预测对应于以下公式: bx = σ(tx) + cx by = σ(ty) + cy bw = pw * exp(tw) bh = ph * exp(th) 在训练过程中,我们使用平方误差损失。如果某个坐标预测的真实值为t^,则我们的梯度为真实值(由真实框计算得出)减去我们的预测值:t^ - t*。这个真实值可以通过反转上述公式轻松计算得出。 YOLOv3使用逻辑回归为每个边界框预测一个目标性分数。如果边界框先验与任何其他边界框先验相比,与真实目标重叠的部分更多,则该分数应为1。如果边界框先验不是最佳的,但是与真实目标的重叠超过某个阈值,我们会忽略该预测,按照[17]的方法进行处理。我们使用阈值为0.5。 与[17]不同,我们的系统只为每个真实目标分配一个边界框先验。如果边界框先验未分配给真实目标,则对于坐标或类别预测不会产生任何损失,只会有目标性损失。

 图2.具有维度先验和位置预测的边界框。我们将盒子的宽度和高度预测为相对于聚类中心的偏移量。我们使用sigmoid函数相对于滤波器应用的位置预测盒子的中心坐标。这个图明显是从[15]中自我剽窃的

2.2 类别预测

每个框都使用多标签分类来预测可能包含的类别。我们不使用softmax,因为我们发现它对于良好的性能来说是不必要的,相反,我们只是使用独立的逻辑分类器。在训练过程中,我们对类别预测使用二元交叉熵损失。这种公式在我们转向更复杂的领域(如Open Images数据集[7])时非常有帮助。在这个数据集中,存在许多重叠的标签(例如,Woman和Person)。使用softmax会假设每个框只有一个类别,而这通常并不是真实情况。多标签方法更好地对数据进行建模。

2.3 不同尺度上的预测

YOLOv3在3个不同的尺度上预测边界框。我们的系统使用类似于特征金字塔网络[8]的概念从这些尺度提取特征。从我们的基础特征提取器中,我们添加了几个卷积层。其中最后一个预测一个3D张量,编码边界框、目标性和类别预测。在我们使用COCO数据集[10]进行实验时,我们在每个尺度上预测3个边界框,因此张量的尺寸为N×N×[3∗(4 + 1 + 80)],其中4个边界框偏移量,1个目标性预测和80个类别预测。接下来,我们从前面的2个层中取出特征图,并将其上采样2倍。我们还从网络中较早的位置获取一个特征图,并使用串联将其与我们的上采样特征合并。这种方法允许我们从上采样特征中获取更有意义的语义信息,并从较早的特征图中获取更细粒度的信息。然后,我们添加几个卷积层来处理这个组合特征图,并最终预测一个类似的张量,尺寸是原来的两倍。我们再次采用相同的设计来预测最后一个尺度的边界框。因此,我们对第三个尺度的预测受益于之前的所有计算以及网络中较早的细粒度特征。我们仍然使用k-means聚类来确定我们的边界框先验。我们随意选择了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卷积层,但现在还加入了一些快捷连接,并且规模更大。它有53个卷积层,所以我们将它称为……等一下……Darknet-53!

 

这个新网络比Darknet-19更强大,但仍然比ResNet-101或ResNet-152更高效。以下是一些ImageNet的结果:

 表2.骨干网络的比较。各种网络的准确率、十亿次操作、十亿次浮点操作每秒以及帧率。

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

2.5 训练

我们仍然在完整的图像上进行训练,没有使用困难负样本挖掘或其他类似的方法。我们使用多尺度训练、大量的数据增强、批量归一化等常规方法。我们使用Darknet神经网络框架进行训练和测试[14]。

3.我们是如何做的

我们的YOLOv3非常好!请参考表3。在COCO的奇怪的平均mAP指标上,它与SSD变种相当,但速度快3倍。然而,在这个指标中,它仍然远远落后于RetinaNet等其他模型。然而,当我们看到IOU=0.5的“旧”检测指标(或者图表中的AP50)时,YOLOv3非常强大。它几乎与RetinaNet持平,远高于SSD变种。这表明YOLOv3是一个非常强大的检测器,擅长为物体生成良好的框。然而,随着IOU阈值的增加,性能显著下降,表明YOLOv3在将框与物体完美对齐方面存在困难。过去,YOLO对小物体的检测存在困难。然而,现在我们看到这一趋势逆转了。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。然而,它在中等和较大尺寸物体上的性能相对较差。需要进一步调查才能弄清楚其中的原因。当我们在AP50指标上绘制准确率与速度的关系时(参见图5),我们可以看到YOLOv3在检测系统方面具有显著的优势。换句话说,它更快、更好。

4.我们在开发YOLOv3时尝试了很多方法,但其中很多并没有成功。

以下是我们能记起来的一些尝试:

  • 锚框的x和y偏移量预测:我们尝试使用常规的锚框预测机制,其中通过线性激活函数预测x和y的偏移量,作为盒子宽度或高度的倍数。我们发现这种方法降低了模型的稳定性,并且效果不太好。
  • 使用线性激活函数而不是逻辑激活函数进行x和y的预测:我们尝试使用线性激活函数直接预测x和y的偏移量,而不是使用逻辑激活函数。这导致mAP下降了几个点。
  • Focal loss:我们尝试使用Focal loss,但这使得我们的mAP下降了约2个点。可能是因为YOLOv3已经在对象性预测和条件类别预测方面具有较强的鲁棒性,所以对于大多数示例,类别预测并没有带来损失?或者还有其他原因?我们并不完全确定。

 表3。我只是从[9]那里偷了这些表,因为从头开始制作这些表太耗时间了。好吧,YOLOv3做得还不错。请记住,RetinaNet处理一张图像需要花费大约3.8倍的时间。YOLOv3比SSD变种要好得多,并且在AP50指标上与最先进的模型相当。

 图3。再次改编自[9],这次显示的是在IOU为0.5的mAP指标上速度与准确性的权衡。从图上可以看出,YOLOv3的准确性非常高,而且偏向于左侧。你能引用你自己的论文吗?猜猜看,我就是要试试,就是这个家伙![16]。哦,我忘了,我们还修复了YOLOv2中的一个数据加载错误,这帮助提高了大约2个mAP。只是悄悄地加在这里,以免影响布局。

双IOU阈值和真实值分配。Faster R-CNN在训练过程中使用了两个IOU阈值。如果一个预测与真实值的重叠度超过0.7,则将其视为正例;如果重叠度在0.3到0.7之间,则忽略该预测;如果与所有真实值的重叠度都小于0.3,则将其视为负例。我们尝试过类似的策略,但结果不理想。我们目前的表达方式还不错,至少在局部最优解上看起来是如此。可能这些技术最终可以产生好的结果,也许只需要一些调整来稳定训练过程。

总结

  1. 这一切的含义是,YOLOv3是一个很好的检测器。它速度快,准确度高。在COCO平均AP(IOU在0.5到0.95之间)指标上并不是很出色。但在IOU为0.5的旧检测指标上表现非常好。那么我们为什么要切换指标呢?原始的COCO论文只有一句神秘的话:“一旦评估服务器完成,将提供对评估指标的全面讨论”。Russakovsky等人报告说,人类很难区分IOU为0.3和0.5之间的差异!“训练人类去目视检查IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开来是非常困难的。”[18]如果人类很难区分这个差异,那么这个差异有多重要呢?但也许一个更好的问题是:“我们现在拥有这些检测器后,我们要用它们做什么?”很多从事这项研究的人都在谷歌和Facebook工作。至少我们知道这项技术在好手里,并且绝对不会被用来收集你的个人信息并出售给......等等,你说它将被用来做这些事情?哦。那么,另一个重资助视觉研究的人是军方,他们从未用新技术做过像杀害大量人员这样可怕的事情......等等,对不起,我说错了。我非常希望大多数使用计算机视觉的人只是在做一些快乐的、好的事情,比如在国家公园中计算斑马的数量[13],或者追踪他们家里四处游荡的猫[19]。但计算机视觉已经被用于一些值得质疑的用途,作为研究人员,我们有责任至少考虑我们的工作可能会造成的伤害,并思考如何减轻这种伤害。我们欠这个世界这么多。最后,不要@我。(因为我终于退出了Twitter)。

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

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

相关文章

ruiyo-cloud-plus集成shardingsphere-proxy进行分库分表

一、什么shardingsphere-proxy Sharding-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问…

阿里云轻量应用服务器和云服务器ECS有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻…

用栈实现队列——力扣232

题目描述 思路 class MyQueue {stack<int> inStack, outStack;void in2out(){while(!inStack.empty()){outStack.push(inStack.top());inStack.pop();}} public:MyQueue() {}void push(int x) {inStack.push(x);}int pop() {if(outStack.empty()){in2out();}int x out…

etiger.vip 答案 1907最高的山

1907.最高的山 题目描述 有n座山&#xff0c;编号从1到n&#xff0c;第i座山的高度为hi&#xff0c;请问其中最高的山是哪一座&#xff1f; 输入输出格式 输入格式 第一行一个正整数n&#xff0c;表示山的数量&#xff0c;n<1000。 第二行n个正整数&#xff0c;中间由空…

四元数转换为一个旋转矩阵

#include <iostream> #include <vector> #include <Eigen/Core> #include <Eigen/Geometry> #

回调函数的应用(sqort函数)——指针进阶(三)

目录 前言 什么是回调函数&#xff1f; 回调函数的应用 qsort函数 qsort函数的使用 qsort模拟实现 模拟函数的使用 总结 前言 回调函数是一种非常常见的编程技术&#xff0c;在许多不同的编程语言和框架中都有广泛的应用。但它到底是什么&#xff0c;以及如何使用呢&#xff1…

-XX:MaxDirectMemorySize

-XX:MaxDirectMemorySize最大堆外内存大小&#xff0c;此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定大小后就触发Full GC。首先可以在jdk文档中找到&#xff1a;关于MaxDirectMemorySize内存的描述&#xff1a;Sets the maximum total size (in bytes) of the New…

02_06内核cpu信息及内存布局及堆管理及内存使用情况

linux_cpu_大致信息查看 因为需要知道当前linux cpu是多少位的,才能知道内核空间的分布 64位Linux-般使用48位来表示虚拟地址空间&#xff0c;45位表示物理地址。通过命令: cat/proc/cpuinfo。 查看Linux内核位数和proc文件系统输出系统软硬件信息如下: 通过cat /proc/cpuinfo…

RabbitMQ笔记--消息中间件,rabbitmq安装及简单使用

1.消息中间件 消息&#xff1a;指在应用间传送的数据。 消息队列中间件&#xff1a;指利用高效可靠的消息传递机制进行与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型&#xff0c;可以在分布式环境下扩展进程间的通…

unittest自动化测试之unittest封装方法

目录 封装方法 完整代码 总结&#xff1a; 封装方法 在编写自动化脚本的时候&#xff0c;都要求代码简介&#xff0c;上一篇unittest---unittest断言中代码重复性比较多&#xff0c;我们进行一次简单的优化&#xff08;优化方法不同&#xff0c;请勿喷&#xff09; 我们可以…

Video4linux: cannot set V4L control... 解决方案

问题描述 最近在用USB_CAM读取摄像头的时候&#xff0c;总是出现如下问题&#xff1a; 思来想去真是难受。 问题分析 在usb_cam/ config /usb_cam.yaml文件中&#xff0c;把他报错的东西加在ignore里面即可。 首先打开camera_driver.cpp文件&#xff0c;把908行的printf语句…

ARM64学习笔记---建立异常向量表(二)

源码: #include "mm.h" #include "sysregs.h".section .rodata .align 3 .globl el_string1 el_string1:.string "Booting at EL".section ".text.boot" .globl _start _start://读取mpidr_el1寄存器的值&#xff0c;该寄存器决定了…

学无止境·MySQL(4-3)(多表查询加强版-------更新版)

比4-2表中多几个数据&#xff0c;更具备普遍性 试题2&#xff08;更新加强版&#xff09;1、创建表2、找出销售部门中年纪最大的员工的姓名3、求财务部门最低工资的员工姓名4、列出每个部门收入总和高于9000的部门名称5、求工资在7500到8500元之间&#xff0c;年龄最大的人的姓…

MySql 高级-0706

1. MySQL 架构 1.1 MySQL 简介 mysql内核 sql优化攻城狮 mysql服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容灾备份 sql编程 1.2 MySQL逻辑架构介绍 1.2.1第1层:连接层 ** 系统(客户端)访问 MySQL 服务器前&#xff0c;做的第一件事就是建立 TCP 连接…

HTML <map> 标签

实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap" alt="Planets" /><map name="planetmap" id="planetmap"><area shape="circle" coords=&q…

多元分类预测 | Matlab 粒子群算法(PSO)优化xgboost的分类预测,多输入单输出模型。PSO-xgboost分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab 粒子群算法(PSO)优化xgboost的分类预测,多输入单输出模型。PSO-xgboost分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

利用Python构建科学的交易系统:以趋势为例

在股票市场中&#xff0c;趋势被认为是一个非常重要的概念。趋势可以通过股票的价格、交易量等指标来确定。如果一只股票的价格在持续上涨&#xff0c;那么我们可以认为该股票处于上升趋势&#xff1b;反之&#xff0c;如果一只股票的价格在持续下跌&#xff0c;那么我们认为该…

物理机到容器的发展历程

物理机到容器的发展历程 物理主机虚拟化技术什么是虚拟化&#xff1f;虚拟化分类主流的虚拟化技术KVMLXC 容器Docker与Containerd容器编排为什么要编排工具容器编排工具有哪些&#xff1f; 物理主机 从传统的物理服务到现如今的云服务的发展离不开应用服务的拆分&#xff0c;由…

PDF怎么转长图?这四个方法免费好用!

记灵在线工具怎么转PDF为长图&#xff1f;PDF文件是一种常见的文档格式&#xff0c;它可以在不同的设备和操作系统上保持格式的一致性。然而&#xff0c;有时候我们需要将PDF文件转换成长图&#xff0c;以便于在社交媒体上分享或者在网站上展示。本文将介绍如何使用记灵在线工具…

110、基于51单片机智能浇花浇水系统土壤湿度检测温度自动灌溉报警设计(程序+原理图+PCB源文件+原理图讲解+参考论文+开题报告+程序流程图+元器件清单等)

选题背景及意义 在中国广大面积的农村&#xff0c;没有发达的工商业&#xff0c;有的只是大量闲置的田地。如果利用这些闲置的田地&#xff0c;种植美丽的花卉、树苗&#xff0c;能给当地带来一笔可观的收入。而这些花卉及树苗的种植对土壤湿度&#xff0c;温度有着极高的要求…