本文的标题所谓“1亿像素都是垃圾”,指的是1亿像素的图像传感器为画质的贡献可能并没有人们想象得那么大,并不是说1亿像素没有意义。既然这4EV主要不是1亿像素图像传感器的功劳,那应该就是ISP(图像处理器)的功劳了?
ISP是专门用于影像处理工作的,包括反拜耳(demosaic)、抑噪、自动白平衡、自动曝光、自动对焦、色彩对比度修正等等,尤其是其中的图像后处理。从图像传感器直接生成的原始影像实际上是不大能被人眼接受的,因此需要经过各种处理后才形成最终的照片输出。
去年华为和三星在其手机芯片发布会上,都提到了ISP与NPU的“融合”,NPU当然就是专用于AI计算的处理器了。三星还为此专门取了个名字叫AISP——应该就是AI+ISP的意思。华为当时宣称是“业界首次实现ISP+NPU的融合架构”。不管这个“业界首次”是否是真的,这种“融合”都相当值得探究。
本文尝试从现有资料,以及我所知的一些不成体系的信息来简单谈谈,这种“融合”究竟是怎么回事,以及AI对于拍照而言的价值在哪儿。本文将AI处理器或单元统称为NPU,不同的厂商对其有不同的称谓,如苹果称其为NE,联发科称其为APU,高通称其为AIE。
NPU与ISP的协同工作事实上,迄今我们依然无法完整地搞清楚,现有智能设备的ISP和NPU之间是怎样协同工作的。华为在发布会上展示的一张图只是个简略的概要图(下图)。其中提到,针对“4K像素级AIVideo处理”,ISP负责颜色/亮度还原、快速对焦,而神经网络完成细节还原、去噪。两者配合来输出影像。
即便我们不清楚ISP和NPU具体如何协同,或者说图像处理通路是如何,NPU在此究竟扮演了什么角色还是有办法搞清楚的。
谷歌Pixel手机在此前的几代产品中引入了PVC(PixelVisualCore)。这是谷歌设计的基于Arm的影像处理器。PVC内部的IPU(imageprocessingunit)本质上是完全可编程的影像、视觉与AI多核专用架构。Pixel二代、三代的多款机型都采用了该处理器。Pixel4之上,迭代产品更名为PixelNeuralCore,应该算是对其AI计算属性的一种强调吧。
从PVC,可一定程度理解这种专用处理器是如何做影像后处理的。PVC主体上包含8个IPU核心,据说是谷歌自己设计的,每个核心有512个ALU单元。谷歌为其配套了开发生态,针对图像处理采用Halide语言,机器学习则为TensorFlow,针对底层硬件有专门的编译器。而Android三方应用开发者直接使用AndroidCameraAPI,就能利用PVC的算力。
Pixel5已经去掉了这种专用芯片,不知后续是否还会继续引入。PVC作为一种手机主SoC(如骁龙处理器)之外的一枚专用加速器,想必其处理时延会比较高,从直觉来看可能不及直接将NPU集成到SoC上的方案——毕竟如今手机SoC的AI算力也是越来越强的。猜测未来的Pixel设备极有可能会弃用这种专门的PVC。
不过谷歌毕竟不是专门的手机芯片制造商,很难直接自己造个专属的手机SoC,为其拍照的设想做最完美的服务(从这里也能看出苹果和华为的优势)。不难想象,当AI计算在影像处理方面的作用越来越大之时,华为、三星这些芯片制造商,也就开始了NPU与ISP的融合工作。
那么现在所谓的“融合架构”要如何体现呢?和此前谷歌这种外置一枚PVC的方案又有何不同?华为公布的少量资料,应该是我们获知ISP、NPU(以及谷歌PVC)如何协同工作的一部分知识碎片。
我们现在仍然不清楚ISP+NPU完整的影像处理通路是什么样。比如可能是先给ISP做处理,然后再转交给NPU做后续各种处理,直接就输出图像了。但这也太过理想,更合理的方案应该是某些处理工作交给ISP(比如自动对焦、自动测光),某些则交给NPU(比如自动白平衡、AI降噪),两种处理器进行影像数据的交替处理。这对两种处理器的通信、协同提出了比较高的要求;另外对究竟哪些工作由ISP处理,哪些工作交给NPU处理这样的问题,也提出了要求。
华为在麒麟9000媒体沟通会上,在NPU环节提到过一个的概念。当时我并没有完全理解,始终认为无非麒麟9000有个系统级LLC,也就是现在手机SoC上普遍会出现的一种systemcache——这种缓存在SoC上面向各种IP模块共享,包括CPU、GPU、NPU等。最早似乎是苹果在A系列芯片上采用此种设计,后续高通、华为也相继跟进。
当时华为Fellow艾伟说:“相对直接访问内存来说,带宽提升了一倍,能效提升15%。”这句话现在想来,可能是指ISP与NPU通信时,部分共享systemcache,而不是去内存转一圈(不过smartcache也有可能是分层的缓存方案,内存或许也会参与)。
华为的这种ISP+NPU融合架构是将每一帧进行“切片”,也就是把每帧的整个画面拆分成更小的单元。ISP与NPU的处理最小单元都成为这种“切片”。ISP在完成一个切片后就可以传递给NPU去处理。这么做不仅降低了NPU的闲置率,应该也能降低带宽消耗。配合所谓的SmartCache,也就提高了两者的工作效率。这应该就是ISP+NPU融合架构的关键所在。
AI在手机拍照中,扮演了什么角色?不过NPU+ISP进行影像处理的关键还是在于,NPU究竟有什么用?如果只是做个画面卡通化处理,或者智能美颜之类,那也没什么太大的意思。事实上,现阶段AI参与影像增强,是部分替代了ISP的工作的。一个比较典型的例子是画面的自动白平衡,以前这是ISP的工作,现在则部分或者全部可转交给NPU去完成。
自动白平衡为什么需要AI去做呢?无非在于传统的自动白平衡修正方案,在很多情况下都没那么靠谱。白天光照充足时,或许还没什么问题,但到了夜晚情况就会比较复杂。
这是AI在自动白平衡中的一个典型应用。在这套方案中,可能涉及的问题主要包括AI算法是否能够获得比ISP传统后处理算法更优秀的结果,NPU如何与ISP协作(包括图像处理通路如何),训练数据如何获取等。
尤其是训练网络所需的数据从哪儿来。谷歌的数据是自己用Pixel手机,或者通过一些方案自行采集的,比如上面这个自动白平衡的例子。这似乎也是谷歌的老传统了。这里还可以举几个用AI实现画质增强的同类例子:
(1)模拟背景虚化
(2)消除画面噪声
(4)HDR+高动态范围
HDR+其实是谷歌一次按下快门,多张短曝光照片堆栈的一种算法。这项特性本身应该并没有加入AI。不过2018年,谷歌宣布向研究社区公开HDR+的这些堆栈照片数据,包括不同对象、亮度、动态范围和亮度的。据说有不少做神经网络研究的paper都采用了这套数据集。HDR+因此也能算是AI拍照的组成部分了吧。
AI拍照将走向何方用训练得到的PyNET网络所做的后处理,与华为P20自己的ISP所做后处理的比较
听起来是个很有意思的思路,当然其实际效果如何又是另一个话题了,有兴趣的同学可前往查看。