0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

jf_pmFSk4VX 来源:GiantPandaCV 2023-04-27 09:42 次阅读

【前言】前几天疯狂刷屏的RT-DETR赚足了眼球,在精度和速度上体现的优势和性价比远远高于YOLO,而今年ChatGPT、Sam的出现,也让一些吃瓜群众知乎CNN没有未来了,今天的文章,我们简单聊一聊RT-DETR的骨干网络,HGNetv2。

一、RT-DETR横空出世

前几天被百度的RT-DETR刷屏,该提出的目标检测新范式对原始DETR的网络结构进行了调整和优化,以提高计算速度和减小模型大小。这包括使用更轻量级的基础网络和调整Transformer结构。并且,摒弃了nms处理的detr结构与传统的物体检测方法相比,不仅训练是端到端的,检测也能端到端,这意味着整个网络在训练过程中一起进行优化,推理过程不需要昂贵的后处理代价,这有助于提高模型的泛化能力和性能。

9288ca34-e494-11ed-ab56-dac502259ad0.png

当然,人们对RT-DETR之所以产生浓厚的兴趣,我觉得大概率还是对YOLO系列审美疲劳了,就算是出到了YOLO10086,我还是只想用YOLOv5和YOLOv7的框架来魔改做业务。。

二、初识HGNet

看到RT-DETR的性能指标,发现指标最好的两个模型backbone都是用的HGNetv2,毫无疑问,和当时的picodet一样,骨干都是使用百度自家的网络。初识HGNet的时候,当时是参加了第四届百度网盘图像处理大赛,文档图像方向识别专题赛道,简单来说,就是使用分类网络对一些文档截图或者图片进行方向角度分类。

92c91e5e-e494-11ed-ab56-dac502259ad0.png

当时的方案并没有那么快定型,通常是打榜过程发现哪个网络性能好就使用哪个网络做魔改,而且木有显卡,只能蹭Ai Studio的平台,不过v100一天8小时的实验时间有点短,这也注定了大模型用不了。

92e9a584-e494-11ed-ab56-dac502259ad0.png

流水的模型,铁打的炼丹人,最后发现HGNet-tiny各方面指标都很符合我们的预期,后面就一直围绕它魔改。

当然,比赛打榜是目的,学习才是享受过程,当时看到效果还可以,便开始折腾起了HGNet的网络架构,我们可以看到,PP-HGNet 针对 GPU 设备,对目前 GPU 友好的网络做了分析和归纳,尽可能多的使用 3x3 标准卷积(计算密度最高),PP-HGNet是由多个HG-Block组成,细节如下:

93128274-e494-11ed-ab56-dac502259ad0.png

ConvBNAct是啥?简单聊一聊,就是Conv+BN+Act,CV Man应该最熟悉不过了:

classConvBNAct(TheseusLayer):
def__init__(self,
in_channels,
out_channels,
kernel_size,
stride,
groups=1,
use_act=True):
super().__init__()
self.use_act=use_act
self.conv=Conv2D(
in_channels,
out_channels,
kernel_size,
stride,
padding=(kernel_size-1)//2,
groups=groups,
bias_attr=False)
self.bn=BatchNorm2D(
out_channels,
weight_attr=ParamAttr(regularizer=L2Decay(0.0)),
bias_attr=ParamAttr(regularizer=L2Decay(0.0)))
ifself.use_act:
self.act=ReLU()

defforward(self,x):
x=self.conv(x)
x=self.bn(x)
ifself.use_act:
x=self.act(x)
returnx

且标准卷积的数量随层数深度增加而增多,从而得到一个有利于 GPU 推理的骨干网络,同样速度下,精度也超越其他 CNN ,性价比也优于ViT-base模型。

93276482-e494-11ed-ab56-dac502259ad0.png

另外,我们可以看到:

  • PP-HGNet 的第一层由channel为96的Stem模块构成,目的是为了减少参数量和计算量。PP-HGNet
  • Tiny的整体结构由四个HG Stage构成,而每个HG Stage主要由包含大量标准卷积的HG Block构成。
  • PP-HGNet的第三到第五层使用了使用了可学习的下采样层(LDS Layer),该层group为输入通道数,可达到降参降计算量的作用,且Tiny模型仅包含三个LDS Layer,并不会对GPU的利用率造成较大影响.
  • PP-HGNet的激活函数为Relu,常数级操作可保证该模型在硬件上的推理速度。

三、再探HGNetv2

时隔半年,出世的RT-DETR又让我关注起了这个网络,而此时,HGNet已不叫HGNet,就像陈老师已经不是当年的陈老师,阿珍也不是当初那片星空下的阿珍,现在升级换代变成了Pro版本。我们看看v2版本做了哪些变动?最基本的组成单元还是ConvBNAct不变,但该结构添加了use_lab结构,啥是use_lab结构,简单来说就是类似于resnet的分支残差,但是use_lab是使用在了纯激活函数部分:

#refertohttps://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/backbones/hgnet_v2.py
classConvBNAct(nn.Layer):
def__init__(self,
in_channels,
out_channels,
kernel_size=3,
stride=1,
padding=1,
groups=1,
use_act=True,
use_lab=False,
lr_mult=1.0):
super().__init__()
self.use_act=use_act
self.use_lab=use_lab
self.conv=Conv2D(
in_channels,
out_channels,
kernel_size,
stride,
padding=padding
ifisinstance(padding,str)else(kernel_size-1)//2,
groups=groups,
bias_attr=False)
self.bn=BatchNorm2D(
out_channels,
weight_attr=ParamAttr(
regularizer=L2Decay(0.0),learning_rate=lr_mult),
bias_attr=ParamAttr(
regularizer=L2Decay(0.0),learning_rate=lr_mult))
ifself.use_act:
self.act=ReLU()
ifself.use_lab:
self.lab=LearnableAffineBlock(lr_mult=lr_mult)
#激活函数部分添加lab结构

同时,use_lab结构可以通过scale控制分流大小:

#refertohttps://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/backbones/hgnet_v2.py
classLearnableAffineBlock(nn.Layer):
def__init__(self,
scale_value=1.0,
#scale设置分流占比
bias_value=0.0,
lr_mult=1.0,
lab_lr=0.01):
super().__init__()
self.scale=self.create_parameter(
shape=[1,],
default_initializer=Constant(value=scale_value),
attr=ParamAttr(learning_rate=lr_mult*lab_lr))
self.add_parameter("scale",self.scale)
self.bias=self.create_parameter(
shape=[1,],
default_initializer=Constant(value=bias_value),
attr=ParamAttr(learning_rate=lr_mult*lab_lr))
self.add_parameter("bias",self.bias)

defforward(self,x):
returnself.scale*x+self.bias

除此之外,相对于第一版,HGNetv2已摘除了ESE模块,但提供了LightConvBNAct模块,更加具体的内容可参见:https://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/backbones/hgnet_v2.py

PP-HGNetv2的整体结构详见下图:

933aa286-e494-11ed-ab56-dac502259ad0.png

【结尾】 总体而言,HGNet还是一个比较低调的网络,官方也没有过多宣传,但是好不好用,依旧还是使用者说了算,后续如果DETR变体可以在国内常见的板端成熟落地,如瑞芯微,地平线,高通芯片上适配,会给使用者带来更多的选择。


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络
    +关注

    关注

    14

    文章

    7480

    浏览量

    88533
  • 模型
    +关注

    关注

    1

    文章

    3112

    浏览量

    48646
  • ChatGPT
    +关注

    关注

    29

    文章

    1546

    浏览量

    7345

原文标题:简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

文章出处:【微信号:GiantPandaCV,微信公众号:GiantPandaCV】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用Transformer来做物体检测

    导读 本文为一个Facebook的目标检测Transformer (DETR)的完整指南,详细介绍了DETR架构的内部工作方式以及代码。 介绍 DEtection TRansforme
    的头像 发表于 04-25 10:45 2585次阅读
    如何使用Transformer来做物体<b class='flag-5'>检测</b>?

    使用跨界模型Transformer来做物体检测

    这是一个Facebook的目标检测Transformer (DETR)的完整指南。 介绍 DEtection TRansformer (DETR)是Facebook研究团队巧妙地利
    的头像 发表于 06-10 16:04 2162次阅读
    使用跨界模型Transformer来做物体<b class='flag-5'>检测</b>!

    解读目标检测中的框位置优化

    目标检测已经有了长足的发展,总体来说根据阶段个数,可以划分为Two-stage(Faster RCNN)、one-stage(SSD) 或者E2E(DETR)。根据是否基于anchor
    的头像 发表于 06-21 17:40 2503次阅读
    解读<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中的框位置优化

    RT-DETR用114FPS实现54.8AP远超YOLOv8

    最近,基于Transformer的端到端检测器(DETR)已经取得了显著的性能。然而,DETR的高计算成本问题尚未得到有效解决,这限制了它们的实际应用,并使它们无法充分利用无后处理的好处,如非最大值抑制(NMS)。
    的头像 发表于 04-20 09:59 965次阅读

    介绍RT-DETR两种风格的onnx格式和推理方式

    RT-DETR是由百度近期推出的DETR-liked目标检测器,该检测器由HGNetv2、混合编
    的头像 发表于 05-17 17:46 3083次阅读
    介绍<b class='flag-5'>RT-DETR</b>两种风格的onnx格式和推理方式

    Focus-DETR:30%Token就能实现SOTA性能,效率倍增

    目前 DETR 类模型已经成为了目标检测的一个主流范式。但 DETR 算法模型复杂度高,推理速度低,严重影响了高准确度
    的头像 发表于 08-02 15:12 729次阅读
    Focus-<b class='flag-5'>DETR</b>:30%Token就能实现SOTA性能,效率倍增

    一种新型的DETR轻量化模型Focus-DETR

    作者对多个 DETR检测器的 GFLOPs 和时延进行了对比分析,如图 1 所示。从图中发现,在 Deformable-DETR 和 DINO 中,encoder 的计算量分别是 decoder
    的头像 发表于 08-02 15:34 604次阅读
    一种新型的<b class='flag-5'>DETR</b>轻量化模型Focus-<b class='flag-5'>DETR</b>

    华为诺亚提出全新目标检测器Focus-DETR

    为实现模型性能和计算资源消耗、显存消耗、推理时延之间的平衡,Focus-DETR 利用精细设计的前景特征选择策略,实现了目标检测高相关特征的精确筛选;继而,Focus-DETR 进一步
    的头像 发表于 08-02 15:43 519次阅读
    华为诺亚提出全新<b class='flag-5'>目标</b><b class='flag-5'>检测</b>器Focus-<b class='flag-5'>DETR</b>

    DETR架构的内部工作方式分析

    这是一个Facebook的目标检测Transformer (DETR)的完整指南。   介绍 DEtection TRansformer (DETR)是Facebook研究团队巧妙地利
    的头像 发表于 08-30 10:53 927次阅读
    <b class='flag-5'>DETR</b>架构的内部工作方式分析

    基于OpenVINO Python API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,我们将在 Python、C+
    的头像 发表于 10-20 11:15 878次阅读
    基于OpenVINO Python API部署<b class='flag-5'>RT-DETR</b>模型

    第一个基于DETR的高质量通用目标检测方法

    现有的DETR系列模型在非COCO数据集上表现较差,且预测框不够准确。其主要原因是:DETR检测头中用全局交叉注意力替换了原来的卷积,删除了以中心为中心的先验知识;另一方面,DETR
    的头像 发表于 11-01 16:12 645次阅读
    第一个基于<b class='flag-5'>DETR</b>的高质量通用<b class='flag-5'>目标</b><b class='flag-5'>检测</b>方法

    基于OpenVINO C++ API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 Op
    的头像 发表于 11-03 14:30 744次阅读
    基于OpenVINO C++ API部署<b class='flag-5'>RT-DETR</b>模型

    基于OpenVINO C# API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 Op
    的头像 发表于 11-10 16:59 697次阅读
    基于OpenVINO C# API部署<b class='flag-5'>RT-DETR</b>模型

    百度开源DETRs在实时目标检测中胜过YOLOs

    这篇论文介绍了一种名为RT-DETR的实时检测Transformer,是第一个实时端到端目标检测器。
    的头像 发表于 03-06 09:24 1353次阅读
    百度开源DETRs在实时<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中胜过YOLOs

    OpenVINO™ Java API应用RT-DETR目标检测器实战

    本文将从零开始详细介绍环境搭建的完整步骤,我们基于英特尔开发套件AIxBoard为硬件基础实现了Java在Ubuntu 22.04系统上成功使用OpenVINO™ Java API,并且成功运行了RT-DETR实现实时端到端目标检测
    的头像 发表于 03-18 15:04 726次阅读
    OpenVINO™ Java API应用<b class='flag-5'>RT-DETR</b>做<b class='flag-5'>目标</b><b class='flag-5'>检测</b>器实战