背景 & 目标
性能&精度数据

HENet_TinyM
总体结构
参数含义:
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 对应的下采样类型
基础 block 结构
DWCB

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

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

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

S2DDown (Space2Depth Downsample) 使用一个 space to depth 操作进行降采样,以 stride = 2 为例,降采样后,feature 的空间维度将变为原来的 1/2,channel 维度将变为原来的 4 倍。对应的代码实现为:
地平线征程6系列芯片对于 tensor layout 相关操作的高效支持,这一降采样操作得以以较快的速度完成。
HENet_TinyE
HENet_TinyE 结构与 TinyM 类似,以下是总体的结构配置:
使用建议
总体结构使用建议
针对输入输出相近的场景,或者作为主 backbone 使用的场景,我们推荐直接使用 TinyM / TinyE 原生结构。针对其他场景,我们建议参考 TinyM 的基础 block 结构,灵活构建模型。
对于感知模型中的多 camera backbone,我们推荐针对不同类型的 camera 使用不同量级的 backbone,比如对于 front/rear camera,推荐使用较强的结构,对于 side camera,推荐使用较轻量的结构
基础 block 使用建议
如需快速构建 baseline,建议先全局使用 DWCB,然后尝试 GroupDWCB、AltDWCB 等结构提升速度精度
建议在满足 ① channel 数量不太小 ② 较浅的位层 两个条件的 stage 尝试使用 GroupDWCB(例如 stage 2)
建议在层数较多的 stage 尝试交替使用 AltDWCB
建议在 backbone 最开始的降采样中谨慎使用S2DDown,优先尝试带有 overlap 的降采样方法(例如 k=2,s=3 的 conv)


