首頁>攝影>

去年我們在多篇文章中提到過,智慧手機10多年來,成像質量的提升超過了4EV。從直覺來看,這些提升最大的功臣應該是影象感測器及光學系統的發展。不過事實上,DxOMark總結認為,這4V的提升僅有1.3EV是來自影象感測器和光學系統的提升,還有3EV來源於影象處理,或傳說中的計算攝影(Computational Photography)。

本文的標題所謂“1億畫素都是垃圾”,指的是1億畫素的影象感測器為畫質的貢獻可能並沒有人們想象得那麼大,並不是說1億畫素沒有意義。既然這4EV主要不是1億畫素影象感測器的功勞,那應該就是ISP(影象處理器)的功勞了?

ISP是專門用於影像處理工作的,包括反拜耳(demosaic)、抑噪、自動白平衡、自動曝光、自動對焦、色彩對比度修正等等,尤其是其中的影象後處理。從影象感測器直接生成的原始影像實際上是不大能被人眼接受的,因此需要經過各種處理後才形成最終的照片輸出。

不過無論是手機攝像頭,還是車載、工業攝像頭,在CV、影象後處理等方面,AI所佔的比重都越來越大。AI專用處理器或單元都開始加入到影象處理流程中來。

去年華為和三星在其手機晶片釋出會上,都提到了ISP與NPU的“融合”,NPU當然就是專用於AI計算的處理器了。三星還為此專門取了個名字叫AISP——應該就是AI+ISP的意思。華為當時宣稱是“業界首次實現ISP+NPU的融合架構”。不管這個“業界首次”是否是真的,這種“融合”都相當值得探究。

本文嘗試從現有資料,以及我所知的一些不成體系的資訊來簡單談談,這種“融合”究竟是怎麼回事,以及AI對於拍照而言的價值在哪兒。本文將AI處理器或單元統稱為NPU,不同的廠商對其有不同的稱謂,如蘋果稱其為NE,聯發科稱其為APU,高通稱其為AIE。

NPU與ISP的協同工作

事實上,迄今我們依然無法完整地搞清楚,現有智慧裝置的ISP和NPU之間是怎樣協同工作的。華為在釋出會上展示的一張圖只是個簡略的概要圖(下圖)。其中提到,針對“4K畫素級AI Video處理”,ISP負責顏色/亮度還原、快速對焦,而神經網路完成細節還原、去噪。兩者配合來輸出影像。

三星方面對於其“AISP”的宣傳也比較模糊,稱之為“全新ISP架構”,讓AI在影像拍照和影片上的使用“更加便捷和實時”,“並進一步升級了智慧自動白平衡、自動曝光、降噪等功能”。三星在Exynos 1080的釋出會上提到,NPU可以進行拍攝物體與風景的檢測,並最佳化白平衡和曝光。

即便我們不清楚ISP和NPU具體如何協同,或者說影象處理通路是如何,NPU在此究竟扮演了什麼角色還是有辦法搞清楚的。

谷歌Pixel手機在此前的幾代產品中引入了PVC(Pixel Visual Core)。這是谷歌設計的基於Arm的影像處理器。PVC內部的IPU(image processing unit)本質上是完全可程式設計的影像、視覺與AI多核專用架構。Pixel二代、三代的多款機型都採用了該處理器。Pixel 4之上,迭代產品更名為Pixel Neural Core,應該算是對其AI計算屬性的一種強調吧。

從PVC,可一定程度理解這種專用處理器是如何做影像後處理的。PVC主體上包含8個IPU核心,據說是谷歌自己設計的,每個核心有512個ALU單元。谷歌為其配套了開發生態,針對影象處理採用Halide語言,機器學習則為TensorFlow,針對底層硬體有專門的編譯器。而Android三方應用開發者直接使用Android Camera API,就能利用PVC的算力。

Pixel 5已經去掉了這種專用晶片,不知後續是否還會繼續引入。PVC作為一種手機主SoC(如驍龍處理器)之外的一枚專用加速器,想必其處理時延會比較高,從直覺來看可能不及直接將NPU整合到SoC上的方案——畢竟如今手機SoC的AI算力也是越來越強的。猜測未來的Pixel裝置極有可能會棄用這種專門的PVC。

最初那些年,PVC參與的影像後處理工作,包括了HDR+、自動白平衡、降噪等。後文借用谷歌這些年在計算攝影方面的研究成果,也會嘗試談談AI具體是如何參與到影像後處理的。

不過谷歌畢竟不是專門的手機晶片製造商,很難直接自己造個專屬的手機SoC,為其拍照的設想做最完美的服務(從這裡也能看出蘋果和華為的優勢)。不難想象,當AI計算在影像處理方面的作用越來越大之時,華為、三星這些晶片製造商,也就開始了NPU與ISP的融合工作。

那麼現在所謂的“融合架構”要如何體現呢?和此前谷歌這種外接一枚PVC的方案又有何不同?華為公佈的少量資料,應該是我們獲知ISP、NPU(以及谷歌PVC)如何協同工作的一部分知識碎片。

從上面這張圖中可見,“傳統的影片流智慧處理”,ISP與NPU的資料共享還需要依託於DRAM主記憶體。也就是說,即便同在一枚SoC上,這兩個處理單元之間還需要靠主記憶體這種慢速儲存來做資料共享,就像CPU/GPU那樣。那麼AI影像處理的時延,自然就會比較高了,反映在拍照上可能是等待時間較長,AI影片處理則會“不可用”。雖然我們無法斷言這個資訊的真偽,不過PVC和手機主SoC之間,起碼應該會是這樣通訊的。

我們現在仍然不清楚ISP+NPU完整的影像處理通路是什麼樣。比如可能是先給ISP做處理,然後再轉交給NPU做後續各種處理,直接就輸出影象了。但這也太過理想,更合理的方案應該是某些處理工作交給ISP(比如自動對焦、自動測光),某些則交給NPU(比如自動白平衡、AI降噪),兩種處理器進行影像資料的交替處理。這對兩種處理器的通訊、協同提出了比較高的要求;另外對究竟哪些工作由ISP處理,哪些工作交給NPU處理這樣的問題,也提出了要求。

華為在麒麟9000媒體溝通會上,在NPU環節提到過一個Smart Cache 2.0的概念。當時我並沒有完全理解,始終認為無非麒麟9000有個系統級LLC,也就是現在手機SoC上普遍會出現的一種system cache——這種快取在SoC上面向各種IP模組共享,包括CPU、GPU、NPU等。最早似乎是蘋果在A系列晶片上採用此種設計,後續高通、華為也相繼跟進。

當時華為Fellow艾偉說:“相對直接訪問記憶體來說,頻寬提升了一倍,能效提升15%。”這句話現在想來,可能是指ISP與NPU通訊時,部分共享system cache,而不是去記憶體轉一圈(不過smart cache也有可能是分層的快取方案,記憶體或許也會參與)。

與此同時,ISP和NPU原本的工作方式是不同的。在影片處理時,ISP以行或者幀內分塊為單位進行工作;而NPU則是以整個幀或整個畫面為處理單位。所以ISP需要忙完整張畫面後,才會將其傳輸給NPU。這樣兩者協同的工作效率是比較低的,NPU可能會有比較長的等待時間。

華為的這種ISP+NPU融合架構是將每一幀進行“切片”,也就是把每幀的整個畫面拆分成更小的單元。ISP與NPU的處理最小單元都成為這種“切片”。ISP在完成一個切片後就可以傳遞給NPU去處理。這麼做不僅降低了NPU的閒置率,應該也能降低頻寬消耗。配合所謂的Smart Cache,也就提高了兩者的工作效率。這應該就是ISP+NPU融合架構的關鍵所在。

Mate40有個錄製功能,是將攝像頭中拍攝到的畫面進行逐幀的卡通化處理——非延後處理,而是拍攝當下就實時顯示。這項應用,很類似於2016年德國圖賓根大學研究人員用卷積神經網路,實現風格化轉換的一項研究,包括為人像應用畢加索、梵高等各種風格。這也是NPU參與工作,並且做到實時處理的一種顯著感知了。

AI在手機拍照中,能做什麼?

不過NPU+ISP進行影像處理的關鍵還是在於,NPU究竟有什麼用?如果只是做個畫面卡通化處理,或者智慧美顏之類,那也沒什麼太大的意思。事實上,現階段AI參與影像增強,是部分替代了ISP的工作的。一個比較典型的例子是畫面的自動白平衡,以前這是ISP的工作,現在則部分或者全部可轉交給NPU去完成。

自動白平衡為什麼需要AI去做呢?無非在於傳統的自動白平衡修正方案,在很多情況下都沒那麼靠譜。白天光照充足時,或許還沒什麼問題,但到了夜晚情況就會比較複雜。

比如像上圖這樣夜間由於光照,色偏本就很嚴重的場景,針對很多拍攝物件是難以做顏色修正的。所以谷歌利用機器學習開發了一套演算法。模型訓練過程,是採用Pixel手機來拍攝多樣化的場景,然後針對所有拍攝的照片,在色彩校準顯示器上手動調整照片白平衡。以此來進行訓練。而手機上的AI單元執行的是inference的過程,可得到上圖這樣的結果。

這是AI在自動白平衡中的一個典型應用。在這套方案中,可能涉及的問題主要包括AI演算法是否能夠獲得比ISP傳統後處理演算法更優秀的結果,NPU如何與ISP協作(包括影象處理通路如何),訓練資料如何獲取等。

尤其是訓練網路所需的資料從哪兒來。谷歌的資料是自己用Pixel手機,或者透過一些方案自行採集的,比如上面這個自動白平衡的例子。這似乎也是谷歌的老傳統了。這裡還可以舉幾個用AI實現畫質增強的同類例子:

(1)模擬背景虛化

去年《看懂手機拍照的背景虛化:雙攝3D成像再加上AI?》一文詳細介紹過這種方案。除了雙攝+雙畫素這些原本實現背景虛化(淺景深模擬)的傳統方案,谷歌另外用AI對照片背景虛化做了加強。

谷歌為了訓練所需的神經網路,親自打造了一臺五攝裝備,其實就是把5臺Pixel 3手機固定在一起,拍了很多人像照片,“五攝”同時拍攝畫面就能生成相對高質量的深度圖。以此作為神經網路的輸入。這樣使用者在用手機拍攝人像時,AI就能輔助推斷人像深度了。

(2)消除畫面噪聲

UC Berkeley和Google Research前兩年發表過一篇多幀降噪的paper,題為Burst Denoising with Kernel Prediction Networks。用CNN網路預測運動向量+降噪kernel的方法。資料來源是Open Images dataset,針對每張影象生成N張裁剪影象,每張做隨機偏移;而且每張照片做逆向gamma校正,轉換為近似線性顏色空間,並利用噪聲模型來新增噪聲——也就模擬了多幀畫面。這些作為訓練資料。

最終期望達到的,就是用手機拍照,一次快門就拍下多張圖片,透過這種多幀堆疊來獲得一張純淨度比較高的照片。這是利用機器學習實現多張堆疊降噪的典型方法了。

(3)影片拍攝防抖

谷歌針對Pixel 2手機應用過一種名為Fused Video Stabilization的影片拍攝防抖方案。這套方案包含3個處理階段:第一階段做位移分析,獲取陀螺儀的訊號、光學防抖的鏡頭運動,來精確預估攝像頭的位移。然後在位移過濾階段,結合機器學習和訊號處理,來預測拍攝者移動攝像頭的意圖。最後進行幀合成,達成優於傳統光學、數字防抖的效果。AI屬於其中的一個階段。

(4)HDR+高動態範圍

HDR+其實是谷歌一次按下快門,多張短曝光照片堆疊的一種演算法。這項特性本身應該並沒有加入AI。不過2018年,谷歌宣佈向研究社群公開HDR+的這些堆疊照片資料,包括不同物件、亮度、動態範圍和亮度的。據說有不少做神經網路研究的paper都採用了這套資料集。HDR+因此也能算是AI拍照的組成部分了吧。

Pixel手機更多應用了AI的功能和特性,這裡就不再多做介紹了,有興趣的可參見谷歌的AI Blog。比如說前兩個月谷歌才公佈的“人像光照”特性,是對2D照片的人像做模擬打光——即為照片加人造光源。人像光照主要應用的就是機器學習,谷歌動用到了位於不同角度的64個攝像頭+331個LED光源,從各個角度來拍攝不同方位的打光照片,以此作為神經網路的訓練資料來源。效果還是比iPhone用3D結構光實現的打光效果更靠譜的。

華為這邊因為硬體實現上有了NPU+ISP融合架構的加成,所以更多的AI特性得以應用到了影片後處理、實時處理以及AR之上。有興趣的可參見《全面剖析麒麟9000:華為Mate 40碾壓了誰?》一文的NPU部分。

未來的AI拍照走向何方

前面列舉AI加強成像畫質的,典型如降噪、自動白平衡,本質上都是傳統攝影的構成部分,而不是類似於“趣味攝影”的小特性,或者在很多人看來可有可無的部分。它們在手機中是真真切切地影響到了最終的成像畫質的。華為有底氣宣稱Mate40的5000萬畫素碾壓別家1億畫素,AI在其中應當佔了較大比重。

本文僅作為拓寬見聞的一篇文章,讓各位讀者瞭解,AI在如今的手機攝影中大致有著怎樣的作用(以谷歌為代表),以及從硬體的角度嘗試管中一窺NPU+ISP的新融合架構(以華為為代表)。未來手機乃至相機拍照,越來越多地引入AI,也是必然的。且計算機攝影相關的研究也還在持續中。

未來手機上的AI攝影會走向何方,這個話題太大了。不過本文的最後再分享一篇相當有趣,來自蘇黎世聯邦理工學院去年釋出的一篇paper(Replacing Mobile Camera ISP with a Single Deep Learning Model),大致意思是將ISP徹底替換為NPU。

幾名研究人員採用華為P20 Pro,以及單反佳能5D4拍的照片為神經網路的訓練資料,包括兩者拍攝的原始RAW影象(未經過反拜耳的原始資料),以及經過ISP後處理最終輸出的JPG照片。訓練過程就是將P20 Pro拍攝的RAW Bayer資料,轉成佳能5D4同場景拍攝的JPG照片(也就是將影象感測器輸出的原始資料,對映到高質量的照片)。資料集包含10000張實拍照片。

用訓練得到的PyNET網路所做的後處理,與華為P20自己的ISP所做後處理的比較

最終獲得的PyNET模型,就可以直接將手機影象感測器獲取到的原始資料,經過inference——也就是類似NPU這樣的AI處理器,來輸出JPG照片了。也就是AI單元學習了ISP的工作流程,並替代了ISP。“在不需要有關感測器、光學相關的知識”的情況下,就能做到原本ISP需要各種tuning才可達成的工作。(不過要是圖片後處理流程本來就包含了AI過程,是否就是個嵌套了?)

聽起來是個很有意思的思路,當然其實際效果如何又是另一個話題了,有興趣的同學可前往檢視。

11
  • 會議活動拍攝丨拍前做攻略,成功率翻倍
  • 尼康今年將發售Z系列全新旗艦級微單相機