手機中的計算攝影5-基于深度學(xué)習(xí)的畸變校正
點擊下方“AI算法與圖像處理”,一起進步!
重磅干貨,第一時間送達
在手機中的計算攝影4-超廣角畸變校正中,我為你描述了廣角鏡頭的鏡頭畸變校正和透視畸變校正,尤其是花了很多篇幅講述施易昌等人的論文如何校正因為透視畸變導(dǎo)致的人臉拉伸現(xiàn)象。
然而,正如我文章中所講,這個方法依然有它的不足之處:
沒有準(zhǔn)確的人臉Mask就無法進行校正
校正只針對人臉,會出現(xiàn)頭小身大的現(xiàn)象
某些情況下無法保證直線不彎曲,有些時候還無法很好的校正人臉
速度慢,單張圖像需要接近1秒鐘完成
那么如何解決這些問題呢?今天要介紹的方法,就是嘗試對上述缺陷進行改進。
一. 第一個基于深度學(xué)習(xí)的畸變校正算法
我們先來想想為什么施易昌等人的方法存在一定缺陷
需要FOV信息作為輸入,作者提到他們用到了圖像的EXIF信息來獲取焦距和傳感器信息,但我們都知道很多圖像在傳輸和保存過程中是丟失了這些信息的
因為他們的算法只針對人臉區(qū)域采用球極投影進行校正,因此一定需要輸入人臉的Mask,而這個Mask是通過專門訓(xùn)練的人臉分割網(wǎng)絡(luò)計算出來的。很顯然,這里帶來了兩個問題:
算法需要額外的外部輸入,增加了復(fù)雜度
外部輸入的質(zhì)量高低決定了人臉校正的效果好壞
3. 整個算法包含多個可調(diào)整的參數(shù)。但作者只在20張圖像上進行了參數(shù)的調(diào)整,然后在167張圖像上進行了仔細的驗證,最后在4131張圖像上觀察是否有明顯的錯誤??傮w來說,真正用于檢驗并調(diào)整參數(shù)只有不到兩百張圖像,確實可能有泛化性問題。
4. 另外目標(biāo)函數(shù)也是非常復(fù)雜的,因此最優(yōu)化也比較慢。
針對這幾個問題,潛在的解決方案有:
完全不用相機內(nèi)參數(shù)輸入,將背景的鏡頭畸變校正也整合到流程中,用一些圖像上的特征來約束鏡頭畸變校正
將人臉校正所需的Mask的計算整合到整個流程中,不需要外部輸入
使用大量的圖像來驗證算法的泛化性和有效性
曠視研究院的譚婧、趙姍等人在2021年CVPR發(fā)表的文章,就很好的把這幾個方案整合到了一起:

這篇文章展示了第一個用深度學(xué)習(xí)來完成的自動去畸變算法,其中用兩個子網(wǎng)絡(luò)分別完成鏡頭畸變的校正和透視畸變的校正,而且它不需要相機的畸變參數(shù),效果據(jù)作者描述比施易昌等人的方法更好。

這里,LineNet用于進行鏡頭畸變校正,經(jīng)過LineNet后直線被校直。而ShapeNet則用于進行人臉的球極畸變校正。通過兩個注意力模塊LAM(Line Attention Module)和FAM(Face Attention Module),圖像中的直線和人臉被特意強調(diào)。由于訓(xùn)練數(shù)據(jù)有人臉和直線的標(biāo)注信息,因此訓(xùn)練出的網(wǎng)絡(luò)不需要外部的相機參數(shù)及人臉Mask也能夠進行很好的校正,最后得到了和施易昌等方法相當(dāng),甚至某些情況下更好的結(jié)果。
接下來我從訓(xùn)練和驗證數(shù)據(jù)、損失函數(shù)、評價指標(biāo)、網(wǎng)絡(luò)結(jié)構(gòu)等幾個方面概略的介紹一下。
1.1?訓(xùn)練和驗證數(shù)據(jù)
譚婧等的方法總體上來說是一種監(jiān)督型的訓(xùn)練方法,因此需要一個帶有Ground Truth信息的數(shù)據(jù)集。然而以前從來沒有廣角畸變校正的標(biāo)準(zhǔn)數(shù)據(jù)集,因此作者用5個超廣角的拍照手機,在各種場景下進行采集,制作了一個超過5000張圖像的數(shù)據(jù)集,每張圖像的人像分布在1到6人之間。由于有這幾個相機的畸變參數(shù),因此可以很容易的獲得鏡頭畸變校正的map,作為LineNet訓(xùn)練時的Ground Truth。
接下來,為了獲得每張圖像對應(yīng)的透視畸變校正后的圖像,作者們基于施易昌等的方法開發(fā)了一個自動化的校正工具,其中刻意在原方法的目標(biāo)函數(shù)的基礎(chǔ)上添加了一個人臉附近的直線約束,使得能夠更好的保持人臉附近的直線。
作者們還開發(fā)了一個微調(diào)工具,可以基于Mesh來對圖像的局部進行微調(diào)。通過聯(lián)合使用校正工具+微調(diào)工具,她們得到了一個效果很好的數(shù)據(jù)集,下圖d是最終手動優(yōu)化后的效果,可以看到它確實比施易昌等的方法結(jié)果好(圖b),例如這里人臉附近的大樓陽臺保持了直線。

下面展示了數(shù)據(jù)集中需要包括的內(nèi)容
輸入的圖像(完全未經(jīng)畸變校正)
經(jīng)過鏡頭畸變校正后的圖像(此時直線被校直)
經(jīng)過透視畸變校正后的圖像(此時背景直線校直,且人臉畸變被消除)
人臉Mask
直線標(biāo)注信息
鏡頭畸變校正Map
透視畸變校正Map

1.2 評價方法和指標(biāo)
為了評價算法的效果,作者引入了兩個評價指標(biāo): LineAcc(評價直線的保直度),以及ShapeAcc(評價人臉校正的準(zhǔn)確度)。簡單說來,LineAcc計算的是已標(biāo)注的線段在校正后圖像上的像素點的平均夾角,夾角越小,直線越直。而ShapeAcc則是計算校正前后人臉上每個關(guān)鍵點與中心點形成的線段的夾角,夾角越小,人臉效果越接近Ground Truth。

下圖說明作者的最終輸出在LineAcc和ShapeAcc兩方面均超過了輸入,且達到了較好的平衡。

1.3 網(wǎng)絡(luò)結(jié)構(gòu)
如前所述,作者的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,其中
LineNet用于進行鏡頭畸變校正,經(jīng)過LineNet后直線被校直
ShapeNet則用于進行人臉的球極畸變校正。
通過兩個注意力模塊LAM(Line Attention Module)和FAM(Face Attention Module),圖像中的直線和人臉被特意強調(diào)
TM用于保持LineNet和ShapeNet在背景區(qū)域的一致性

1.4 損失函數(shù)
下面是LineNet和ShapeNet的損失函數(shù),其中下標(biāo)flow代表在計算map表的一致性,而下標(biāo)proj和下標(biāo)out則用于表示計算image的一致性。而2,s2則表示分別計算原始的L2 Loss,以及先對圖像或map做Sobel計算,然后再計算L2 Loss。

類似的,兩個注意力模塊LAM和FAM也有自己的損失函數(shù):

這幾個損失函數(shù)之和構(gòu)成了最終的損失函數(shù),用于約束整個網(wǎng)絡(luò)的訓(xùn)練

1.5 結(jié)果展示
我們先來看看作者展示的效果,這里圖(a)是利用相機參數(shù)進行鏡頭畸變校正后的結(jié)果,圖(b)是在此基礎(chǔ)上進行球極投影校正的結(jié)果,圖(c)是施易昌等人的方法,圖(d)則是譚婧等的方法。

我們用動圖比較下兩個方法,可以看到對于某些圖片,譚婧等的方法明顯更好

不過仔細看別的圖,會發(fā)現(xiàn)和施易昌的方法一樣,譚婧等的方法也會有一些缺陷,施易昌等的方法過于強調(diào)人臉,使得背景可能彎曲,而譚婧等的方法則強調(diào)了背景的直線,但人臉表現(xiàn)不夠完美:


1.6 小結(jié),及實際項目中的好處
公平的說,這種基于深度學(xué)習(xí)的方案依然有這樣那樣的效果問題。但我得承認,它確實從整體方法上前進了一大步。讓我們回顧施易昌等人的方案在哪些地方做的不夠好,再看看新方案是否解決了這些問題:

為什么我說用深度學(xué)習(xí)的方案,理論上可以做到更快呢?因為現(xiàn)在各種計算框架,以及硬件芯片本身,對卷積神經(jīng)網(wǎng)絡(luò)的運算已經(jīng)做到了很好的優(yōu)化了,而許多傳統(tǒng)優(yōu)化算法由于計算方法的復(fù)雜和非統(tǒng)一性,很難做到大幅的性能提升。在實際項目中,我們對譚婧等的網(wǎng)絡(luò)架構(gòu)做了裁剪優(yōu)化,經(jīng)過良好的配置,在模型算力要求高達1.8GFlops的情況下,在高通8250平臺只需要不到40ms即可完成推理運算,這相比起施易昌等需要接近1s才能完成運算來說,是巨大的性能提升——這就是目前很多計算機視覺、計算攝影學(xué)的算法由傳統(tǒng)算法改為統(tǒng)一的深度學(xué)習(xí)算法的一大收益!


二. 改進方案,以及第一個半監(jiān)督學(xué)習(xí)的畸變校正算法
然而,為什么基于深度學(xué)習(xí)的方法在實測效果上并未比施易昌等的方法好多少呢?我認為主要有兩個原因:
深度學(xué)習(xí)方法需要大量數(shù)據(jù)來訓(xùn)練,而數(shù)據(jù)非常昂貴
譚婧等所用的評判結(jié)果好壞的標(biāo)準(zhǔn)和人類的主觀感受還無法完全一致
我們先來看看評價方法和標(biāo)準(zhǔn)的缺陷,如下圖所示,作者們用的評價方法是采樣圖像上的特定的線段,希望這些線段與Ground Truth之間的夾角越小越好。那么這里就可能存在這些采樣的線段不足以描述人類的主觀感受這樣的問題了,比如是不是當(dāng)發(fā)生畸變時,有更多的無法簡單用線段的偏轉(zhuǎn)來描述的特征?這是一個非常本質(zhì)和深入的問題,可以留待將來進行更深入的研究。

更現(xiàn)實的問題是,不管是用于訓(xùn)練,還是用于驗證和評價,數(shù)據(jù)都非常寶貴。高質(zhì)量的數(shù)據(jù)非常難于得到。幾乎對每一張樣本圖像,都需要手工進行調(diào)整,以得到它去掉畸變后的完美圖像——這實際上是一個非常主觀的事情。昂貴的數(shù)據(jù)采集手段,使得譚婧等最終得到的是大概5000張圖像的數(shù)據(jù)集。實際上,這些數(shù)據(jù)集很可能因為時間和精力原因,存在一定的瑕疵,影響最終的效果。
那么,有沒有可能降低對數(shù)據(jù)采集的需求呢?半監(jiān)督學(xué)習(xí)是一個可能的方向,下面這篇曠視研究院的預(yù)印版文章(arxiv.org/abs/2109.0802)可供參考:


作者們的想法也很簡單,他們在網(wǎng)絡(luò)訓(xùn)練過程中加入了一個分割的任務(wù),使得分割任務(wù)去分割校正map中的各個部分(不同方向的大位移以及小位移)。那么分割結(jié)果和校正map之間就建立起了某種關(guān)系,另外分割結(jié)果、校正map與各自的Ground Truth之間也有約束關(guān)系?,F(xiàn)在加入沒有標(biāo)注過的數(shù)據(jù),這些數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)推理后也會得到分割圖和校正map。作者認為這兩者之間的關(guān)系應(yīng)該和有標(biāo)注的數(shù)據(jù)對應(yīng)的信息有相同的約束關(guān)系——就用這個約束去迭代優(yōu)化網(wǎng)絡(luò)。

聽起來,跟模型蒸餾頗有異曲同工之妙,文章中也展示了挺不錯的效果,例如下圖中的效果,確實相比譚婧和施易昌等人的方法有了提升。

三. 總結(jié)
到此為止,我已經(jīng)介紹了第1個基于優(yōu)化算法的自動畸變校正算法(手機中的計算攝影4-超廣角畸變校正),第1個基于深度學(xué)習(xí)的畸變校正算法,以及第1個基于半監(jiān)督學(xué)習(xí)思想的畸變校正算法。從工程上講,利用這些技術(shù),已經(jīng)能夠開發(fā)出比較符合當(dāng)前手機客戶需求的產(chǎn)品了。事實上正如我文章里所講,我們開發(fā)的基于深度學(xué)習(xí)的畸變校正算法已經(jīng)能夠在不到100ms時間內(nèi)完成全流程的計算和圖像變換了。
然而,不管是哪種方法,目前都還有前進的空間,有一些圖像上表現(xiàn)依然還不夠好。除了人臉之外,人的身體、腳等區(qū)域與人臉的一致性還需要加強。但過于強調(diào)這些區(qū)域之間的一致性,又會使得網(wǎng)絡(luò)學(xué)習(xí)起來比較困難。
與此同時,盡管算法運行已經(jīng)足夠快了,但要真正流暢的用在視頻拍攝方面,還需要解決視頻幀之間的時域相關(guān)性,否則會產(chǎn)生抖動,同時速度還需要加快,才能適用于當(dāng)前大分辨率的視頻錄制上。
所以你現(xiàn)在在用的手機,基本上還沒有解決好”超廣角畸變校正“這個問題,比如下面的圖示就能看出iPhone12和小米11都沒有把這個問題解決好,其實最新的iPhone13 Pro也在這個問題上沒有提升。希望之后,能在更多的手機產(chǎn)品上看到這個問題更好的解決方案吧!

四. 參考資料
YiChang Shih, Wei-Sheng Lai, Chia-Kai Liang, ? ? and Chia Kai Liang. ? ? Distortion-free wide-angle portraits on camera phones. ACM Trans. Graphics, 38(4):1–12, 2019
Jing Tan, Shan Zhao, Pengfei Xiong, Jiangyu ? ? Liu, Haoqiang Fan, and Shuaicheng Liu. Practical wide-angle portraits ? ? correction with deep structured models. In Proc. CVPR, pages 3498–3506, 2021.
https://arxiv.org/abs/2109.08024
最后,如果這篇文章對你有幫助,歡迎分享出去,共同學(xué)習(xí)進步!
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有美顏、三維視覺、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群
個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
下載1:何愷明頂會分享
在「AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:終身受益的編程指南:Google編程風(fēng)格指南
在「AI算法與圖像處理」公眾號后臺回復(fù):c++,即可下載。歷經(jīng)十年考驗,最權(quán)威的編程規(guī)范!
下載3 CVPR2021 在「AI算法與圖像處理」公眾號后臺回復(fù):CVPR,即可下載1467篇CVPR?2020論文 和 CVPR 2021 最新論文

?
