032、图像分类模型部署后精度下降?预处理管线一致性、归一化对齐与推理加速方案
032、图像分类模型部署后精度下降?预处理管线一致性、归一化对齐与推理加速方案
一、一个让我熬夜三天的bug
去年做某安防厂商的人脸识别门禁项目,模型在PyTorch上跑Top-1准确率91.2%,部署到海思3559A上直接掉到83.7%。当时产品经理拿着测试报告站在我工位旁边,表情像极了发现我偷偷改了他代码里的阈值。我盯着终端里那一串串推理结果,脑子里反复回放训练时的数据增强流程——明明一模一样啊。
后来排查了整整三天,最后发现是预处理管线里一个像素值顺序的问题。训练时用的是OpenCV读图(BGR),但模型输入层默认是RGB,我在训练脚本里做了转换,部署时却忘了在C++推理代码里加这一步。就这么一个顺序颠倒,7.5个百分点的精度就没了。
这种问题在嵌入式部署中太常见了。模型在PC上跑得风生水起,一上板子就拉胯,十有八九是预处理管线没对齐。今天就把我踩过的坑和解决方案掰开揉碎讲清楚。
二、预处理管线一致性——最容易翻车的地方
2.1 像素值范围:0-255 vs 0.0-1.0 vs -1.0到1.0
训练时我们通常用torchvision.transforms.ToTensor(),它自动把像素从0-255缩放到0.0-1.0。但部署到C++环境时,很多人直接拿原始uint8数据喂给模型。
踩坑案例:某次用TensorRT部署ResNet50,训练时归一化到[0,1],部署时忘了除255,结果模型输出全是接近均
