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

news2024/11/16 8:36:14

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

一、RT-DETR横空出世

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

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

二、初识HGNet

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

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

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

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

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

class ConvBNAct(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)))
        if self.use_act:
            self.act = ReLU()

    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        if self.use_act:
            x = self.act(x)
        return x

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

另外,我们可以看到:

  • 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是使用在了纯激活函数部分:

# refer to https://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/backbones/hgnet_v2.py
class ConvBNAct(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
            if isinstance(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))
        if self.use_act:
            self.act = ReLU()
            if self.use_lab:
                self.lab = LearnableAffineBlock(lr_mult=lr_mult)
                # 激活函数部分添加lab结构

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

# refer to https://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/backbones/hgnet_v2.py
class LearnableAffineBlock(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)

    def forward(self, x):
        return self.scale * x + self.bias

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

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

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

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

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

相关文章

第8章:树

1.树是什么 一种分层数据的抽象模型前端工作中常见的树包括:DOM树,级联选择(省市区),树形控件,…javascript中没有树,但是可以用Object和Array构建树 4.树的常用操作:深度/广度优先遍历,先中后…

【传统方式部署zookeeper集群与迁移至k8s】

zookeeper简介: zk主要服务于分布式系统、配置管理、注册中心、集群管理等;为什么要迁移Zookeeper集群;存储kafka什么数据:kafka有多少节点、topic名称、协调kafka正常运行。ELKKafka收集k8s日志;一、传统方式部署zook…

浙江省区块链数字资产登记中心筹备会议顺利举行

4月25日下午,由浙江省区块链技术应用协会主办、西溪谷管委会、西湖区网联会协办的“浙江省区块链数字资产登记中心筹备会议”在西湖蚂蚁小镇多功能厅顺利举行。 出席本次筹备会议的有中国电子技术标准化研究院区块链研究室主任、IEEE 计算机 协会区块链和分布式记帐…

设计模式--桥接模式

传统方案解决手机操作问题分析 (1) 扩展性问题(类爆炸) 如果我们再增加手机的样式(全面屏) 就需要增加各个品牌手机的类 同样如果我们增加一个手机品牌 也要在各个手机样式类下增加 (2) 违反了单一职责原则 当我们增加手机样式时 要同时增加所有品牌的手机 增大了代码维护成本…

【STM32】基础知识 第九课 STM32启动

【STM32】基础知识 第九课 STM32启动 MAP 文件MAP 文件浅析MAP 文件组成atk_f103.map 文件 启动模式STM32 启动模式 (F1) STM32 启动过程启动文件介绍Reset_Handler 函数介绍堆栈简介 MAP 文件 MAP 文件是 MDK 编译代码后, 产生的集程序, 数据及 IO 空间的一种映射列表文件. 简…

谁是液冷行业真龙头?疯狂的液冷技术!

“人工智能领域AIGC”、“ChatGPT”、“数据特区”、“东数西算”、“数据中心”,可以说是2023年最热的概念,算力提升的背后,处理器的功耗越来越高,想发挥出处理器的最高性能,需要更高的散热效率。 算力井喷之下&…

Blender 建模案例一(1)

目录 1. 指环1.1 创建一个柱体1.2 柱体微调1.3 缩放1.4 应用缩放1.5 物体属性回归默认1.6 进入编辑模式1.7 内插面1.8 桥接循环边1.9 添加表面细分修改器1.10 平滑着色1.11 添加环切 2. 卷轴2.1 添加曲线2.2 进入正交前视图2.3 添加节点2.4 曲线转3D 1. 指环 1.1 创建一个柱体…

Wifi ESL方案介绍

革新点: 7.5寸墨水屏显示WIFI无线通信,极简部署,远程控制按键及LED指示灯指示640*384点阵屏幕锂电池供电,支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命,一次充电可用一年基于现有Wifi环境&#xff…

APS54083 深度调光降压恒流驱动IC 8A LED摩托汽车舞台工作灯IC PWM调光 优化线路图

APS54083 是一款 PWM 工作模式,高效率、外 围简单、外置功率 MOS 管,适用于 5-220V 输入高精度降压 LED 恒流驱动芯片。输出最大 功率150W最大电流 6A。APS54083 可实现线 性调光和 PWM 调光,线性调光脚有效电压 范围 0.5-2.5V.PWM 调光频率范围 1…

第一天 :虚拟机的安装、Centos的安装、FinalShell的安装

Linux学习之虚拟机的安装 一、虚拟机的下载二、虚拟机的安装三、Centos的安装四、vm中安装centos五、finalShell安装 一、虚拟机的下载 1、进入安装官网https://www.vmware.com/cn/products/workstation-pro.html 2、下滑点击试用版下载 3、点击后在新页面下滑,找…

CnOpenData中国汽车能源消耗量数据

一、数据简介 工业和信息化部组织制定的《乘用车燃料消耗量限值》强制性国家标准(GB19578-2021)于2021年7月1日起正式实施,该标准规定了燃用汽油或柴油燃料、最大设计总质量不超过3500kg的M1类车辆在今后一段时期的燃料消耗量限值要求&#x…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式,较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案,具有规模较小、操作灵活、使用方便、经济实用等优点,其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入,…

刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目,把老弟整蒙了! 大家好,我是鱼皮,先把封面图送给大家: 又快到周末了,今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么?他目前大二,听说最近刚刚找到…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识,简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种…

Speech and Language Processing-之最小化编辑距离

今天讲编辑距离。 编辑距离为我们提供了一种量化这两种关于字符串相似度的直觉的方法。更正式地说,两个字符串之间的最小编辑距离定义为将一个字符串转换为另一个字符串所需的最小编辑操作(插入、删除、替换等操作)数量。 如上,图中第一行字符串和第二行…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目,jfinal-layui,然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器,但是从来没有看过相关的源…

【react从入门到精通】react入门这一篇就够了

文章目录 前言什么是 React?安装和配置 React创建 React 组件渲染 React 组件使用 JSX传递属性(Props)处理组件状态(State)处理用户输入(事件处理)组合和嵌套组件写在最后 前言 React 是一种由 …

一些技术管理常见问题笔记

空降管理: 1 真诚靠谱: 思考我们能给上级、下级、公司带来什么价值。 遇到冲突,怎么决策? 团队、合作方了解清楚。 团队同学的简历,工作情况,背景能力有了解。 对应的产品经理、业务方的思维、背景。…

改善电商实时聊天体验的 5 大方法

今天,大多数网站都提供实时聊天支持作为选项。这是因为客户压倒性地将实时聊天列为他们的首选联系方式。 高达86%的消费者愿意在更好的客户体验上花费更多,但只有1%的人的期望始终得到满足,对于能够正确进行实时聊天的品牌来说,这…