专栏算法工具链地平线Sparse多任务参考算法 SparseBevFusionMultitaskOE-V1.0

地平线Sparse多任务参考算法 SparseBevFusionMultitaskOE-V1.0

芯链情报局2026-01-05
281
0

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

1 简介

SparseBevFusionMultitaskOE模型是一个bev多任务感知模型,包含感知三大任务的检测头:sparse动态检测头,sparse静态元素检测头和通用障碍物检测头。整体的模型结构如下:

sparse bev类模型主要思路是通过关键点投影回camera空间采样并进行预测。因此对于多任务模型来说,不同task之间可以共用的是img_encoder的backbone和neck部分,同时加入辅助分支densedepthnet用于辅助训练,部署时不需要。动态检测、静态要素检测和占用格预测任务可以分别抽象为三个head:detection head(det head)、onlinemapping head(om head)和occupancy head(occ head)。在模型的选择上,我们选取了参考算法已集成的,也是较主流的模型-sparse4d、maptr、flashocc,在J6上部署的效果更好。

2 性能精度指标

模型信息

精度(浮点/qat)

J6M性能

模型

数据集

Input shape

backbone

num_anchor

det

om

occ

FPS

Latency

NDS

mAP

mAP

 

bev_sparse_henet_tinym_nuscenes

Nuscenes

6x3x256x704

HENET

384

0.5421/0.5323

0.4339/0.42222

-

-

79

 

12.92ms

 

maptroe_sparse_henet_tinym_nuscenes

Nuscenes

6x3x256x704

HENET

100

-

-

0.5982/0.5959

-

77

13.22ms

flashocc_henet_lss_occ3d_nuscenes

Nuscenes

6x3x512x960

HENET

bevsize 128x128

-

 

-

-

0.3674/0.3642

119

 

8.39ms

 

SparseBevFusionMultitaskOE

Nuscenes

6x3x256x704

 

HENET

sparse4d:384

maptr:100

flashocc:bevsize 128x128

0.5234/0.5214

0.41/0.41

0.5958/0.5906

31.89/33.31

35

28.6ms

注:flashocc掉点为分辨率降低导致;sparse动态目标检测掉点会在后续版本中优化。

3 地平线部署说明

sparse多任务模型的每个head是基于公版模型做了优化后部署的,以下为模型相较于公版的改动点:

模块

改动点

input

统一为6x3x256x704

backbone

img_encoder和bev_encoder均使用henet

neck

img_encoder 使用MMFPN,返回所有层的feat

Sparse head

  • num_anchor和num_temp_instances降低。num_abchor 900num_anchor和num_temp_instances降低。num_abchor 900-->384;num_temp_instances 600384;num_temp_instances 600-->128

  • 一阶段生成的featuremap只使用第二层(stride=16),非公版的使用4层。

  • 去除instance的update

  • 新增get和cache对当前帧的anchor、feature 和temp帧做融合(cat),精度上有提升

  • DeformableFeatureAggregation中kps_generator直接使用offset(linear)生成,非公版的基于anchor生成

  • RefinementModule对速度去除refine计算

maptr head

  • 一阶段生成的featuremap只使用第二层(stride=16)

  • bev_decoders采用sparse 方式,在性能更高的情况下保持了精度

occ head

  • BEV网格大小由公版的200x200调整为128x128

  • view_transform使用地平线针对性优化后的LSSTransformer来替换公版中的bevpooling实现的LSSViewTransformer,且移除了公版中的时序融合模块

详细可以参考单任务模型的参考文档的改动说明章节:

地平线静态目标检测 MapTR 参考算法-V2.0 - 地平线开发者社区

地平线3D目标检测 bev_sparse 参考算法-V2.0 - 地平线开发者社区

地平线占用预测FlashOcc参考算法-V1.0 - 地平线开发者社区

3.1 训练策略

3.1.1 浮点训练

(一)数据结构说明

参考算法已有的三个单任务模型都是基于nuscenes数据集的,它同时包含三个任务的标注数据。其中dataset使用NuscenesSparseMapDataset,包含了地图相关的标注。

NuscenesSparseMapDataset继承自NuscenesMapDataset和NuscenesBevDataset,同时含有动态、静态和occ的标注。因此多任务模型选用NuscenesSparseMapDataset作为数据集,可以同时对动态、静态和occ任务一起监督训练;动态检测头用到了时序信息,所以 data_loader 采用了 DistStreamBatchSampler,确保数据按时序返回。
训练集和测试集的处理流程见:hat/data/datasets/nuscenes_map_dataset.py

(二)训练架构

HAT使用的是注册机制,模型结构和参数在config(configs/bev/bev_sparse_det_maptr_flashocc_henet_tinym_nuscenes.py)中通过dict定义,在config中构建多个head的dict,然后通过配置enable_xx_head参数选择需要合入的任务。

构建一个OrderedDict,通过标识选择加入哪些模型,然后在整体model中,传入task_heads。

多任务的forward流程为遍历dict(每个dict可以理解为一个task_head),依次执行各自的head,代码可见:hat/models/structures/sparse_multitask.py

注:为了兼容lidar融合的模型,head中保留lidar_feature,在不使用lidar net的情况下lidar_feature=None

(三)训练策略

SparseBevFusionMultitaskOE模型在训练上:

  • SparseBevFusionMultitaskOE模型为同源数据集,多个任务一起训练,非单独的训练某个head。

  • 模型训练时需要增加添加BevRotation,经过在nescenes上验证,不添加会导致掉点。

  • 训练策略复用了单任务模型 。

  • 对模型配置loss weight,根据模型表现动态的调整权重值。

3.1.2 模型量化

  为量化精度保证,我们采取了HistogramObserver的校准方式(OE 3.7.0 版本及以后支持),精度上优于MSEObserver。校准数据为训练数据,校准的step为50,无qat训练。
q_template为量化配置,分为全局的配置和自定义的ModuleNameTemplate、基于敏感度的SensitivityTemplate算子的配置。ModuleNameTemplate主要作为全局量化配置和个别层的量化配置,被用于配置全局量化类型和对算子配置int16、固定算子的scale操作,以上都是基于经验的。SensitivityTemplate为敏感度的配置,它是基于debug结果,对敏感排行较高的算子通过topk_or_ratio配置int16算子比例。详细的使用方法可见用户手册量化感知训练--开发指南--Qconfig详解 章节。

 

在多任务时,建议先将已知的在单任务中需要fix-scale的层(特别是具有物理意义、范围固定的op)做固定scale处理、对已知需要int16精度的算子配置高精度。例如动态单任务的fix-scale为:

多任务时可以做复用:

模型基于int8的量化配置下做calibration,若出现精度掉点问题参考用户手册中的量化感知训练--开发指南--精度调优工具使用指南 选取badcase做debug分析,基于debug信息对部分算子配置更高的精度或者尝试手动处理。

多任务量化推荐流程:

若未部署过单任务则可以按照用户手册推荐流程(量化感知训练--开发指南--量化精度调优指南做部署。

4 总结与建议

4.1 部署建议

  • 尝试训练时增加数据增强(BEV Rotate)提高模型的泛化能力

  • 对精度较差的任务可以适当的增大loss weight

  • 量化优先尝试HistogramObserver校准方式

  • 多任务量化时建议基于单任务的经验,对需要固定scale的算子做fixscale,可以有效缩短量化周期。

 

本文通过对SparseBevFusionMultitaskOE在地平线征程6上量化部署的优化,使得模型在J6M上得到latency为28 ms的部署性能,同时,通过SparseBevFusionMultitaskOE 的部署经验,可以推广到其他多任务模型的部署中。

算法工具链
社区征文征程6官方教程
评论0
0/1000