147、AI超分在预览流与拍照流的实时化——SR算法在瑞芯微NPU与安霸CVflow上的性能调优

发布时间:2026/8/25 23:56:17
147、AI超分在预览流与拍照流的实时化——SR算法在瑞芯微NPU与安霸CVflow上的性能调优 147、AI超分在预览流与拍照流的实时化——SR算法在瑞芯微NPU与安霸CVflow上的性能调优上周在客户那边调一个4K预览+AI超分的案子,瑞芯微RK3588平台,NPU跑一个轻量SR模型,输入1080P输出4K。客户反馈预览画面掉帧严重,用PerfDog一抓,NPU单帧耗时28ms,加上前后处理,整个pipeline跑到45ms,离16.6ms的预算差了快三倍。当时我盯着trace数据看了半天,心里清楚这不是模型本身的问题——模型才1.2G MACs,理论上RK3588 NPU跑这个量级应该在8ms以内。问题出在哪儿?出在我们把SR当成了一个独立的黑盒模块,塞进了原本为传统ISP设计的流式架构里。先说说预览流和拍照流的本质差异。预览流是连续帧,对延迟极度敏感,每一帧的预算就是16.6ms(60fps)或者33ms(30fps),而且帧与帧之间是流水线重叠的——上一帧还在NPU里跑,下一帧的ISP已经出图了。拍照流是单帧触发,可以接受100ms甚至200ms的延迟,但要求的是峰值画质,不能为了速度牺牲细节。很多工程师把这两条路混在一起调,用同一套SR参数和同一套buffer管理策略,结果就是预览流卡顿、拍照流画质又没拉满。我这次踩的第一个坑是输入格式。瑞芯微NPU的输入tensor默认是NHWC布局,但ISP出来的YUV是NV12,直接喂进去要转成RGB,这个转换在CPU上做,1080P一帧要花3-4ms。当时我图省事,直接在NPU前面加了一个cv::cvtColor,结果整个pipeline的瓶颈就从NPU变成了CPU。后来改成在ISP的scaler输出端直接挂一个RGB888的buffer,让NPU的输入DMA直接从那个buffer里取数,省掉