YOLOv3

YOLOv3

  • 论文简介
  • 论文内容
    • 1. 采用darknet53+FPN结构
    • 2. 边框预测保持与YOLOv2保持一致
    • 3. 沿用YOLOv2 kmeans生成先验anchors
    • 4.类别预测改为多分类格式

论文简介

论文:《YOLOv3: An Incremental Improvement》
作者:Joseph Redmon, Ali Farhadi
论文下载地址:https://arxiv.org/abs/1804.02767
代码下载:https://github.com/ultralytics/yolov3
在过去一年里作者就一直在推上刷东西,直到ddl到了才写了一篇改进YOLOv3的技术报告(作者论文自己写的)。所以这篇论文文风比较随意。

论文内容

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/69eeb759a3c4480cb9c6a24ab755b407.png

这个图主要表达的是当时几种模型在coco数据集上的的精度与推断时间。YOLOv3的三个星星表示从320、416、608这三种输入大小,也就是说随着输入大小的提高,精度也会提高。对比RetianNet的检测框架,mAP-50是57.5,而YOLOv3-608是57.9,time是198而YOLOv3-608是51,YOLOv3-608在精度和速度上都优秀于RetianNet-101-800

在这里插入图片描述
AP是检测精度,AP50是在IOU=50时的AP,AP75是在IOU=75时的AP,APS是小目标(目标边框小于32)的AP,M是中目标,L是大目标(目标边框大于96)
YOLOv3 608对比YOLOv2在各个维度都是远超的
对比两阶段算法,精度基本一样,但是速度是四倍的关系

1. 采用darknet53+FPN结构

在这里插入图片描述
YOLOv2采用的是darknet-19,是普通的卷积和池化平铺网络,如上图
在这里插入图片描述
这是YOLOv3采用的darknet-53结构,每一个方框代表一个残差模块,总共有23个残差模块,残差模块是resnet提出的结构,他可以把模型拼接很深,但是不降低精度。最后拿的是32x32 16x16 8x8这仨模块的输出
darknet一方面采用残差结构,缓解了大型梯度更新慢的问题,采用金字塔FPN结构,从网络中抽取三层,分别是原图的1/8 1/16 1/32,做一个上采样和特征合并的操作,一方面加快训练和避免梯度消失,另一方面融合上下层特征,使大尺度模板检测的时候能参考小尺度特征。
在这里插入图片描述
这是FPN结构,大概原理是,以左上角这一层举例,把这一层抽出,进行上采样操作让他变得大一点,跟第二层的合并,把合并结果进行输出。

2. 边框预测保持与YOLOv2保持一致

在这里插入图片描述
其中tx ty tw th为模型预测输出
函数为sigmod函数,归一化tx ty
pw ph为anchor的宽高
cx cy为当前grid cell的坐标
bx by bw bh为最终预测的目标边框
在这里插入图片描述
这个预测中心点的预测结果永远是girl cell右下边的效果
损失计算还是差平方和。每个输出的三个先验框会跟ground truth框做一个交并比,只会拿交并比最大的那一个作为最终预测数据。

3. 沿用YOLOv2 kmeans生成先验anchors

YOLOv3输出三个特征层,每个特征层会对应三个先验框,所以YOLOv3总共生成9个anchors。聚类的时候就会分成9类,最小的三类对应1/8特征,中间三类对应1/16,最大对应1/32.这样的效果就是小anchor对应小目标,大anchor对应大目标。
在这里插入图片描述
(BV1DS4y1R7zd的P9)
这里是这篇论文最大的改进点
YOLOv2是直接走骨干网络输出结果
YOLOv3是走骨干网络后输出一层19x19,再做一个上采样和上一层的concat在一起,再输出,再做一个上采样和最上边一层拼接在一起,在输出。总共输出三个尺度的tensor。每个tensor的输出是
在这里插入图片描述
最后把三维处理成四维。

4.类别预测改为多分类格式

实际使用的时候如果没有多分类需求,就不用这个交叉熵就行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Kafka 保证消息不丢失的策略及原理解析

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 一、引言 二. 持久化存储 2.1持久化存储原理: 2.2使用示例: …

7.java openCV4.x 入门-Mat之转换、重塑与计算

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

2024HW --->反序列化漏洞!

对于反序列化,这个漏洞也是常用的,不过涉及到的方面非常非常广,比其他漏洞也难很多 于是本篇文章就分成PHP和JAVA的反序列化来讲讲 1.反序列化 想要理解反序列化,首先就要理解序列化 序列化:把对象转换为字节序列的过…

Redis -- 缓存雪崩问题

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 可能原因 : 同一时间大量的key到期 ; 解决方案: 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降…

【C++】哈希思想的应用(位图、布隆过滤器)及海量数据处理方法

文章目录 前言位图什么是位图简单实现一个自己的位图位图的应用场景 布隆过滤器位图的缺陷及布隆过滤器的提出布隆过滤器的概念简单实现一个自己的布隆过滤器布隆过滤器的优缺点布隆过滤器的应用场景 海量数据处理 前言 哈希思想的在实际中的应用除了哈希表这个数据结构之外还…

分享一个知识 -- bean的静态属性不会被封装返回

public class TeacherChartDataVo {private String name;// bateacherNameprivate List<Integer> data;private static String type "line";private static String stack "Total"; }比如&#xff1a;type 和stack 不会被返回。

LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

背景 楼主决定提升与LLM交互的质量&#xff0c;之前是直接prompt->answer的范式&#xff0c;现在我希望能用上ReAct策略和能够检索StackOverflow&#xff0c;让同一款LLM发挥出更大的作用。 难点 1. 怎样调用StackOverflow step1 pip install stackspi step 2 from la…

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…

计算机视觉之三维重建(7)---多视图几何(下)

文章目录 一、透视结构恢复问题1.1 概述1.2 透视结构恢复歧义1.3 代数方法1.4 捆绑调整 二、P3P问题三、随机采样一致性 一、透视结构恢复问题 1.1 概述 1. 透视结构恢复问题&#xff1a;摄像机为透视相机&#xff0c;内外参数均未知。 2. 问题&#xff1a;已知 n n n 个三维…

java 线程池实现方式

线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建&#xff0c;不需要的时候销 毁&#xff0c;是非常浪费资源的。那么我们就可以使用缓存的策略&#xff0c;也就是使用线程池。 newCachedThreadPool 创建一个可根据需要创建新线程的线程池&#xff0c;但…

基于单片机的有害气体检查系统设计

**单片机设计介绍&#xff0c;基于单片机的有害气体检查系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的有害气体检查系统设计旨在实现对环境中各种有害气体的实时监测与报警&#xff0c;保障人员健康和环境…

什么是原生IP?原生IP的作用是什么?

原生IP&#xff08;Native IP&#xff09;是指直接从互联网服务提供商&#xff08;ISP&#xff09;获得的IP地址&#xff0c;而非通过代理服务器、VPN或其他中间层方式获取。这种IP地址直接与用户的设备或网络关联&#xff0c;无需经过任何中间服务器或代理的转发或隐藏&#x…

物联网实战--驱动篇之(一)EEPROM存储器(AT24C64)

目录 一、驱动概述 二、AT24C64简介 三、驱动编写 四、驱动应用 一、驱动概述 这是驱动篇的第一篇&#xff0c;所以先说明下驱动篇的作用和书写计划。之前的净化器项目已有提及&#xff0c;向ESP8266、SHT30这些都属于驱动设备&#xff0c;主芯片STM32是核心&#xff0c;相…

C++入门4.引用

目录 1.引用概念&#xff1a; 2.引用特性&#xff1a; 3.常引用&#xff1a; 4.使用场景&#xff1a; 引用和指针的区别&#xff1a; 1.引用概念&#xff1a; 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空…

BLE协议—HID

BLE协议—HID HID设备HOGP&#xff08;HID Over GATT Profile&#xff09;HID服务HID infoHID ModeHID ReportHID MAP HID设备 HID&#xff08;Human Interface Device&#xff0c;人机接口设备&#xff09;是USB设备中常用的设备类型&#xff0c;是直接与人交互的USB设备&…

谷歌AI搜寻背后的资本战:收费传言引爆行业震荡|TodayAI

考虑对其AI驱动的搜索工具收费&#xff0c;这一消息在某种程度上让人感到惊讶。毕竟&#xff0c;谷歌超过一半的总收入来自搜索业务&#xff0c;几乎是其次大收入来源的五倍。YouTube订阅、Pixel手机、Play商店佣金以及Gmail存储空间的收入加起来&#xff0c;与搜索业务的价值相…

机台数据传输共享存在哪些问题?机台数据管控怎么做?

一些金融机构、大型制造业以及晶圆制造厂里面&#xff0c;都会存在大量的机台设备&#xff0c;这些机台会产⽣庞⼤⽽属性不同的数据&#xff0c;这些数据需要定期的进行采集和利用。机台数据在传输分享过程中&#xff0c;会面临各种问题和调整&#xff0c;所以需要做好机台数据…

Java 线程池的基本用法

线程池 池化思想&#xff1a;线程池、数据连接池等&#xff0c;比如我们 Spark 的 Executor 就是典型的线程池&#xff0c;用户在启动 Spark 作业的同时启动线程池&#xff0c;这样 Spark 的 Task 就可以直接获取资源&#xff0c;而不用像 MR 程序那样等待容器上的进程开启了。…

一、持续集成介绍

持续集成介绍 一、什么是持续集成二、持续集成的流程三、持续集成的组成要素四、持续集成的好处 一、什么是持续集成 持续集成&#xff08;CI&#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干。持续集成的目的&#xff0c;就是让产品可…

JavaScript前端学习大全

一、概念 JavaScript简称为JS&#xff0c;这门语言诞生主要用于完成页面的数据验证&#xff0c;因此运行在客户端&#xff0c;需要浏览器来解析JavaScript的代码。是世界上最流行的脚本语言。JavaScript 是一种让网页变得有趣和动态的编程语言。比如&#xff0c;当你在网页上点…