专栏算法工具链【地平线工具链参考算法|J6|HEAL】MixVarGENet _v3.0

【地平线工具链参考算法|J6|HEAL】MixVarGENet _v3.0

芯链情报局2026-08-24
13
0

该示例为参考算法,仅作为在J6上模型部署的设计参考,非量产算法

简介

图像分类是视觉感知的基础任务,也是许多检测、分割等下游任务的 backbone 来源。在车端部署时,分类/特征提取网络既要有足够的精度,又要兼顾 BPU 的算力利用与访存带宽约束,因此通常需要针对芯片计算特性做软硬件协同设计。

MixVarGENet 是地平线自研的面向分类任务的高效 backbone,高度秉承"软硬结合"的设计理念,针对征程6芯片的大算力特性做了定制化设计。本参考算法在 ImageNet 上训练验证,其定制化设计见下文「地平线部署说明」。

性能精度指标

模型

数据集

输入大小

浮点精度(Accuracy)

定点精度(Accuracy)

J6M-Latency

J6M-FPS

MixVarGENet

ImageNet

1x3x224x224

0.717

0.714

0.36ms

5464

公版模型介绍

MixVarGENet高度秉承了"软硬结合"的设计理念,针对征程6芯片的大算力特性做了一些定制化设计,是一个面向分类任务的参考模型。其设计思路可以总结为:

  1. 小channel时使用normal conv,发挥芯片大算力优势;

  2. 大channel时引入group conv,缓解带宽压力;

  3. Block内部扩大channel,提升网络算法性能;

  4. 缩短feature复用时间间隔,减少SRAM到DDR访存。

模型设计

MixVarGEBlock

heal/models/backbones/mixvargenet.py定义了 MixVarGENet的backbone,backbone由一个3x3的卷积层mod1()和五个MixVarGEBlock组成。MixVarGEBlock包括head op, stack op,downsample layers,fusion layers四个基本模块,其中后三个模块都是可选模块。如下为MixVarGEBlock的结构图:

并且,head_op 和stack_op都是由BasicMixVarGEBlock(如mixvarge_f2,mixvarge_f4,mixvarge_f2_gb16)这样的基本单元构成。

MixVarGENet模型的主要构成可以用BasicMixVarGEBlock表示:

stage0

stage 1

stage2

stage3

stage4

head_op

mixvarge_f2

mixvarge_f4

mixvarge_f4

mixvarge_f2_gb16

mixvarge_f2_gb16

stack_op

None

2x(mixvarge_f4)

2x(mixvarge_f4)

6x(mixvarge_f2_gb16)

2x(mixvarge_f2_gb16)

注:这里需要指出stage0是不含有stack_op的特殊MixVarGEBlock。

head op和stack op

head op 和stack op 是MixVarGENet中基本的计算单元,共享相同的结构空间,它们都是由BasicMixVarGEBlock组成。

BasicMixVarGEBlock

BasicMixVarGEBlock是构成head_op和stack_op的基本单元,基于J6芯片计算特性对其结构进行了定制化设计。BasicMixVarGEBlock结构示意图如下所示:

BasicMixVarGEBlock的基本结构由两个conv及一个shortcut组成,它在小通道数时使用normal conv,大通道数时使用group conv,还在block内部通过factor扩大通道数来提高模型性能。下面是BasicMixVarGEBlock中的两个conv层的定义代码:

BasicMixVarGEBlock的内部的两个conv层参数mid_channle、conv1_kernel_size、conv1_groups、conv2_kernel_size、conv2_groups都是由类似于"mixvarge_f2"的BasicMixVarGEBlock中的键值对定义的,可以通过配置不同的BasicMixVarGEBlock来组成head op和stack op。

对应代码:heal/models/base_modules/basic_mixvargenet_module.py

BLOCK_CONFIG

mixvarge_f2,mixvarge_f4,mixvarge_f2_gb16的结构是在heal/models/base_modules/basic_mixvargenet_module.py中进行定义的,分别对应着不同结构的BasicMixVarGEBlock,相关配置细节如下表所示:

BasicMixVarGEBlock

Block Config

mixvarge_f2

{"conv2_kernel_size": 1, "padding": 0, "factor": 2}

mixvarge_f4

{"conv2_kernel_size": 1, "padding": 0, "factor": 4}

mixvarge_f2_gb16

{
"conv2_kernel_size": 1,
"padding": 0,
"factor": 2,
"conv1_group_base": 16,
}

上表中的参数含义是:

  • **"conv2_kernel_size""padding"**定义了ConvModule2d卷积核的大小和padding的方式;
  • **"factor"**是Block内部扩大channel的因子,它的取值根据featuremap大小来确定,通常为2的倍数,如果factor=2,那么中间卷积层mid_channle的大小就是in_channels * 2;

  • **"conv1_group_base"**定义了ConvModule2d组卷积运算参数,它的取值根据芯片的计算模式,通常为8的倍数,这样就不会引入额外的padding;

downsample layers

downsample layers是kernel=3,stride=2的卷积,将当前stage的featuremap下采样,以便后续的stage 的fusion layer使用。如下为downsample layers中卷积层的代码:

代码路径:heal/models/base_modules/basic_mixvargenet_module.py

fusion layer

fusion layers是pointwise卷积,用于将前几个stage的featuremap映射到当前stage,比如Stride 16的head_op 的fusion_strides包含了Stride 4和Stride 8的下采样结果。fusion layers的示意图如下所示:

代码路径:heal/models/base_modules/basic_mixvargenet_module.py
MixVarGENetBlock forward函数代码:heal/models/base_modules/basic_mixvargenet_module.py

量化说明

量化配置要点:

  • 全局默认 qint8(ModuleNameTemplate({"": qint8})),Conv 输入/权重均为 qint8,matmul 输入为 [qint8, qint8];
  • 模型量化友好性较好,仅做 Calibration 即可满足量化精度,无需 QAT 训练;如私有数据集上出现量化掉点,可配合精度 debug、敏感度分析工具定位,对敏感算子补充 int16/固定 scale 配置。

configs/mixvargenet_imagenet/qconfig.py

总结与建议

部署建议

  • 小通道场景使用 normal conv(mixvarge_f2/mixvarge_f4)发挥算力,大通道场景使用 group conv(mixvarge_f2_gb16,conv1_group_base=16)缓解带宽压力,conv1_group_base 取值通常为 8 的倍数以避免额外 padding。
  • Block 内部通过 factor 扩大通道数(mid_channle = in_channels * factor)提升算法性能,factor 取值根据 featuremap 大小确定、通常为 2 的倍数;增大 factor 提升精度但增加计算量,需在精度与性能间平衡。
  • fusion layer 通过 pointwise 卷积将前几个 stage 的 featuremap 映射到当前 stage,缩短 feature 复用时间间隔、减少 SRAM 到 DDR 访存;fusion_strides 配置需结合实际 stage 结构选取。

  • 量化采用全局 qint8,结构对量化友好,通常仅 Calibration 即可满足精度;如出现量化掉点,可对敏感算子补充 int16/固定 scale 配置,并配合精度 debug、敏感度分析工具定位。

附录

  1. 参考算法官网(modellabs):https://(待发布)

算法工具链
技术深度解析官方教程征程6
评论0
0/600