晓查 发自 凹非寺
量子位 报道 | 公众号 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和佳能单反的调教结果了。
论文地址:
https://arxiv.org/abs/2002.05509
源代码:
https://github.com/aiff22/PyNET
作者系网易新闻·网易号“各有态度”签约作者
本文首发于微信公众号:量子位。文章内容属作者个人观点,不代表和讯网立场。投资者据此操作,风险请自担。
【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
最新评论