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

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

芯链情报局2026-08-25
21
0

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

简介

为了提供针对 J6 系列芯片专门设计的高效 backbone,我们充分利用了 J6 芯片的硬件特性,设计了高效模型 HENetHybrid Efficient Network)。HENet 采用了纯 CNN 架构,结合 depthwise conv 构造轻量化 block,并通过 LayerScale 稳定训练,在精度与 J6 平台性能之间取得较好平衡。

性能精度指标

模型

输入大小

J6E 帧率(FPS)

J6M 帧率(FPS)

浮点精度

量化精度

数据集

resnet18

1x3x224x224

2456

3146

72.04

71.64

ImageNet

1x3x704x1280

306

391

/

/

ImageNet

resnet50

1x3x224x224

1092

1490

77.38

76.78

ImageNet

1x3x704x1280

124

168

/

/

ImageNet

efficientnet-b0

1x3x224x224

3379

4004

74.31

73.85

ImageNet

1x3x704x1280

472

620

/

/

ImageNet

mobilenetv2

1x3x224x224

4172

5988

72.63

71.47

ImageNet

1x3x704x1280

732

942

/

/

ImageNet

mixvargenet

1x3x224x224

3928

4114

71.32

70.63

ImageNet

1x3x704x1280

485

653

/

/

ImageNet

vargnetv2

1x3x224x224

2661

3307

73.93

73.17

ImageNet

1x3x704x1280

631

860

/

/

ImageNet

HENet_TinyE

1x3x224x224

2637

3268

77.67

76.92

ImageNet

1x3x704x1280

534

737

/

/

ImageNet

HENet_TinyM

1x3x224x224

2467

3114

78.38

77.62

ImageNet

1x3x704x1280

444

605

/

/

ImageNet

不同OE版本间可能存在差异,请以具体版本实测为准。

模型介绍

HENet 总体分为四个 stage,每个 stage 会进行一次 2 倍下采样,整体由若干基础 block(DWCB / GroupDWCB / AltDWCB)与下采样模块(S2DDown)组合而成。模型实现见 heal/models/backbones/henet.py,基础 block 与下采样模块实现见 heal/models/base_modules/basic_henet_module.py。

HENet_TinyM

总体结构

HENet_TinyM(Hybrid Efficient Network, Tiny for J6M)采用了纯 CNN 架构,总体分为四个 stage,每个 stage 会进行一次 2 倍下采样。以下是总体的结构配置(对应 configs/henet_tinym_imagenet/model.py):

参数含义:

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 然后输出。

whiteboard_exported_image.png

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)用于各 stage 之间的降采样,将降采样与 pointwise conv 合并为一个 stride 卷积,在完成空间降采样的同时完成通道投影,对应代码实现如下:

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

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

HENet_TinyE

HENet_TinyE 结构与 TinyM 类似,以下是总体的结构配置(对应 configs/henet_tinye_imagenet/model.py):

地平线部署说明

HENet 作为针对 J6 平台专门设计的高效 backbone,其结构(depthwise conv、pointwise conv、layer_scale、stride conv 降采样等)均贴合 J6 BPU 的高效算子支持,无需额外改动即可在 J6E/M 上高效部署。以下为量化部署相关说明。

精度优化

浮点精度

HENet 浮点训练采用 AdamW 优化器配合 CosLrUpdater(cosine 退火,warmup 5 epoch)与 SoftTargetCrossEntropy(mixup 开启,mixup_alpha=0.8,cutmix_alpha=1.0)损失,数据增强使用 TimmTransforms(rand-augment rand\-m9-mstd0.5-inc1、RandomErasing re_prob=0.25、bicubic 插值)。TinyM 默认 8 卡 × batch 128 训练 300 epoch,TinyE weight_decay=0.06、TinyM weight_decay=0.05。详细超参与训练命令见 configs/henet_tinym_imagenet/ 与 configs/henet_tinye_imagenet/。

量化精度

HENet 量化采用全 int8 配置,无 QAT 阶段,校准加载本任务 Float 训练产出的 float-checkpoint-best.pth.tar。最新接口下量化配置集中在 qconfig.py 的 QconfigSetter 模板中:校准使用 MSEObserver,predict/deploy 使用 MinMaxObserver 并开启 fix_scale=True,模板为全局 ModuleNameTemplate({"": qint8})+ MatmulDtypeTemplate + ConvDtypeTemplate。
注:TinyE 与 TinyM 的 qconfig 接口一致,仅 model.py 的结构配置不同,量化配置可直接复用。
模型基于int8的量化配置下做calibration,若出现精度掉点问题,可参考用户手册中的量化感知训练--开发指南--精度调优工具使用指南章节做badcase的debug分析,基于debug信息对部分算子配置更高的精度或者尝试手动处理。

总结与建议

训练建议:

  • 针对收敛情况不佳,可适当增加 Step 数。

  • 用于 sparse 模型时,可以尝试对 backbone 配置较大的 lr,不使用 StepLrUpdater。

  • 浮点训练建议采用 AdamW + CosLrUpdater(warmup 5 epoch)+ SoftTargetCrossEntropy(mixup),详细超参见对应 config 目录。

部署建议:

  • 针对输入输出相近的场景,或者作为主 backbone 使用的场景,推荐直接使用 TinyM / TinyE 原生结构;其他场景建议参考 TinyM 的基础 block 结构灵活构建模型。

  • 对于感知模型中的多 camera backbone,建议针对不同类型的 camera 使用不同量级的 backbone:front/rear camera 推荐使用较强的结构,side camera 推荐使用较轻量的结构。

  • 如需快速构建 baseline,建议先全局使用 DWCB,然后尝试 GroupDWCB、AltDWCB 等结构提升速度精度。

  • 建议在满足 ① channel 数量不太小 ② 较浅的位层 两个条件的 stage 尝试使用 GroupDWCB(例如 stage 2)。

  • 建议在层数较多的 stage 尝试交替使用 AltDWCB。

  • 建议在 backbone 最开始的降采样中谨慎使用 S2DDown,优先尝试带有 overlap 的降采样方法(例如 k=2,s=3 的 conv)。

本文介绍了针对 J6 系列芯片专门设计的高效 backbone HENet,通过 DWCB / GroupDWCB / AltDWCB 等基础 block 与 S2DDown 下采样的组合,在 ImageNet 上取得 77.67/78.38 的浮点精度与 76.92/77.62 的量化精度,同时在 J6E/M 上获得较高的部署帧率。

附录

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

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