【前言】前几天疯狂刷屏的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.pyclass 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.pyclass 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变体可以在国内常见的板端成熟落地,如瑞芯微,地平线,高通等芯片上适配,会给使用者带来更多的选择。
F007运放组成的精密限幅放大器
淘宝又过节 移动支付卡位战开打
更广泛领域的AI应用
嵌入式和人工智能之间有怎样的联系
DC产品市场应用及特点
简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2
关于高分子分离膜材料及其研究进展
恩智浦推高整合LED驱动器 应对MOSFET缺货
用于客户服务的人工智能和机器学习工具
数码管驱动语音芯片WT2003H在电子秤的应用
正式打响KA渠道战,智伴科技与新华书店、沃尔玛等众多知名品牌达成合作
在VSCode中使用J-Link调试嵌入式系统
焊盘与丝网图形
STC89C52RC单片机内部系统结构及功能详解
物联网如何控制病毒的传播
半导体保险丝符号图解,半导体保险丝工作原理,半导体保险丝如何选型
LG化学宣布将2020年产量目标上调至90GWh
发烧友福利:草根耳机升级线实力种草,你还在等什么?
深度学习助力罕见病药物研发,让技术进步同样造福少数群体
消除PCI Express配置的复杂性,优化HPEC系统设计