尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

018、安霸CVflow架构:4K/8K ISP与AI加速器协同流水线的工程化设计

018、安霸CVflow架构:4K/8K ISP与AI加速器协同流水线的工程化设计 018、安霸CVflow架构4K/8K ISP与AI加速器协同流水线的工程化设计去年年底有个车载项目客户拿了一颗安霸CV22S过来要求做8路1080p30的环视拼接加实时行人检测。方案评审时大家觉得挺简单——CV22S标称支持4K ISPAI算力也有4TOPS8路1080p才相当于2路4K的像素吞吐怎么算都够。结果样机一跑ISP带宽直接爆了AI加速器闲得发慌整机功耗却飙到7瓦散热片烫得能煎鸡蛋。后来把ISP的HDR管线从三帧合成改成两帧合成又把AI任务的输入分辨率从1080p降到720p才勉强压回5.5瓦。这个项目让我彻底明白一件事安霸的CVflow架构跟高通、海思完全是两套设计哲学你不能拿做手机ISP的思路去套它。先说说CVflow的流水线本质。安霸的ISP不是像高通Spectra那样把RAW域处理、RGB域处理、YUV域处理做成三个独立硬件模块而是把整个图像信号处理链拆成几十个微引擎micro-engine每个引擎只干一件小事比如去噪、去马赛克、色彩校正、伽马映射然后通过内部的DMA和共享内存把它们串起来。这种设计的最大好处是灵活性——你可以把某个引擎的输入输出任意重排甚至跳过某些引擎直接让RAW数据进AI加速器。但坏处也明显每个引擎的带宽和延迟都不一样一旦流水线设计不合理某个引擎就会成为瓶颈而且这个瓶颈往往不在你直觉认为的地方。我见过太多工程师在CVflow上栽跟头第一个坑就是以为ISP输出分辨率等于传感器分辨率。CV22S的ISP标称支持4K但那是单路输入的情况。当你做多路拼接时ISP的像素处理引擎是分时复用的每增加一路输入每路的处理帧率就会下降。更关键的是安霸的ISP内部有一个叫“像素总线”的东西它的总带宽是固定的不管你接几路传感器。我们当时8路1080p30每路像素时钟是148.5MHz8路加起来就是1.188GHz直接超过了像素总线的极限。后来查了芯片手册CV22S的像素总线极限是900MHz超了30%。解决方案要么降帧率到25fps要么把传感器输出改成10bit RAW而不是12bit因为像素总线是按位宽算带宽的。我们最后选了10bit画质损失在可接受范围内但这件事提醒我看安霸的datasheet别只看“支持4K”要算总像素吞吐。第二个坑是AI加速器和ISP的协同方式。CVflow的AI加速器不是独立于ISP的模块它跟ISP共享同一套内存系统而且AI加速器的输入可以直接从ISP的某个中间节点拉数据不需要经过DDR。这个特性用好了能省大量带宽和延迟但用不好就会互相干扰。我们当时做行人检测一开始老老实实让ISP输出YUV420的1080p图像然后通过DDR送到AI加速器。结果发现AI加速器的DDR带宽占用率高达40%导致ISP的3A统计模块偶尔丢数据画面出现闪烁。后来改成让AI加速器直接从ISP的RGB域中间节点拉数据输入分辨率降到720pDDR带宽占用率直接降到5%而且因为跳过了YUV转换和缩放AI推理的延迟还降低了3毫秒。这个改动只花了半天时间但效果立竿见影。这里要特别强调一下安霸的“中间节点直连”机制。CVflow的ISP内部有几十个tap point每个tap point都可以配置成输出到DDR或者直接输出到AI加速器的SRAM。但有个限制AI加速器的SRAM只有几兆字节你不可能把整帧1080p数据塞进去。所以实际做法是把图像切成tile比如128x128的块ISP处理完一个tile就立即送到AI加速器AI加速器算完再送下一个tile。这种流水线方式要求ISP和AI加速器的处理速度必须匹配否则要么ISP等AI要么AI等ISP。我们当时调这个tile流水线花了两周核心问题是ISP的3A统计需要整帧信息但tile流水线是逐块处理的导致3A收敛变慢。解决办法是把3A统计改成两遍第一遍快速扫描低分辨率帧做全局统计第二遍用全局统计参数处理全分辨率tile。这个方案在安霸的SDK里有现成接口但默认是关闭的需要手动开启。再说说安霸的SDK和工具链。跟高通、海思比安霸的文档简直可以用“简陋”来形容。但它的调试工具其实很强大只是你需要花时间适应。我最常用的是它的ISP pipeline可视化工具可以实时显示每个引擎的输入输出图像、带宽占用、延迟分布。这个工具帮我们找到了一个隐藏很深的bug某个引擎在特定光照条件下会输出全黑帧但工具显示它的输入是正常的问题出在引擎内部的某个寄存器配置溢出。这种问题在真机上几乎不可能靠肉眼发现没有工具就是大海捞针。还有一个工程化细节容易被忽略安霸的ISP支持“多传感器时分复用”但切换传感器时会有几十毫秒的黑帧。如果你做的是车载环视这个黑帧在拼接画面里会表现为一条明显的闪带。我们当时的解决方案是让ISP在切换传感器时先输出上一帧的缓存数据同时新传感器开始曝光。这个功能在SDK里叫“seamless switch”但需要你手动配置每个传感器的曝光时序。我们调了一个星期才做到切换时画面无感关键是把传感器的VSYNC和ISP的帧同步信号对齐误差要控制在1微秒以内。最后说一个关于功耗的教训。CVflow的AI加速器在满载时功耗不低但它的待机功耗控制得很好。问题在于ISP和AI加速器共享电源域你不能单独关掉其中一个。我们一开始为了省电试图在AI任务空闲时把加速器时钟降到最低结果发现ISP的3A统计模块也依赖这个时钟导致自动曝光变得迟钝。后来查了芯片手册发现CVflow有一个“低功耗流水线”模式可以把ISP的某些引擎和AI加速器一起降频但代价是帧率下降。对于我们的应用来说帧率从30fps降到25fps完全可接受但功耗降了1.2瓦。这个模式在SDK里默认是关闭的而且文档里只提了一句“适用于低帧率场景”不仔细看根本发现不了。经验总结几条实在的。第一拿到安霸芯片先算像素总吞吐别信“支持4K”这种话要算总像素时钟乘以位宽再跟芯片的像素总线极限对比。第二AI加速器尽量用中间节点直连别走DDR但要注意tile大小和3A统计的冲突。第三安霸的SDK里藏着很多“隐藏功能”比如seamless switch、低功耗流水线、两遍3A统计这些功能文档里往往一笔带过但实际价值巨大建议把SDK的每个配置项都翻一遍。第四调试工具一定要用起来安霸的pipeline可视化工具能帮你省一半的调试时间。第五别拿高通或海思的经验直接套安霸它的设计哲学是“软件定义流水线”你得先理解它的微引擎架构才能做出合理的工程决策。这个项目做完后我最大的感受是安霸的CVflow是一套为AIoT和车载量身定制的架构它的灵活性远超传统ISP但灵活性意味着你需要更深入地理解硬件细节。如果你只是想把一个现成的ISP算法跑起来安霸可能不是最省事的选择但如果你要做多路、多任务、AI协同的复杂系统安霸的潜力值得你花时间去挖掘。
返回列表