目标检测——YOLOR算法解读

论文:YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks
作者:Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao
链接:https://arxiv.org/abs/2105.04206
代码:https://github.com/WongKinYiu/yolor


YOLO系列算法解读:

  • YOLOv1通俗易懂版解读
  • SSD算法解读
  • YOLOv2算法解读
  • YOLOv3算法解读
  • YOLOv4算法解读
  • YOLOv5算法解读
  • YOLOR算法解读
  • YOLOX算法解读

PP-YOLO系列算法解读:

  • PP-YOLO算法解读
  • PP-YOLOv2算法解读
  • PP-PicoDet算法解读
  • PP-YOLOE算法解读
  • PP-YOLOE-R算法解读

文章目录

  • 1、算法概述
  • 2、YOLOR细节
    • 2.1 隐性知识如何工作
    • 2.2 统一网络的隐性知识
  • 3、实验结果
    • 3.1 实验设置
    • 3.2 FPN特征对齐消融实验
    • 3.3 目标检测预测细化消融实验
    • 3.4 多任务规范表征消融实验
    • 3.5 隐式知识建模不同算子比较
    • 3.6 隐式知识提升目标检测


1、算法概述

人类可以通过视觉、听觉、触觉以及过去的经验来“理解”世界。经验可以通过正常学习(作者称之为显性知识),也可以通过潜意识(作者称之为隐性知识)来学习。即对于一段数据,人类可以从显性知识中直接学习到它,也可以从大脑中以前的经验(潜意识)中推导分析它。然而,经过训练的卷积神经网络(CNN)模型通常只能实现一个目标,即直接从数据中学习。一般来说,从训练过的CNN中提取出来的特征通常对其他类型的问题适应性较差。造成上述问题的主要原因是我们只从神经元中提取特征,而没有利用CNN中丰富的隐性知识。在真实人脑运行时,上述隐性知识可以有效地辅助大脑完成各种任务,如下图所示:
图1
隐性知识是指在潜意识中学习到的知识。然而,对于隐性学习如何运作以及如何获得隐性知识,目前还没有一个系统的定义。在神经网络的一般定义中,从浅层获得的特征通常称为显性知识,从深层获得的特征称为隐性知识。论文中将与观测数据(网络输入)直接对应的知识称为显性知识。对于模型中隐含的与观测无关的知识,我们称之为隐性知识。
作者提出了一个统一的网络来整合隐性知识和显性知识,使学习模型包含一个通用的表示,这个通用的表示使得子表示适合于各种任务。图2©说明了该统一网络体系结构。本文构建统一网络的方法是将压缩感知和深度学习结合起来。
图2
借鉴知乎@算法小乔画的YOLOR网络结构图,可以看到作者主要在输出层OutProcess中增加了两个隐性知识向量shift-Channels和Control-Channels,这里的隐性知识向量,就是单独初始化一个向量shape为[1,C,1,1], 其中C与前一层的输出outchannels一致,有点类似于通道注意力的意思,然后在训练过程中,参数随着训练优化更新。shift-Channels将隐性知识向量与前一层的特征通过相加Add的方式进行融合;Control-Channels将隐性知识向量与前一层的特征通过相乘Mul的方式进行融合。
YOLOR网络结构图


2、YOLOR细节

2.1 隐性知识如何工作

本文的主要目的是建立一个能够有效训练隐性知识的统一网络,因此在后续的研究中,我们首先将重点放在如何训练隐性知识和快速推理上。由于隐性表示zi与观测无关,我们可以把它看作一组常数张量Z={z1,z2,⋯,zk}。在本节中,我们将介绍作为常量张量的隐性知识如何应用于各种任务。

  • 多维空间降维
    在这里插入图片描述
    一个好的表征应该能够在它所属的多维空间中找到一个合适的投影,并有助于后续目标任务的顺利完成。例如,如图3所示,如果目标类别可以通过投影空间中的超平面成功分类,那将是最好的结果。在上面的例子中,我们可以利用投影向量的内积和隐式表示来达到降低流形空间维数的目的,有效地完成各种任务。
  • 内核空间对齐
    在这里插入图片描述
    在多任务和多头神经网络中,核空间失调是一个常见的问题,图4(a)举例说明了多任务和多头神经网络中的核空间失调。为了解决这个问题,我们可以对输出特征和隐式表示进行加法和乘法,这样就可以对核空间进行平移、旋转和缩放,以对齐神经网络的每个输出核空间,如图4(b)所示。上述操作模式可广泛应用于不同领域,如特征金字塔网络(FPN)中大目标与小目标的特征对齐、利用知识蒸馏来对齐大模型与小模型、零样本迁移等问题。
  • 更多的功能
    在这里插入图片描述
    除了可以应用于不同任务的功能外,隐性知识还可以扩展为更多的功能。如图5所示,通过引入加法,可以使神经网络预测中心坐标的偏移量。还可以引入乘法来自动搜索锚点的超参数集,这是基于anchor的目标检测经常需要的。此外,点乘法和串联可分别用于执行多任务特征选择和为后续计算设置前提条件。

2.2 统一网络的隐性知识

在本节中,我们将比较传统网络和提出的统一网络的目标函数,并解释为什么引入隐性知识对训练多用途网络很重要。同时,我们还将详细阐述本文提出的方法。

  • 卷积网络
    对于卷积网络的目标函数,如下:
    在这里插入图片描述
    其中x是观测量,即网络的输入,θ代表卷积网络的参数集,fθ(.)代表卷积网络运行;卷积网络训练,即最小化误差ε,使输入x经过卷积网络尽可能贴近真实数据y。
    在这里插入图片描述
    如图6(a)所示,我们需要对同一标注有不同的样本,以获取数据的丰富性。换句话说,我们期望得到的解空间仅对当前任务ti是有区别的,而对各种除ti以外的潜在任务是不变的,其中T={t1,⋯,tn}。
    对于一般用途的神经网络,我们希望所得到的表示能服务于T。因此,我们需要放松ε,以便在流形空间上同时找到每个任务的解,如图6(b)所示。然而,上述要求使得我们不可能用简单的数学方法,如一个one-hot向量的最大值或欧氏距离的阈值来求解ti。为了解决这个问题,我们必须对错误项ε进行建模,以便为不同的任务找到解决方案,如图6( c)所示。
  • 统一网络
    为了训练所提出的统一网络,我们将显性知识和隐性知识结合起来对误差项进行建模,然后用它来指导多用途网络的训练过程。相应的训练公式如下:
    在这里插入图片描述
    其中ϵex和ϵim是分别对观测值x和潜在编码z的显式误差和隐式误差进行建模的运算。gϕ这里是一个特定于任务的操作,用于从显性知识和隐性知识中组合或选择信息。
    已有的将显性知识整合到fθ(.)的方法,可以将(2)改写为(3)。
    在这里插入图片描述
    其中*表示了f和g之间的可能操作。可能是加法、乘法或者串联。
    如果我们把误差项的推导过程扩展到处理多个任务,我们可以得到如下公式:
    在这里插入图片描述
    其中,Z={z1,z2,⋯,zT}是不同任务的隐式编码,Φ是用于从Z生成隐性知识表示的参数,Ψ用于从显式表示和隐式表示的不同组合中计算最终输出参数。
    对于不同的任务 ,我们可以使用下面的公式获得预测:
    在这里插入图片描述
    对于所有的任务我们都从一个统一表示fθ(x),完成特定任务的隐式表示gϕ(z)开始,最后用任务识别器dΨ完成不同的任务。
  • 隐性知识的建模
    隐性知识可用如下方式建模:
    对于Vector/Matrix/Tensor,使用向量z直接作为隐性知识的先验,直接作为隐式表示。(z)
    对于Neural Network,使用向量z作为隐性知识的先验,然后使用权值矩阵进行线性组合或非线性化,从而成为隐式表示。(Wz)
    对于Matrix Factorization,使用多个向量作为隐性知识的先验,这些隐性先验由Z和系数c形成隐式表示。(ZTc)
  • Training
    如果模型一开始没有任何先验的隐性知识,也就是说,它不会对显式表征fθ(x)产生任何影响。那我们就直接初始化一个向量z即可,对于结合操作是相加或串连的,z服从N(0,σ),对于结合操作是乘法的,z服从N(1,σ),这里σ初始化的时候都是接近于0的。z和Φ都是在训练过程中遵循梯度反向传播算法进行优化的。
  • Inference
    因为隐性知识与观测量x无关,所以无论gϕ多么复杂,在推理过程之前都可以被简化为一组常数张量。

3、实验结果

3.1 实验设置

在这里插入图片描述
本文通过FPN中的feature alignment(特征对齐)、目标检测中的prediction refinement(预测细化)、单模型中的multi-task learning(多任务学习)来应用implicit knowledge(隐式知识)(注:本文的多任务学习指特征嵌入、多标签图像分类和目标检测)。使用YOLOV4-CSP作为baseline model,隐式知识添加位置如上图所示,所有训练超参数与Scaled-YOLOv4一致。

3.2 FPN特征对齐消融实验

使用简单的向量隐式表征和加法算子,在FPN的每一个特征映射层添加隐式知识进行特征对齐,各个指标均获得了提升,如表1所示。
在这里插入图片描述

3.3 目标检测预测细化消融实验

使用简单的向量隐式表征和加法算子,在YOLO的每一个输出层添加隐式知识进行预测细化,大部分指标都获得到了一定的增益,如表2所示。
在这里插入图片描述

3.4 多任务规范表征消融实验

当需要同时训练一个被多个任务共享的模型时,由于损失函数的联合优化过程是必须执行的,因此在执行过程中往往会出现多方相互拉动的情况,这种情况将导致最终的整体性能比单独训练多个模型然后集成它们要差。为了解决这个问题,作者提出为训练多任务训练一个规范的表征,通过给每个任务分支引入隐式表征增强表征能力,表3展示了使用简单的向量隐式表征和加法算子进行不同联合训练方式的结果,(检测和特征嵌入联合训练,引入加法隐式表征)取得了最好的对比结果。
在这里插入图片描述

3.5 隐式知识建模不同算子比较

在这里插入图片描述
表4显示了图10中不同算子融合显式表征与隐式表征的结果。
在特征对齐实验中,相加与串联(concat)操作能够提升性能表现,相乘有所下降。特征对齐的实验结果完全符合其物理特性,因为它必须处理全局偏移和所有单个簇的缩放。
在预测细化实验中,由于concat会增加输出维度,所以只比较相加与相乘的效果,在这里相乘的效果更好。这是由于中心偏移在执行预测时使用加法解码,而锚框尺度使用乘法解码,而中心坐标是以网格为界的,影响较小,但人工设置的锚框具有较大的优化空间,因此改进更为显著。
在这里插入图片描述

3.6 隐式知识提升目标检测

按照Scaled-YOLOv4训练过程,先从头训练 300 epochs,然后微调150 epochs,表8展示了目标检测中引入隐式知识的优势。表9与SOTA方法进行了比较,值得注意的是YOLOR并没有增加额外的数据和标注做训练,只通过引入隐式知识的统一网络,YOLOR不仅达到了足可以和SOTA方法比拟的结果,而且速度非常快。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

CAPL如何实现TCP Packet的option字段

在TCP协议中,主机可以根据自身的需要决定TCP通信时是否携带option字段,来扩展TCP功能。option字段属于TCP首部的扩展部分,且是可选项,TCP根据首部中的offset字段值确定TCP报文是否携带option字段。 TCP首部固定的部分有20个字节,如果没有扩展部分(option字段),20个字节…

vue-生成二维码

安装 yarn add qrcodejs2 --save npm install qrcodejs2 --save 使用 <template><div><div id"qrcodeImg"></div><!-- 创建一个div&#xff0c;并设置id --></div> </template> <script> import QRCode from q…

设计模式之简单工厂模式详解

简单工厂模式 工厂模式&#xff1a;工厂方法模式&#xff1b; 低阶&#xff1a;简单工厂模式&#xff1b; 高阶&#xff1a;抽象工厂模式&#xff1b; 1&#xff09;概述 定义一个工厂类&#xff0c;根据参数的不同返回不同类的实例&#xff0c;被创建的实例通常都具有共同…

Linux快速入门,上手开发 01.学习路线

少时曾许凌云志&#xff0c;当取世间第一流 再见少年拉满弓&#xff0c;不惧岁月不飓风 —— 24.3.20 1.Linux的发展历史 2.VM虚拟机的Linux初体验 3.图形化页面设置系统——快速上手 4.命令行操作——向专业前进 5.核心操作命令——必知必会&#xff08;管理企业级权限/定位b…

C++学习之旅(二)运行四个小项目 (Ubuntu使用Vscode)

如果是c语言学的比较好的同学 可以直接跟着代码敲一遍&#xff0c;代码附有详细语法介绍&#xff0c;不可错过 一&#xff0c;猜数字游戏 #include <iostream> #include <cstdlib> #include <ctime>int main() {srand(static_cast<unsigned int>(tim…

(一)基于IDEA的JAVA基础3

通过之前的内容&#xff0c;我们在建好的文件夹下建一个java文件&#xff0c;我们来在IDEA中写一下之前用记事本写的helloworld&#xff0c;我们先看一下java代码的规范: 1.java程序文件名一定要有意义&#xff0c;首字母一定要大写。 2.class后面的名字:由大小写字母&#x…

计算机网络相关

OSI七层模型 各层功能&#xff1a; TCP/IP四层模型 应用层 传输层 网络层 网络接口层 访问一个URL的全过程 在浏览器中输入指定网页的 URL。 浏览器通过 DNS 协议&#xff0c;获取域名对应的 IP 地址。 浏览器根据 IP 地址和端口号&#xff0c;向目标服务器发起一个 TCP…

「滚雪球学Java」:国际化(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

深度学习绘制热力图heatmap、使模型具有可解释性

思路 获取想要解释的那一层的特征图&#xff0c;然后根据特征图梯度计算出权重值&#xff0c;加在原图上面。 Demo 加上类激活(cam) 可以看到&#xff0c;cam将模型认为有利于分类的特征标注了出来。 下面以ResNet50为例: Trick: 使用 for i in model._modules.items():可以…

深度学习500问——Chapter03:深度学习基础(4)

文章目录 3.7 预训练与微调&#xff08;fine tuning&#xff09; 3.7.1 为什么无监督预训练可以帮助深度学习 3.7.2 什么是模型微调 fine tuning 3.7.3 微调时候网络参数是否更新 3.7.4 fine-tuning模型的三种状态 3.8 权重偏差和初始化 3.8.1 全都初始化为0 3.8.2 全都初始化为…

Android Launcher开发注意事项

在开发Android Launcher时&#xff0c;需要关注性能、用户体验、权限管理、兼容性等方面&#xff0c;同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

选择word中的表格VBA

打开开发工具 选择Visual Basic插入代码 Sub 选择word中的表格() Dim t As Table an MsgBox("即将选择选区内所有表格&#xff0c;若无选区&#xff0c;则选择全文表格。", vbYesNo, "提示") If an - 6 Then Exit Sub Set rg IIf(Selection.Type wdSel…

[HFCTF 2021 Final]easyflask

[HFCTF 2021 Final]easyflask [[python反序列化]] 首先题目给了提示&#xff0c;有文件读取漏洞&#xff0c;读取源码 #!/usr/bin/python3.6 import os import picklefrom base64 import b64decode from flask import Flask, request, render_template, sessionapp Flask(_…

HarmonyOS NEXT应用开发之侧滑返回事件拦截案例

介绍 在编辑场景中&#xff0c;存在用户误触返回&#xff0c;导致内容未保存就退出编辑页的现象; 本示例介绍使用NavDestination组件的onBackPressed回调对返回事件进行拦截&#xff0c;提示用户保存编辑内容&#xff0c;并使用preferences实例持久化保存内容。 效果预览图 使…

C数据类型(C语言)---变量的类型决定了什么?

目录 数据类型&#xff08;Data Type&#xff09; 变量的类型决定了什么&#xff1f; &#xff08;1&#xff09;不同类型数据占用的内存大小不同 如何计算变量或类型占内存的大小 &#xff08;2&#xff09;不同数据类型的表数范围不同 &#xff08;3&#xff09;不同类型…

元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略&#xff08;路径&#xff09;案例xpath策略&#xff08;层级、扩展&#xff09;属性层级与属性层级与属性拓展层级与属性综合 csscss选择器&#xff08;id、类、标签、属性&#xff09;id选择器类选择器标签选择器属性选择器案例-…

Spark源码(一)-SparkRPC示例

一、何为SparkRPC RPC全称为远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;它是一种计算机通信协议&#xff0c;允许一个计算机程序调用另一个计算机上的子程序&#xff0c;而无需了解底层网络细节。通过RPC&#xff0c;一个计算机程序可以像调用本地…

谷歌Gemma大模型部署记录

谷歌Gemma大模型部署记录 配置信息 1.系统&#xff1a;Ubuntu20 2.显卡&#xff1a;RTX3060 6G 一、安装Ollama 官网地址&#xff1a;https://ollama.com/download/linux 按照指令安装 curl -fsSL https://ollama.com/install.sh | sh二、运行模型 输入指令&#xff1a;…

【Java】:类和对象

1.面向对象的初步认知 1.1 什么是面向对象 Java是一门面向对象的语言&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序&#xff0c;更符合人们对事物的认知…

【LeetCode-114.二叉树展开为链表】

题目详情&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…