地平线高效 backbone: HENet - V1.0

一、背景 & 目标

为了提供针对征程 6 系列芯片专门设计的高效 backbone,我们充分利用了征程 6 芯片的硬件特性,设计了高效模型 HENet (HybridEfficient Network)。

二、性能&精度数据

三、HENet_TinyM

3.1 总体结构

HENet_TinyM (Hybrid Efficient Network, Tiny for 征程 6M) 采用了纯 CNN 架构,总体分为四个 stage,每个 stage 会进行一次 2 倍下采样。以下是总体的结构配置:

markdown 复制代码
# ---------------------- TinyM ----------------------
depth = [4, 3, 8, 6]
block_cls = ["GroupDWCB", "GroupDWCB", "AltDWCB", "DWCB"]
width = [64, 128, 192, 384]
attention_block_num = [0, 0, 0, 0]
mlp_ratios, mlp_ratio_attn = [2, 2, 2, 3], 2
act_layer = ["nn.GELU", "nn.GELU", "nn.GELU", "nn.GELU"]
use_layer_scale = [True, True, True, True]
final_expand_channel, feature_mix_channel = 0, 1024
down_cls = ["S2DDown", "S2DDown", "S2DDown", "None"]

参数含义:

depth:每个 stage 包含的 block 数量

block_cls:每个 stage 使用的基础 block 类型

width:每个 stage 中 block 的输出 channel 数

attention_block_num:每个 stage 中的 attention_block 数量,将用在 stage 的尾部(TinyM 中没有用到)

act_layer:每个 stage 使用的激活函数

use_layer_scale:是否对 residual 分支进行可学习的缩放

final_expand_channel:在网络尾部的 pooling 之前进行 channel 扩增的数量,0 代表不使用扩增

feature_mix_channel :在分类 head 之前进行 channel 扩增的数量

down_cls:每个 stage 对应的下采样类型

3.2 基础 block 结构

3.2.1 DWCB

DWCB (DWConvBlock) 是 HENet 中主要使用的一个基础 block,它在主分支上使用一个 depthwise 卷积进行空间维度的信息融合(k=3x3),然后使用两个连续的 pointwise 卷积进行 channel 维度的信息融合,这种结构一定程度上借鉴了 transformer 中的 attention + mlp 的架构,同时将 latency 控制在一个较轻量级的程度。在 residual 分支上,DWCB 使用了一层可学习的 layer_scale,然后将两个分支的输出做 elementwise_add 然后输出。

3.2.2 GroupDWCB

GroupDWCB 是基于 DWCB 的一个轻量化改进, 相比 DWCB,GroupDWCB 将主分支的第一个 pointwise 卷积改为了 pointwise group 卷积,以此来达到提速的目的。我们在实验中观察到,当满足 ① channel 数量不太小 ② 较浅的位层 两个条件时,GroupDWCB 可以达到精度无损,同时提速的效果,推测可能是 low_level feature 的性质决定的。在 TinyM 中,我们在第二个 stage 使用 GroupDWCB 来构建(g=2)。

3.2.3 AltDWCB

AltDWCB 是基于 DWCB 的一个变种,相比 DWCB,AltDWCB 将主分支的 depthwise 卷积的 kernel 改为了(1,5)或者(5,1),根据 block 所在层次位置交替使用。在我们的实验中,使用 AltDWCB 构建第三个 stage 将带来一定的定能提升。我们推荐在层数较多的 stage 尝试交替使用 AltDWCB。

3.2.4 S2DDown

S2DDown (Space2Depth Downsample) 使用一个 space to depth 操作进行降采样,以 stride = 2 为例,降采样后,feature 的空间维度将变为原来的 1/2,channel 维度将变为原来的 4 倍。对应的代码实现为:

markdown 复制代码
N, C, H, W = x.size()  # self.bs = 2
x = x.view(N, C, H // self.bs, self.bs, W // self.bs, self.bs)  # (N, C, H//bs, bs, W//bs, bs)
x = x.permute(0, 3, 5, 1, 2, 4).reshape(N, C * (self.bs ** 2), H // self.bs, W // self.bs)  # (N, C*bs^2, H//bs, W//bs)

地平线征程 6 系列芯片对于 tensor layout 相关操作的高效支持,这一降采样操作得以以较快的速度完成。

四、HENet_TinyE

HENet_TinyE 结构与 TinyM 类似,以下是总体的结构配置:

markdown 复制代码
# ---------------------- TinyE ----------------------
depth = [3, 3, 8, 6]
block_cls = ["DWCB", "GroupDWCB", "AltDWCB", "DWCB"]
width = [48, 96, 192, 384]
attention_block_num = [0, 0, 0, 0]
mlp_ratios, mlp_ratio_attn = [2, 2, 2, 3], 2
act_layer = ["nn.GELU", "nn.GELU", "nn.GELU", "nn.GELU"]
use_layer_scale = [True, True, True, True]
final_expand_channel, feature_mix_channel = 0, 1024
down_cls = ["S2DDown", "S2DDown", "S2DDown", "None"]

五、使用建议

5.1 总体结构使用建议

  1. 针对输入输出相近的场景,或者作为主 backbone 使用的场景,我们推荐直接使用 TinyM / TinyE 原生结构。针对其他场景,我们建议参考 TinyM 的基础 block 结构,灵活构建模型。
  2. 对于感知模型中的多 camera backbone,我们推荐针对不同类型的 camera 使用不同量级的 backbone,比如对于 front/rear camera,推荐使用较强的结构,对于 side camera,推荐使用较轻量的结构

5.2 基础 block 使用建议

  1. 如需快速构建 baseline,建议先全局使用 DWCB,然后尝试 GroupDWCB、AltDWCB 等结构提升速度精度
  2. 建议在满足 ① channel 数量不太小 ② 较浅的位层 两个条件的 stage 尝试使用 GroupDWCB(例如 stage 2)
  3. 建议在层数较多的 stage 尝试交替使用 AltDWCB
  4. 建议在 backbone 最开始的降采样中谨慎使用 S2DDown,优先尝试带有 overlap 的降采样方法(例如 k=2,s=3 的 conv)
相关推荐
小xin过拟合2 小时前
day20 二叉树part7
开发语言·数据结构·c++·笔记·算法
lxmyzzs3 小时前
【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统
人工智能·深度学习·opencv·算法·计算机视觉·图像算法·仪器仪表识别
Learn Beyond Limits3 小时前
Multi-output Classification and Multi-label Classification|多输出分类和多标签分类
人工智能·深度学习·神经网络·算法·机器学习·分类·吴恩达
张较瘦_3 小时前
[论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
论文阅读·算法·bug
2401_858286114 小时前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
张同学的IT技术日记4 小时前
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++
算法
极客BIM工作室4 小时前
强化学习算法分类与介绍(含权重更新公式)
算法·分类·数据挖掘
KarrySmile4 小时前
Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
数据结构·算法·链表·双指针·快慢指针·hot100·灵艾山茶府
luckycoding4 小时前
1424. 对角线遍历 II
算法·leetcode·职场和发展
CoovallyAIHub4 小时前
基于ICR损失与SVMLP数据集:小目标检测新突破,车牌检测准确率显著提升
深度学习·算法·计算机视觉