【目标检测】49、YOLOF

2023-11-01

在这里插入图片描述

论文:You Only Look One-level Feature

代码:https://github.com/megvii-model/YOLOF

出处:CVPR2021

作者:旷世

时间:2021.03

YOLOF 的贡献点:

  • 通过对比实验发现了 FPN 带来提升的主要原因:分而治之
  • 构建了 Dilated Encoder(抽取不同尺度的上下文特征)和 Uniform Matching(解决由稀疏 anchor 带来的正负样本不平衡问题),弥补了 SiSo 和 MiMo encoder 的 gap
  • 通过和 RetinaNet 、DETR 的对比,证明了 YOLOv4 又快又好的效果

一、背景

在目标检测器中,FPN 越来越成为一个不可或缺的模块,FPN 能够带来两点好处:

  • Multi-scale feature fusion 多尺度特征融合:能够通过融合高分辨率和低分辨率特征来获得更好的特征
  • Divide-and-conquer 分而治之:在不同尺度的特征图上检测不同尺度的目标

所以本文主要研究 FPN 在单阶段检测器上的效果,实验设计为:将多尺度特征融合和分而治之的操作解耦。

细节结构如图 1 所示(Single-S,Multiple-M):

  • 将 FPN 看做 Multiple-in-Multiple-out(MiMo)encoder:其接受来自 backbone 的多尺度特征
  • 将 detection heads 看做 decoder:其接受来自 FPN 的输出

从图 1 中得到的结论:

  • C5 特征包含了充足的上下文特征,能保证检测到不同尺度的目标,让 SiMo encoder 也获得了很好的效果
  • 多尺度融合的作用比分而治之的作用少很多,所以作者发现多尺度融合并不是 FPN 取得优良效果的决定性因素(这点同样被 ExFuse 在语义分割中证明了)。
  • 分而治之由于将复杂的检测问题,通过目标尺度分解成了多个子问题,从而简化了优化的过程

FPN 的分而治之的问题:

  • 虽然分而治之对最终结果起到了很大的作用,但其带来了很多内存需求,减缓了训练速度

YOLOF 如何解决 FPN 中分而治之的问题:

  • YOLOF 通过实验发现 C5 中已经包含了很丰富的特征,所以只使用 C5(下采样 32 倍)来进行后续的预测

在这里插入图片描述
在这里插入图片描述

二、方法

2.1 使用 SiSo 代替 MiMo

在这里插入图片描述

当作者直接使用 SiSo 替换了 RetinaNet 的 MiMo 时,效果出现了很大的下降(如图 3 所示),所以作者发现直接替换有两个问题:

  • C5 特征图中的特征感受野是有限的,会影响不同尺度目标的检测
  • 从 single-level 特征图中生成的 anchor,有不平衡的问题

1、解决问题 1:使用膨胀卷积得到 Dilated Encoder

如图 4a 所示,C5 特征图的感受野只能包含很小的范围,所以当某些目标大小不在这个范围内时,就会无法检测,所以作者需要使用一个包含多种不同感受野的单层特征图。

所以作者在 C5 上使用膨胀卷积的方式,增加了一些感受野范围,如 4b 所示。然后,将 a 和 b 进行结合,就获得了最大的感受野范围,如图 4c 所示。

Dilated Encoder:如图 5 所示,包含两部分,Projector 和 Residual blocks,Projector 的 1x1 conv 用于减少通道维度,3x3 conv 用于空间特征交换。后接接 4 个 Residual blocks,每个 Residual blocks 的 3x3 conv 都使用不同的膨胀率,来生成不同尺度的特征。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2 使用 Uniform matching 代替 Max-IoU matching

2、解决问题 2:大小 anchor 数量不均衡的问题→Uniform matching

在 anchor-based 检测器中,是使用 IoU 来判断正负样本的,RetinaNet 中,如果某个 anchor 和一个真实 box 的 IoU>0.5,则判定该 anchor 为正样本,也称为 Max-IoU matching。

在 MiMo 中,是在每个尺度的特征图上分别生成对应的 anchor,然后分而治之,Max-IoU matching 就能在不同尺度的特征图上匹配到不同尺度的目标。

在 SiSo 中,anchor 的数量大大减少(从 100k 到 5k),导致 anchor 非常稀疏,使用 Max-IoU 就会导致匹配问题。大尺度的真值导致产生了很多大尺度的 anchor,而小尺度的真值产生的 anchor 很少,也就是导致大小 anchor 数量不均衡,如图 6 所示,这会间接导致模型更关注大尺度的物体,忽略小尺度的物体。

Uniform matching:对每个真实框,使用 k 近邻的 anchor 来作为正样本

为了解决上述大小样本数量不均衡的问题,作者提出了 Uniform matching,对每个真实框,使用 k 近邻的 anchor 来作为正样本,这样能够使得每个真实框,都能够和相同数量的 anchor 进行匹配,而不关注 anchor 的尺寸,可以平衡不同大小的 anchor 数量。

Uniform matching 判定正负样本的方式:设置了 IoU 阈值,大于 0.7 的负样本和小于 0.15 的正样本,都会被忽略。

在这里插入图片描述

2.3 YOLOF 的结构

在这里插入图片描述
Backbone:ResNet 和 ResNeXt,输出位 C5 特征,通道为 2048,下采样了 32 倍

Encoder:如图 5,先使用 1x1 和 3x3 得到 512 channel 的特征,然后使用残差网络(1x1 conv 将通道降低 4 倍,3x3 的膨胀卷积来提升感受野,1x1 conv 来升通道)

Decoder:classification head 和 regression head

  • 和 RetinaNet 的第一个不同:参考 DETR 中的 FFN,让两个头的输出通道数不同,分类头是 2 个conv+BN+Relu,回归头是 4 个 conv+BN+Relu
  • 和 RetinaNet 的第二个不同:参考 Autoassign,给回归头中的每个 box 都使用了隐含的 objectness 预测(未直接监督),最终的分类得分是分类得分和 objectness 预测之积。

其他细节:对图像随机平移最大 32 个像素,来弥补稀疏 anchor 的问题。

三、效果

和 DETR 的对比:

在这里插入图片描述

和 YOLOv4 的对比:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】49、YOLOF 的相关文章

随机推荐

  • C++ 纯虚函数和虚函数的区别

    在 C 中 虚函数 Virtual Function 和纯虚函数 Pure Virtual Function 都是用于实现多态性的机制 但它们之间有一些关键的不同 虚函数 Virtual Function 定义 在基类中使用 virtual
  • React路由基础

    React路由 路由使用步骤 编程式导航 路由使用步骤 安装 npm i react router dom D 引入并使用 1 引入路由 import BrowserRouter as Router Route Link from reac
  • 计算机网络实验路由器配置

    路由器配置实验 实验目的及要求 认识路由器的端口 型号 2 掌握路由器的路由配置 理解网络互联的基本原理 实验环境 Packet Tracer V6 实验内容 路由器接口的配置 静态路由配置 默认路由配置 动态路由配置 实验步骤 1 路由器
  • React 函数组件和类组件的优缺点

    React 函数组件和类组件的优缺点 React中的组件可以分为函数组件和类组件 它们各自有一些优缺点 下面是一些常见的观点 函数组件的优点 定义和使用较简单和直观 只需要一个函数即可 对于简单的组件 可以使用函数组件来提高性能和简化开发
  • Arena仿真-基于超市排队的建模分析

    文章目录 Arena仿真作业 一 问题介绍 1 1 模型假设 1 2 优化目标 1 3 约束条件 二 模块设计 2 1 Create模块 2 2 Decide模块 2 3 Assign模块 2 4 Process模块 2 5 Dispose
  • element UI 穿梭框按钮样式修改

    利用Element UI 修改穿梭框的按钮样式 html部分
  • filter 方法常用过滤条件

    encoding utf 8 from sqlalchemy import create engine Column Integer String Float func and or from sqlalchemy ext declarat
  • Java Arrays.sort()自定义排序方法

    Java Arrays sort可以对很多数据类型进行排序 但是当需要对一个比较特殊的数组进行排序的时候 比如一个二维数组 我们要以每组的第一个数大小来排序 则需要我们自己定义一个比较方法 先看看源码 public static
  • 重学Java(四):操作符

    之前我写了一篇 重学Java 四 对象 引用 堆 栈 堆栈 本以为凭借自己8年的Java编程经验足够把这些 吃人 的Java名词解释清楚了 但有网友不以为然 在文章底部评论说 老哥 你真的有8年java开发经验么 告诉我 为什么要用三个句号
  • SylixOS系统简介

    SylixOS是一款嵌入式硬实时操作系统 同其类似的操作系统 全球比较知名的还有VxWorks 主要应用于航空航天 军事与工业自动化领域 RTEMS 起源于美国国防部导弹与火箭控制实时系统 ThreadX 主要应用于航空航天与数码通讯 等
  • 正确理解MySQL的MVCC及实现原理

    MVCC多版本并发控制 目录 MVCC多版本并发控制 前提概要 什么是MVCC 什么是当前读和快照读 当前读 快照读和MVCC的关系 MVCC的实现原理 隐式字段 undo日志 Read View 读视图 整体流程 MVCC相关问题 RR是
  • GlobalCorsConfig跨域文件

    package com config import org springframework context annotation Bean import org springframework context annotation Conf
  • Zabbix的基本使用

    文章目录 一 认识Zabbix 1 简介 2 功能 3 架构 4 数据流 二 项目 1 软件安装和环境部署 2 Zabbix工具的使用 1 创建被控主机 2 中文乱码修复 3 自动发现主机 4 自动注册主机 3 zabbix的API调用 4
  • Pandas中DataFrame的基本操作(增删)

    这是一篇最基础的Pandas用法总结 也方便自己日后进行复习与查询 这一次我们来总结一下Pandas中的一些增删改基本操作 df pd DataFrame F 90 88 85 M 75 97 74 F 82 73 91 M 93 99 9
  • Nginx的rewrite重写跳转和location匹配

    目录 常用的Nginx 正则表达式 location大致可以分为三类 location 常用的匹配规制 location优先级 location示例说明 实际网站使用中 至少有三个匹配规则定义 第一个必选规则 第二个必选规则是处理静态文件请
  • 设计模式-01-模糊理解

    一 概念 设计模式 别人都说它们就像是一个个的模型胚子 不管你们是多么的杂乱无章 只要经过它们的改造 表现出来的就都会是工工整整 标标准准的 而我觉得更确切的比喻应该是像一个制砖块儿的模具 虽然我们不知道为什么砖块儿 不仅要结实 也要外表光
  • python换零钱_Python3算法实例 1.2:动态规划 之 换零钱

    money jpg 问题 基础版 把100元兑换成1元 2元 5元 10元 20元 50元的零钱 共有多少种不同换法 动态规划思想解析 拆解子问题 下面以5元换成1 2 3元的零钱为例 T change target 表示用零钱序列chan
  • mybatisPlus之getById和selectById查询不出结果

    最终导致查询不出结果的原因可能有多种 我这里说出我遇到的一种原因 希望对你有帮助 我是因为在数据库添加了一个字段 没有及时地更新mapper xml中的resultMap导致的 大晚上的写代码 脑子不太好使 2 最近又遇到了一种情况 我数据
  • C 语言设置 Console 文字和背景的颜色的方法

    最近写的一个程序需要在 Console 窗口中输出大量的信息 大量的信息混在一起看着实在是费劲 因此就想到不同的信息用不同的颜色来输出 上网查了一番 win32 API 中有一个函数 SetConsoleTextAttribute 可以做这
  • 【目标检测】49、YOLOF

    文章目录 一 背景 二 方法 2 1 使用 SiSo 代替 MiMo 2 2 使用 Uniform matching 代替 Max IoU matching 2 3 YOLOF 的结构 三 效果 论文 You Only Look One l