YOLO V3 详解

news/2024/4/26 14:30:12/文章来源:https://blog.csdn.net/leeyns/article/details/128103013

YOLO V3

论文链接:YOLOv3: An Incremental Improvement

主要改进

  1. Anchor: 9个大小的anchor,每个尺度分配3个anchor。
  2. Backbone改为Darknet-53, 引入了残差模块
  3. 引入了FPN,可以进行多个尺度的训练,同时对于小目标的检测有了一定的提升 (因为有3个不同大小的feature map 用来做检测)。
  4. Loss function的改进。

Network structure improvement

Backbone: Darknet-53

分别要下采样 32, 16, 8。因此输入的图片尺度一定要是32的倍数。改进点在于引进了残差模块

在这里插入图片描述

FPN-多尺度学习

论文链接: Feature Pyramid Networks for Object Detection

Backbone是一个全卷积的网路结构,不含有全连接层,所以可以适用于各种不同尺度的输入大小。

在这里插入图片描述

多尺度的含义:

  • 3个尺度的feature map 来预测大目标和小目标。
  • 通过上采样的方法将深层的特征与浅层的特征相融合。
  • 比如,52×52的特征是由darknet浅层的细粒度像素级别的特征和深层的语义全局的特征的融合。

Loss Function

预测框分为三种:

  1. 正样本: 与GT的IOU最大
  2. 负样本: 与GT的IOU < 0.5
  3. 忽略样本:与GT的IOU > 0.5 但不是最大的。
    忽略样本不参与loss的计算。

正负样本

  • YOLO v3 只选取与groud truth的IOU最大的预测框进行拟合。而前面两个版本只是按照置信度标签及IOU值进行拟合。
  • 区别于前面版本的YOLO,置信度标签 (objectness score)是预测框和ground truth的IOU值, YOLO v3 对于正样本的置信度标签直接设为1。这样的好处在于,如果是用IOU值作为置信度标签,对于一些IOU值较低的样本不能很好的学习,同时对于小目标IOU对于像素的偏移很敏感。

Loss Function

  • 正样本对于分类和定位学习产生贡献,而负样本只对置信度学习产生贡献。
  • 多标签范式不再使用softmax来进行分类(即假设所有的类别都是互斥的,同一个框只可能属于一个类)。而使用对于每个类别都进行二分类任务,这样的好处在于对于同一个框可能可以存在不同的标签 (e.g. 学生、人).

在YOLOv3中,Loss分为三个部分:

  • 一个是xywh部分带来的误差,也就是bbox带来的loss
  • 一个是置信度带来的误差,也就是obj带来的loss
  • 最后一个是类别带来的误差, 也就是class带来的loss
    在代码中分别对应lbox, lobj, Icls,yolov3中使用的loss公式如下:
    lbox=λcoord ∑i=0S2∑j=0B1i,jobj(2−wi×hi)[(xi−xi^)2+(yi−yi^)2+(wi−w^i)2+(hi−hi^)2]lcls=λclass ∑i=0S2∑j=0B1i,jobj ∑c∈classes pi(c)log⁡(p^i(c))lobj=λnoobj ∑i=0S2∑j=0B1i,jnoobj(ci−c^i)2+λobj∑i=0S2∑j=0B1i,jobj(ci−c^i)2loss=lbox+lobj+lcls\begin{aligned} l b o x &=\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} 1_{i, j}^{o b j}\left(2-w_{i} \times h_{i}\right)\left[\left(x_{i}-\hat{x_{i}}\right)^{2}+\left(y_{i}-\hat{y_{i}}\right)^{2}+\left(w_{i}-\hat{w}_{i}\right)^{2}+\left(h_{i}-\hat{h_{i}}\right)^{2}\right] \\ l c l s &=\lambda_{\text {class }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} 1_{i, j}^{\text {obj }} \sum_{c \in \text { classes }} p_{i}(c) \log \left(\hat{p}_{i}(c)\right) \\ l o b j &=\lambda_{\text {noobj }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} 1_{i, j}^{n o o b j}\left(c_{i}-\hat{c}_{i}\right)^{2}+\lambda_{o b j} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} 1_{i, j}^{o b j}\left(c_{i}-\hat{c}_{i}\right)^{2} \\ l o s s &=l b o x+l o b j+l c l s \end{aligned} lboxlclslobjloss=λcoord i=0S2j=0B1i,jobj(2wi×hi)[(xixi^)2+(yiyi^)2+(wiw^i)2+(hihi^)2]=λclass i=0S2j=0B1i,jobj c classes pi(c)log(p^i(c))=λnoobj i=0S2j=0B1i,jnoobj(cic^i)2+λobji=0S2j=0B1i,jobj(cic^i)2=lbox+lobj+lcls
    其中:
    SSS: 代表grid size
    BBB: box
    1i,jobj1_{i, j}^{o b j}1i,jobj : 如果在i,j 处的box有目标,其值为 1 ,否则为 0
    1i,jnoobj 1_{i, j}^{\text {noobj }}1i,jnoobj  : 如果在i,j 处的box没有目标,其值为 1 ,否则为 0

Focal Loss

为什么YOLO v3使用focal loss效果不好?
Focal loss解决单阶段目标检测,正负样本不均衡,有用的负样本较少的问题。相当于挖掘负样本信息。而YOLO v3对于负样本的IOU阈值设置为0.5过高,因此负样本中其实存在一些疑似正样本的样本,对于这些样本,focal loss基于过高的noise权重会导致效果不好。

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

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

相关文章

R语言生存分析可视化分析

生存分析指的是一系列用来探究所感兴趣的事件的发生的时间的统计方法。 生存分析被用于各种领域&#xff0c;例如&#xff1a; 癌症研究为患者生存时间分析&#xff0c; “事件历史分析”的社会学 在工程的“故障时间分析”。 在癌症研究中&#xff0c;典型的研究问题如下…

Linux redict 输入输出重定向 详细使用方法 文件描述符

Linux redict 重定向 Linux 重定向 在 Linux 系统中&#xff0c;我们需要输入和输出让系统与外部进行交互&#xff0c;比如在我们使用鼠标、键盘等输入设备时其实就是通过输入的方式让数据进行系统中。而系统输出一般就会打印在显示器上、刻录光盘等等。而我们要讲的重定向也…

(二)DepthAI-python相关接口:OAK Pipeline

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

Meta-learning

基本理解 meta learning翻译为元学习&#xff0c;也可以被认为为learn to learn 元学习与传统机器学习的不同在哪里&#xff1f; 元学习与传统机器学习&#xff0c; 这里举个通俗的例子&#xff0c;拿来给大家分享&#xff1f; 把训练算法类比成学生在学校学习&#xff0c;传…

【华为上机真题 2022】字符串分隔

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

[附源码]计算机毕业设计springboot环境保护宣传网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

后端存储实战课总结(上)

创建和更新订单 表设计 最少应该有以下几张表&#xff1a; 订单主表&#xff1a;保存订单基本信息订单商品表&#xff1a;保存订单中的商品信息订单支付表&#xff1a;保存订单支付和退款信息订单优惠表&#xff1a;保存订单的优惠信息 订单主表和字表是一对多关系&#xf…

1.1 统计学习方法的定义与分类

统计学习方法的定义与分类统计学习的概念统计学习的定义统计学习运用到的领域统计学习的步骤统计学习的分类统计学习的概念 统计学习的定义 统计学习 (Statistical Machine Learning) 是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 以计…

第五站:操作符(终幕)(一些经典的题目)

目录 一、分析下面的代码 二、统计二进制中1的个数 解一&#xff1a;&#xff08;求出每一个二进制位&#xff0c;来统计1的个数&#xff09; 解二&#xff1a;&#xff08;利用左我们移或右移操作符和按位与&#xff09; 解三&#xff1a;&#xff08;效率最高的解法&…

【iOS】—— GET和POST以及AFNetworking框架

GET和POST以及AFNetworking框架 文章目录GET和POST以及AFNetworking框架GET和POSTGET和POST区别GETGET请求步骤GET请求代码POSTPOST请求步骤POST请求代码AFNetworking简介添加头文件GETGET方法GET方法参数GET方法代码样例POSTPOST方法第一种&#xff1a;第二种&#xff1a;先来…

C++:STL之Vector实现

vector各函数 #include<iostream> #include<vector> using namespace std;namespace lz {//模拟实现vectortemplate<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;//默认成员函数vector(); …

Netty进阶——粘包与半包(代码示例)

目录一、消息粘包和消息半包的概述1.1、消息粘包1.2、消息半包二、粘包现象代码示例2.1、粘包现象服务端示例代码2.2、粘包现象客户端示例代码2.3、分别启动服务端&#xff0c;客户端&#xff0c;查看服务端结果输出三、半包现象代码示例3.1、半包现象服务端示例代码3.2、半包现…

【强化学习论文】小样本策略泛化的提示决策转换器

文献题目&#xff1a;Prompting Decision Transformer for Few-Shot Policy Generalization 摘要 人类可以利用先前的经验并从少量演示中学习新任务。与旨在通过更好的算法设计实现快速适应的离线元强化学习相比&#xff0c;我们研究了架构归纳偏差对少样本学习能力的影响。我…

不懂单链表? 这篇文章就帮你搞明白

坚持看完&#xff0c;结尾有思维导图总结 链表对指针的操作要求不低链表的概念链表的特性链表的功能(最重要)定义和初始化头插头删细节说明尾插尾删寻找链表元素与打印链表在 某位置后插入删除在某位置的插入删除销毁链表链表的概念 什么是链表 官方概念&#xff1a;链表是一种…

显卡---显卡驱动---CUDA---Cudnn

1. 背景 最近在follow百度的CAE这篇论文时&#xff0c;源码需要的环境为&#xff1a; python 3.7 cuda: 11.0 cudnn: 8.0.4 gcc 8.2 该版本要求与我目前使用的服务器上的CUDA版本不相符合。因此搜索了一篇国外小哥的文章&#xff0c;讲述了如何在一台服务器上安装多个CUDA和Cud…

Node之Express学习笔记

一.Express 1.1什么是Express Express的作用和Node.js内置的http模块类似 专门用来创建Web服务器的 本质&#xff1a;npm上的第三方包&#xff0c;提供快速创建Web服务器的便捷方法 1.2Express能做什么 Web网站服务器&#xff1a;专门提供Web网页资源的服务器 API接口服务器&…

FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)

1、大家好&#xff0c;今天给大家带来的内容是&#xff0c;基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧&#xff08;PS侧数据发送至PL侧并没有实现&#xff0c;但是保留了PL读取PS测数据的接口&#xff09; 2、如果大家用到SoC这种高级功能&#xff0c;那大家应该对于…

Linux进阶-进程间通信(ipc)

进程间通信&#xff1a;数据传输、资源共享、事件通知、进程控制。 Linux系统下的ipc 早期unix系统 ipc&#xff1a;管道&#xff08;数据传输&#xff09;、信号&#xff08;事件通知&#xff09;、fifo&#xff08;数据传输&#xff09;。 system-v ipc&#xff08;贝尔实…

Kubernetes之Pod初始化容器

Kubernetes之Pod初始化容器 概述 ​ 初始化是很多编程语言普遍关注的问题&#xff0c;甚至有些编程语言直接支持模式构造来生成初始化程序&#xff0c;这些用于进行初始化的程序结构称为初始化器或初始化列表。初始化代码要首先运行&#xff0c;且只能运行一次&#xff0c;它们…