146、AI降噪的芯片平台部署——从BM3D到深度学习降噪在高通AI Engine与联发科APU上的移植

146、AI降噪的芯片平台部署——从BM3D到深度学习降噪在高通AI Engine与联发科APU上的移植 146、AI降噪的芯片平台部署——从BM3D到深度学习降噪在高通AI Engine与联发科APU上的移植上个月在调试一款骁龙8 Gen2平台的旗舰机型时,客户反馈夜景模式在ISO3200下涂抹感太重,放大看人脸皮肤像塑料。我第一反应是去查tuning里的降噪强度,结果发现3A和ISP的NR参数都正常,问题出在算法团队新集成的AI降噪模型上——他们把训练好的ONNX模型直接丢给了NPU跑,完全没考虑芯片平台的算子映射和内存布局差异。这让我想起三年前在瑞芯微RK3588上移植BM3D的惨痛经历,那时候还是传统降噪算法,现在换成深度学习模型,坑更多了。先说说BM3D这类传统算法在ISP流水线里的位置。BM3D本质上是分组匹配加协同滤波,计算量集中在块匹配的SAD计算和三维变换域收缩上。在高通Spectra平台上,我们通常把它挂在IFE之后的PCA(Pixel Coprocessor Accelerator)上,或者干脆用GPU的Compute Shader实现。但BM3D有个致命弱点——它对噪声方差的估计非常敏感,一旦ISO超过1600,块匹配的误匹配率急剧上升,产生振铃和伪纹理。所以量产方案里,BM3D往往只用于ISO800以下的场景,高ISO段必须切换成自研的时域降噪加空域边缘保护。现在深度学习降噪模型,比如U-Net变体或者Restormer这类Transformer结构,理论上能覆盖全ISO段,但部署到芯片上就完全是另一回事了。高通AI Engine(Hexagon DSP + HTA)和联发科APU(APU 6.0/7.0)的算子支持列表差异巨大。我踩过最深的坑是LayerNorm——训练时用的LayerNorm在Hexagon上默认不