专栏算法工具链Lane模型精度调优部署示例

Lane模型精度调优部署示例

芯链情报局2025-08-27
123
0

Lane模型采用PTQ链路部署时,INT8量化精度损失明显,希望经过精度调优后,所有校准数据上输出的平均余弦相似度不低于0.99。

1. 校准模型精度调优

首先采用HMCT default INT8量化,校准算法选择了max_asy_perchannel,所有输出平均相似度均未满足需求。

1.1 提升全BPU精度

1.1.1 全INT16精度

设置模型all_node_type为INT16,校准算法选择了max,全INT16精度不满足需求(occlusion和box_arrow输出平均相似度未达0.99):

1.1.2 INT16上限精度

设置模型all_node_type为INT16后,受硬件以及性能限制,模型中仍会存在INT8量化节点:Conv和ConvTranspose权重以及GridSample节点;通过HMCT提供的IR接口将校准模型中所有校准节点数据类型修改为INT16,得到真INT16模型:

验证真INT16校准模型在所有输出上的平均相似度,均能够满足要求,故接下来可以通过补偿误差来完成调优。

1.1.3 补偿量化损失

真INT16模型相比于全INT16模型,额外将Conv、ConvTranspose权重以及GridSample输入输出的数据类型从INT8提升至INT16,最终精度能够满足需求。
首先基于全INT16校准模型,yaml配置debug_mode: "dump_calibration_data" 保存校准数据,通过get_sensitivity_of_nodes输出节点量化敏感度:

接着按照节点敏感度排序修改校准模型,将量化精度从INT8提升至INT16,直到occlusion和box_arrow满足精度需求:



序号


余弦相似度阈值(<=该阈值设置为INT16)

输出相似度

occlusion

box_arrow

Min

Avg

Min

Avg

1

None

0.943404

0.983970

0.755858

0.987496

2

0.999

0.983739

0.997729

0.893116

0.994958

3

0.99

0.952758

0.994116

0.745781

0.987434

由上述表格可知,将Conv_360, Conv_3, Conv_338权重量化精度从INT8提高至INT16,所有输出相似度能够达标;在HMCT全BPU部署时,通过引入一个相同算子来补偿INT8量化导致的精度损失,将量化精度提升到接近INT16:

注:推荐Resize和GridSample采用nearest采样方式,此时算子输出不会引入新数值,误差也能够被补偿掉,否则输出INT8量化也引入额外损失。

1.2 INT16精度调试

补偿Conv_360, Conv_3, Conv_338权重量化损失后,全INT16校准模型精度能够达标,基于误差补偿后的INT8校准模型开始调优,校准模型精度如下:

1.2.1 INT8+INT16混合精度调试

INT8校准模型所有输出均未满足要求,通过get_sensitivity_of_nodes计算节点量化敏感度:

按照余弦相似度排序从前往后的顺序,逐步设置算子INT16量化,校准模型相似度也会随着增加:

序号

余弦相似度阈值

输出相似度

mask

field

attr

backgroud

cls

box

cls_sl

box_sl

occlusion

cls_arrow

box_arrow

1

None

0.874048

0.875366

0.908879

0.976282

0.959749

0.939461

0.959271

0.947069

0.945837

0.942194

0.829580

2

0.99

0.980708

0.987483

0.989023

0.993368

0.991154

0.985205

0.990900

0.990375

0.985721

0.975350

0.963180

3

0.999

0.988858

0.990837

0.994669

0.995994

0.995570

0.994660

0.995466

0.996202

0.991201

0.979100

0.980218

4

0.9995

0.991085

0.991593

0.995369

0.997524

0.995818

0.995149

0.996001

0.996851

0.992633

0.981471

0.982875

经上述测试表格调优,将敏感度阈值小于等于0.9995的敏感节点设为INT16节点,除cls_arrow和box_arrow外,其余输出平均相似度均不低于0.99;cls_arrow和box_arrow共用同一个分支,尝试基于0.9995敏感节点设置INT16的校准模型,配置arrow的输出head子图为INT16,量化配置及输出相似度:

仅box_arrow输出平均相似度未达标,单独指定box_arrow输出重新获取敏感度排序:

按照余弦相似度排序从前往后的顺序,逐步设置算子INT16量化,直到box_arrow输出相似度满足要求:

序号

余弦相似度阈值

输出相似度

mask

field

attr

backgroud

cls

box

cls_sl

box_sl

occlusion

cls_arrow

box_arrow

1

None

0.991085

0.991593

0.995369

0.997524

0.995818

0.995149

0.996001

0.996851

0.992633

0.990650

0.983423

2

0.999

0.993978

0.993429

0.996853

0.998160

0.996915

0.996035

0.997124

0.997249

0.994457

0.992993

0.989119

3

0.9995

0.995126

0.994426

0.997494

0.998554

0.997245

0.996941

0.997775

0.998297

0.995518

0.995444

0.990272

最终通过设置部分敏感节点INT16,模型所有输出的平均相似度均满足要求,量化配置及输出相似度如下:

2. 部署到J6过程

2.1 编译及perf

算法工具链
官方教程
评论0
0/1000