JPEGD+VPC+模型推理精度提升建议(Atlas 200/300/500 推理产品

问题描述

JPEGD+VPC+模型推理串联使用,由于宽/高的对齐、输出图片格式等配置问题,可能会导致JPEGD与VPC之间、或VPC与模型推理之间的衔接存在偏差,进而影响整网的推理精度。

精度提升建议

关于JPEGD+VPC+模型推理多个功能串联使用时的一些问题及精度提升建议如下:

  1. JPEGD+VPC串联使用时

    由于JPEGD解码后的输出图片的宽stride*高stride有128*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,在调用VPC的缩放接口acldvppVpcResizeAsync时,需先调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,VPC内部会根据原图宽高自行抠图,然后再执行缩放,实现去除无效数据对图像精度的影响。

    为保证模型推理的精度,建议参见图1图2中的正例来编写代码逻辑。

    通过图1中的反例也可以看出,jpegd解码后,直接将对齐后的宽高作为原图宽高送入VPC,导致模型推理的输入图片存在无效数据,最终可能影响精度。

    JPEGD和VPC的接口调用流程及详细介绍请分别参见JPEGD接口调用流程VPC接口调用流程

  2. 使用VPC时
    • VPC的抠图、缩放两个功能可以通过acldvppVpcCropAsync或acldvppVpcBatchCropAsync接口来完成,该接口的输出图片的宽stride、高stride必须满足16*2对齐,否则接口返回报错。

      AscendCL当前提供了acldvppVpcCropAsync接口进行抠图、acldvppVpcResizeAsync接口进行缩放,抠图和缩放串联使用时,可以直接用acldvppVpcCropAsync接口,性能更优。

    • VPC的抠图、缩放、贴图三个功能可以通过acldvppVpcCropAndPasteAsync或acldvppVpcBatchCropAndPasteAsync接口来完成,该接口的输出图片的宽stride、高stride必须满足16*2对齐,否则接口返回报错。
    • VPC缩放+贴图串联使用时,如果缩放后的图片宽不是16对齐,在贴图时,vpc会增加无效数据(见图2中的反例),使其16对齐,为防止无效数据对后续的推理精度有影响,此处建议用户将宽*高按照16*2对齐的要求进行缩放,见图2中的正例。vpc缩放时,如果完全按vpc等比例缩放,应该输出238*416分辨率的图片,不满足16对齐,存在无效数据,为了使无效数据不影响精度,建议将图片缩放至240*416分辨率。
    • VPC贴图时,贴图与输出图片的左边界距离必须满足16对齐,见图2中的正例。检测网络中、等比例缩放场景下,用户在实际使用时,如果贴图与输出图片的左边界距离d3满足16对齐后,可能导致贴图区域不在输出图片的中心位置,这时需注意,检测框与贴图区域左边界的距离d1=检测框与输出图片左边界的距离d2-d3。

      例如,图2中,在最后的vpc贴图操作中,输出图片的分辨率为416*416,贴图区域的宽是240*416,贴图相对输出图片的左偏移=(416-240)/2=88,但88不是16对齐的,如果想继续贴图,得确保贴图相对输出图片的左偏移为16对齐,例如96。这时,计算检测框与贴图区域左边界的距离d1=d2-96,而不是d2-88。

  3. 模型推理时:

    如果需要硬件AIPP进行色域转换,AIPP色域转换配置中的源图片格式要与VPC的输出图片格式保持一致,如果不一致,例如,VPC的输出格式是yuv420sp,色域转换的配置是yvu420sp(源图片格式)-->rgb888(目标图片格式),uv分量的顺序不同也会影响最后模型推理的精度。

    模型推理的接口调用流程及详细介绍请参见基础推理应用

    色域转换的配置请参见ATC工具使用指南

用户训练模型后,如果在昇腾上验证精度是否达标,建议模型推理前的数据预处理建议与训练模型时的数据预处理过程保持一致。可参考Modelzoo仓中样例代码。

典型案例

图1 典型分类网络示例
图2 典型检测网络示例

示例代码