YOLOX的解耦头结构思考

2023-11-06

问题

YOLOX提出了一个Decoupled Head结构以代替YOLO Head,进而在YOLOv3 baseline的基础上提升了1.1个百分点的mAP,那为什么解耦头结构就能够提升检测效果呢
在这里插入图片描述
在这里插入图片描述

调研

我主要在YOLOX原论文讲述Decoupled Head这一部分,找到了引用的两篇文献,并加以解读。
第一篇文献是Song等人在CVPR2020发表的“Revisiting the Sibling Head in Object Detector”。
文中提出了,在目标检测的定位和分类任务中,存在spatial misalignment的问题,我的理解是两个任务所聚焦和感兴趣的地方不同分类更加关注所提取的特征与已有类别哪一类最为相近,而定位更加关注与GT Box的位置坐标从而进行边界框参数修正。因此如果采取用同一个特征图进行分类和定位,效果会不好,即所谓的misalignment的问题。
下图是原论文的一张图,旨在展示分类和定位所关注的内容是不一致的
在这里插入图片描述
第二篇文献是Wu等人(也是旷视的团队)在CVPR2020发表的“Rethinking Classification and Localization for Object Detection
文中重新对检测任务中的分类和定位两个子任务进行解读,结果发现:fc-head更适合分类任务,conv-head更适合定位任务,如下面图表结果所示。
第一行是对于分类任务而言,红色是fc-head,蓝色是conv-head,可以看到,在分类的分数上,fc-head显然更具优势,特别对于small objects;
第二行是对于定位任务而言,可以看到,在边界框回归IOU值上,conv-head更具优势。
在这里插入图片描述
基于上述的实验结果,该文章设计了一个Double-Head的结构(应该YOLOX的解耦头结构的灵感就是从这里来的),来提升检测的效果。
在这里插入图片描述
从实验结果中也可以看到,使用这种Double-Head的结构,可以将mAP提升2-3个百分点,效果还是很不错的!
在这里插入图片描述

总结

回到最初的问题:解耦头为何能够提升检测效果?
解耦头结构考虑到分类和定位所关注的内容的不同,比如上述Wu等人的论文所展示的。因此采用不同的分支来进行运算,有利于效果的提升!

我认为这就是一个探索的过程。这种共享的头结构最初在Fast RCNN论文中提出,一步到位,可大大提升检测速度,因此当时主要注重速度上的提升。
随着应用的逐渐广泛,包括单阶段、双阶段检测网络的发展,研究人员也逐渐在检测效果上寻找各种能提升的空间。那么对于这种耦头结构,通过实验现象和相关结果可以看到其局限性,因此研究人员提出了诸如Double-Head的结构来提升效果。
同时为了避免计算量的大量增加,比如YOLOX的Decoupled Head结构,会先进行1x1的降维操作,然后再接上分类和定位两个分支,做一个检测效果和速度的trade-off,这也是很常见的一个思路!

附:3篇论文的链接

YOLOX: Exceeding YOLO Series in 2021
Revisiting the Sibling Head in Object Detector
Rethinking Classification and Localization for Object Detection

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

YOLOX的解耦头结构思考 的相关文章

  • 为什么 RNN 需要两个偏置向量?

    In Pytorch RNN 实现 http pytorch org docs master nn html highlight rnn torch nn RNN 有两个偏差 b ih and b hh 为什么是这样 它与使用一种偏差有什么
  • 使 CUDA 内存不足

    我正在尝试训练网络 但我明白了 我将批量大小设置为 300 并收到此错误 但即使我将其减少到 100 我仍然收到此错误 更令人沮丧的是 在 1200 个图像上运行 10 epoch 大约需要 40 分钟 有什么建议吗 错了 我怎样才能加快这
  • pytorch 中的 autograd 可以处理同一模块中层的重复使用吗?

    我有一层layer in an nn Module并在一次中使用两次或多次forward步 这个的输出layer稍后输入到相同的layer pytorch可以吗autograd正确计算该层权重的梯度 def forward x x self
  • 如何更新 PyTorch 中神经网络的参数?

    假设我想将神经网络的所有参数相乘PyTorch 继承自的类的实例torch nn Module http pytorch org docs master nn html torch nn Module by 0 9 我该怎么做呢 Let n
  • 如何计算 CNN 第一个线性层的维度

    目前 我正在使用 CNN 其中附加了一个完全连接的层 并且我正在使用尺寸为 32x32 的 3 通道图像 我想知道是否有一个一致的公式可以用来计算第一个线性层的输入尺寸和最后一个卷积 最大池层的输入 我希望能够计算第一个线性层的尺寸 仅给出
  • Pytorch ValueError:优化器得到一个空参数列表

    当尝试创建神经网络并使用 Pytorch 对其进行优化时 我得到了 ValueError 优化器得到一个空参数列表 这是代码 import torch nn as nn import torch nn functional as F fro
  • torch.stack() 和 torch.cat() 函数有什么区别?

    OpenAI 的强化学习 REINFORCE 和 actor critic 示例具有以下代码 加强 https github com pytorch examples blob master reinforcement learning r
  • 如何使用Python计算多类分割任务的dice系数?

    我想知道如何计算多类分割的骰子系数 这是计算二元分割任务的骰子系数的脚本 如何循环每个类并计算每个类的骰子 先感谢您 import numpy def dice coeff im1 im2 empty score 1 0 im1 numpy
  • 如何在 PyTorch 中对子集使用不同的数据增强

    如何针对不同的情况使用不同的数据增强 转换 Subset在 PyTorch 中吗 例如 train test torch utils data random split dataset 80000 2000 train and test将具
  • 在requirements.txt中包含.whl安装

    如何将其包含在requirements txt 文件中 对于Linux pip install http download pytorch org whl cu75 torch 0 1 12 post2 cp27 none linux x8
  • Pytorch .to('cuda') 或 .cuda() 不起作用并且卡住了

    我正在尝试做 pytorch 教程 当我尝试将他们的设备设置为 cuda 时 它不起作用并且我的代码运行被卡住 有关具体信息 我正在使用 conda 环境 蟒蛇3 7 3 火炬1 3 0 cuda 10 2 NVIDIA RTX2080TI
  • 如何在不安装pytorch的情况下使用pytorch预训练模型?

    我只想在 pytorch 中使用预先训练的模型 而不安装整个包 我可以从 pytorch 复制模型模块吗 恐怕你不能这样做 为了运行模型 你不仅需要经过训练的权重 pth tar 文件 还需要网络的 结构 即层 它们如何相互连接等 该网络结
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 无法在 Windows 10 上构建 Detectron2

    尽管 Windows 上的 Detectron2 没有官方支持 但有很多可用的说明 我尝试按照这些说明进行操作 但最终出现了相同的错误 这是我的设置 OS Windows 10 专业版 19043 1466 微软视觉工作室 2019 CUD
  • 当前向包含多个自动分级节点时,PyTorch 关于使用非完整后向挂钩的警告

    最近升级后 当运行 PyTorch 循环时 我现在收到警告 当前向包含多个自动分级节点时使用非完整后向钩子 训练仍在运行并完成 但我不确定应该将其放置在哪里register full backward hook功能 我尝试将它添加到神经网络
  • 没有名为“torch”或“torch.C”的模块

    希望得到像我 5 这样的解释 因为我已经检查了所有相关答案 但没有一个有帮助 我已经安装了Python 我已经安装了Pycharm 我已经安装了Anaconda 我已经安装了 Microsoft Visual Studio 我有not安装了
  • PyTorch 中的数据增强

    我对 PyTorch 中执行的数据增强有点困惑 现在 据我所知 当我们执行数据增强时 我们保留原始数据集 然后添加它的其他版本 翻转 裁剪 等 但 PyTorch 中似乎并没有发生这种情况 据我从参考文献中了解到 当我们使用data tra
  • 无法在jupyter笔记本中导入torch

    系统 macOS 10 13 6 蟒蛇 3 7 蟒蛇3 我遇到麻烦时import torch在 jupyter 笔记本中 ModuleNotFoundError No module named torch 这是我安装 pytorch 的方法
  • PyTorch 中的后向函数

    我对 pytorch 的后向功能有一些疑问 我认为我没有得到正确的输出 import numpy as np import torch from torch autograd import Variable a Variable torch
  • 如何在 Google Colab 上安装 PyTorch v1.0.0+?

    PyTorch v1 0 0 稳定版是发布于 2018 年 12 月 8 日 https github com pytorch pytorch releases tag v1 0 0成为之后7个月前宣布 https code fb com

随机推荐