一個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和佳能單反的調教結果了。
論文地址:https://arxiv.org/abs/2002.05509
源代碼:https://github.com/aiff22/PyNET