一个AI算法就能代替手机图像处理器,让手机拍出单反味儿

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

拍照已经是手机最大的卖点,各大厂商在DxO上刷分刷得不亦乐乎,一亿像素、超级夜景、光学变焦……花样越来越多。

然而不同手机拍出来的质感却不一样,一方面是镜头模组不同,另一方面是对图像处理器(ISP)的软件调教也不同。

最近,苏黎世联邦理工学院(ETHZ)提出一个新的算法PyNet,只需单个端到端深度学习模型,就能替代手机的ISP。

它调教出的相机算法可以从一个手机移植到另一个手机上,而不必使用手机的ISP。即使两款手机芯片来自两家厂商,也完全没问题。

用华为P20和佳能单反相机5D Mark IV调教的算法,移植到黑莓手机KeyOne上,照片质量与原始ISP输出相比,有了很大的改善。

华为P20使用的是麒麟970芯片+1200万像素索尼IMX 380摄像头,黑莓KeyOne使用的是骁龙625+1200万像素索尼IMX 378摄像头。

目前,PyNET的源代码、数据集、预训练模型都已经在GitHub上发布了。

PyNET原理

我们按下快门后,手机在不到一秒时间里就输出了一幅图片,背后过程却相当复杂。

手机拍照时,首先输出的是原始不带任何修饰的感光信息文件RAW。

RAW经过手机SoC中专门用于运算图像的ISP经过一系列处理,将原本暗淡的原始图像变成艳丽的结果。

这其中的过程包括:去除噪点、修正白平衡、调整曝光量、校正色彩对比度、超分辨率等等。

现在,越来越多的手机开始用上NPU等AI核心,AI运算能力越来越强,未来是否可以用NPU来代替ISP做图像运算呢?这就是ETHZ研究人员的思路。

研究人员首先采集2万张华为P20拍摄的RAW原始图片,和同样场景下Canon单反5D Mark IV拍摄的照片,以此作为数据集进行训练。

但是训练过程中并没有使用原尺寸的图片,而是448×448的窗口从图片上选取一部分,最后 产生了48043个RAW-RGB图像对。

为了能够把较小尺度上训练的结果用于原尺寸图片上,PyNET采用了分级的架构。

以下就是PyNET的网络架构,该模型具有倒金字塔形状,能以五个不同的级别处理图像。

PyNET架构具有多个块,这些块与不同大小的卷积滤波器(从3×3到9×9)并行处理特征图,然后将相应的卷积层的输出进行级联。

在较低尺度下获得的输出将通过转置的卷积层进行上采样,与高级的特征图堆叠在一起,然后在随后的卷积层中进行处理。

PyNET从最低层开始,对模型进行顺序训练。先在较低尺度上获得良好的图像重建结果,用于处理分辨率非常低的图像并执行全局图像操作。

对底层进行预训练之后,再将相同的步骤应用于下一个级别,直到对原始分辨率图像进行训练为止。

由于每个较高级别都从模型的下部获得了高级的高质量特征,因此它主要学习重建缺失的低级细节并完善结果。

经过训练后,将华为P20拍摄的RAW原始图像交给PyNET处理,图片不输华为自带ISP的处理效果。

在Amazon Mechanical Turk平台上的人工打分显示,用PyNet处理的图片观感优于P20直出效果。

安装和训练

PyNET用TensorFlow实现,需要安装SciPy、NumPy、imageio和pillow,英伟达GPU也是必不可少的,因为训练过程中需要用到CUDA和cuDNN。

此外还需要下载预训练的VGG-19、PyNet模型,以及RAW-RGB图像对数据集。

作者推荐模型在具有16GB显存的Tesla V100 GPU上进行训练。

如果你没有强大的计算资源,也可以利用开源代码中的dng_to_png.py将RAW转换为PNG格式图片,不过你用的就是官方P20和佳能单反的调教结果了。

相关推荐