一个AI算法可以取代手机的图像处理器,让手机拍出单反的照片。拍照已经是手机的最大卖点,各大厂商都在DxO上玩得不亦乐乎,一亿像素、超级夜景、光学变焦……花样越来越多。但是不同的手机拍出来的纹理是不一样的。一方面镜头模组不同,另一方面图像处理器(ISP)的软件调校也不同。近日,苏黎世联邦理工学院(ETHZ)提出了一种新算法PyNet,可以仅用单一的端到端深度学习模型来替代手机的ISP。它的摄像头算法可以从一部手机移植到另一部手机,而无需使用手机的ISP。哪怕两块手机芯片来自两家厂商,也完全没问题。将华为P20和佳能单反相机5DMarkIV调校的算法移植到黑莓KeyOne上,相较于原来的ISP输出,照片质量有了很大的提升。华为P20采用麒麟970芯片+12像素索尼IMX380摄像头,黑莓KeyOne采用骁龙625+12像素索尼IMX378摄像头。目前PyNET的源代码、数据集和预训练模型已经在GitHub上发布。PyNET原理当我们按下快门后,手机不到一秒就输出了一张图片,但背后的过程却相当复杂。手机拍照时,首先输出的是未经任何修改的原始感光信息文件RAW。RAW通过手机SoC中的ISP进行一系列的处理,专门用于计算图像,将原本暗淡的原图变成明亮的结果。该过程包括:去除噪点、校正白平衡、调整曝光、校正色彩对比度、超分辨率等。现在,越来越多的手机开始使用NPU等AI核心,AI计算能力也越来越强。未来是否可以用NPU代替ISP进行图像计算?这是ETHZ研究人员的想法。研究人员首先收集了20000张华为P20拍摄的RAW原始照片,以及佳能单反5DMarkIV在同一场景下拍摄的照片,作为训练的数据集。但是在训练过程中并没有使用图片的原始大小,而是从图片中选取了一个448×448的窗口,最终生成了48043张RAW-RGB图像对。为了能够将更小规模的训练结果应用到原始尺寸的图片上,PyNET采用了分层架构。下面是PyNET的网络架构,呈倒金字塔形状,可以对图像进行五个不同层次的处理。PyNET体系结构具有多个块,这些块使用不同大小(从3×3到9×9)的卷积过滤器并行处理特征图,然后连接相应卷积层的输出。在较低尺度上获得的输出通过转置卷积层进行上采样,与高级特征图堆叠,然后在后续卷积层中进行处理。PyNET从最低层开始按顺序训练模型。首先在较低尺度上获得良好的图像重建结果,用于处理非常低分辨率的图像和执行全局图像操作。在对底层进行预训练后,将相同的步骤应用于下一层,直到对原始分辨率图像进行训练。由于每个高层都从模型的低层获得了高层的高质量特征,它主要学习重建缺失的低层细节并对结果进行细化。经过训练,华为P20拍摄的RAW原图交给PyNET处理,图像不输华为自家ISP的处理效果。AmazonMechanicalTurk平台人工评分显示,使用PyNet处理的图片观感优于P20。要使用TensorFlow安装和训练PyNET,您需要安装SciPy、NumPy、imageio和pillow。NVIDIAGPU也是必不可少的,因为训练过程中需要CUDA和cuDNN。此外,您需要下载预训练的VGG-19、PyNet模型和RAW-RGB图像对数据集。作者建议模型在具有16GB显存的TeslaV100GPU上进行训练。如果你没有强大的计算资源,你也可以使用开源代码中的dng_to_png.py将RAW格式图片转为PNG格式图片,不过你用的是官方P20和佳能单反的调校结果。论文地址:https://arxiv.org/abs/2002.05509源码:https://github.com/aiff22/PyNET
