close

全景照片不怕歪!Facebook 用神經網絡矯正扭曲的地平線





沉浸感按:最近微博上的全景照片很火呀,相比各位都已經在自己的iPhone或者iPad上品鑒瞭多傢IT公司的辦公室、遊玩瞭多個旅遊勝地、享受瞭被小貓小狗環繞的感覺瞭。太平洋那頭的Facebook也沒閑著,從去年上線類似的功能以後,全世界 Facebook 用戶們已經上傳瞭七千萬張全景照片瞭。



Facebook 支持多種全景照片和全景視頻的拍攝方式,可以讓人們把自己的全方位感受分享給好朋友們。如果用戶有一個專門的全景攝像機,比如理光Theta S或者Giroptic iO,還可以直接把相機裡的照片發佈到Facebook上去。如今,多數高端安卓和iOS智能手機的內置相機也都有瞭全景模式,可以用來拍全景照片。





Facebook 在過去的一年中開發並上線瞭多種技術給用戶提供更好的全景照片創建和分享體驗,包括全景拍照、全景視頻防抖,以及重新設計如何存儲高分辨率媒體。最近,Facebook 還用到瞭深度神經網絡來自動矯正全景照片的方向,可以給手機拍攝的照片直接帶來更真實的包圍感。





創建高分辨率全景照片



最近 Facebook 剛剛在 Facebook app中上線瞭一個新功能,用戶可以在一個新的、能夠無限滑動的界面裡拍攝完整的360度全景照片。









由於全景照片會比一般的照片大很多,Facebook 首先需要解決的難題就是保證信息流裡出現瞭一張全景照片的時候也能讓用戶流暢地在界面中拖拉滑動;同時,當用戶停止滑動,移動手機或者轉動手機看這張全景照片的時候,也能立即把全分辨率的照片加載出來。在屏幕立即上呈現全分辨率的照片或占用很多內存,所以當用戶繼續滑動頁面往下看的時候,又會給加載新的內容帶來延遲。





面對著這些挑戰,Facebook 的工程師們重新設計瞭 Facebook 的底層照片處理機制,便於存儲信息流中“拼貼”的照片以及呈現照片內容。









每張全景照片都會被轉換為一張立方映射圖,Facebook 之前也有類似的方法用在全景視頻中。然後這些立方映射圖會以多種不同的分辨率存儲下來,而且每一個分辨率的版本都會分割為許多張小的 512x512 分辨率的圖像。





當用戶在信息流裡刷到一張全景照片的時候,程序就會計算當前窗口渲染時需要哪種分辨率、以及用哪些小圖像來拼貼成大圖。如果當前需要的分辨率不可用,程序就會暫時渲染一個低分辨率的樣子,同時等待網絡把高分辨率的內容傳過來。





當用戶進入全景照片移動手機和在屏幕上縮放觀看的時候,程序會不停地做這樣的全套計算。這樣,原來的用戶體驗上不會有什麼可感知的變化,卻實現瞭千萬甚至上億像素的高分辨率全景圖像顯示。





用於全景照片的深度神經網絡



用戶公開上傳到 Facebook 的上千萬張全景照片形成瞭一個強有力的新數據集,Facebook 的研發人員們也就可以利用這個數據集改善自傢的產品。這些數據可以和機器學習的方法聯合起來,給用戶帶來更好的使用體驗。





讓人覺得全景照片不夠真實的最常見的原因之一就是拍照的時候相機沒有端平,然後最終的照片中也沒有修復過來這些傾斜。比如下面就是照片傾斜的例子,拍照的時候相機拿歪瞭。呈現在照片裡的地平線是傾斜的,完全破壞瞭照片的真實感。









對於傳統的照片,用照片編輯軟件修正這種傾斜是一件簡單直接的事情,但是能夠用於全景照片的這類工具並不多,而且修正球面上的傾斜旋轉相當不直觀。在拍攝全景照片的過程中,相機的旋轉可以用 x 軸旋轉(tilt)和 z 軸旋轉(roll)兩個參數來描述,如下方示意圖所示。第三個方向的旋轉,y 軸旋轉(yaw),影響的是全景照片的起始點,但是這個方向上的旋轉是不會造成照片內容的傾斜的。





Facebook 的研發人員們就想開發出一種能夠自動修正這些相機的旋轉帶來的照片傾斜旋轉問題的方法。









為瞭解決這個問題,Facebook 的研究人員們使用瞭著名的深度神經網絡架構 AlexNet,並對它做瞭一些相應的修改。用於網絡訓練的數據就是像前文中那樣的照片,它包含瞭360x180度的完整球面環境,然後用等距離長方圓柱(equirectangular)投影轉換為瞭一張矩形的照片。





Facebook 的研究人員們首先假設這個問題的幾何本質不需要顏色信息的參與,這樣訓練數據就可以簡化為256x128分辨率的黑白照片。AlexNet 本來的設計是為瞭解決超過1000個類別的圖像分類問題的,所以它最終的全連接層就有4096個輸入和1000個輸出。在 Facebook 的這個問題中,他們要解決的是一個回歸問題,所以他們修改後的網絡中,全連接層變成瞭4096個輸入和x 軸旋轉、z 軸旋轉兩個值的連續值輸出。







汽車後級安裝



Facebook 的研究人員們用帶有x 軸和 z 軸旋轉標簽的圖像訓練瞭這個網絡模型。訓練數據集中包含瞭五十萬張投影轉換過的矩形照片,這些照片是研究人員們挑出來,總體沒有旋轉、傾斜的;換句話說,這些照片的 x 軸和 z 軸旋轉全部都是0。



汽車音響電容價錢

在訓練過程中,研究人員們人工地用隨機生成的x 軸和 z 軸旋轉值對訓練樣本做旋轉。如下的這個損失函數就會測量出這些隨機生成的標簽和網絡模型預測結果之間的差值,並把減小這個差值作為網絡的訓練目標。









為瞭測試訓練效果,研究人員們用一組給定的 x 軸和 z 軸旋轉值對測試集中的圖像做合成旋轉。然後他們用訓練過的網絡模型分析這些旋轉過的圖像並記錄模型給出的結果。





這些已知的旋轉值和模型給出的結果之間的差別可以歸結為兩個原因,1,模型沒能完全解決這個旋轉問題;2,所用的數據集還有一些問題,影響瞭模型的表現。這第二個原因也是真實存在的,Facebook 的研究人員們假定瞭選用的數據集總體是平直的,但是單獨看其中的某個樣本都還是有一些固有的旋轉的。





所以,研究人員們用 [-4,-2,0,2,4] 度幾種x 軸和 z 軸旋轉值中的所有組合在每一張照片都做瞭一遍,這就是用模型對每一張照片都過25遍。對於每一次所用的x 軸和 z 軸旋轉值,他們都會計算對應的旋轉量。表示這種旋轉量的最好的方法就是用3D圖像中的一個常用工具:四元數(quaternion)。然後,模型會根據圖像計算出另一個四元數旋轉量。如果模型和數據中都不存在剛才提到的兩個問題,那麼這兩個四元數就應當是相等的。實際中其實並不相等,所以在每一次計算中,他們都會把兩個四元數相除,計算兩者間的差值。最後,用以下公式算出每張圖像在所有組合的下的差值的平均值。



擴大機電容器







以上公式中的計算都使用瞭四元數,因為它們用於計算差值和3D旋轉的均值時非常好用。但是,這樣就需要給每張圖片計算新的x 軸和 z 軸旋轉值,因為數據集中的圖像一開始的時候並不是完全平直的。這種平均差值就是對每張訓練圖像的真實方向的很好的預測。那麼,研究人員們接下來簡單地把四元數格式的平均差值轉換為 x、y、z 軸旋轉就可以更新圖像的標簽瞭。





在圖像標簽更新以後,就可以對模型做新一輪訓練。模型一共經歷瞭四輪訓練和微調。在微調過程的最後,模型對全景照片算出的旋轉值誤差達到瞭0.1度的水平。





每個階段的訓練都是從一個未經初始化的模型開始的,可以從下圖明顯地看到每個階段中模型都收斂到瞭更小的訓練損失。在另一項對抗測試中,模型也表現出瞭類似的收斂和誤差值水平。模型的收斂表現足以讓研究人員們得出結論:這樣的“訓練 - 微調”循環確實讓模型學到瞭理想的旋轉方程。









如下是一些經過旋轉的全景照片結果,而且都是訓練集之外的照片。從幾組圖片中可以看到,模型對於不同的內容類別都有出色的表現,不論有建築這樣的人造景觀還是完全的自然風光。













結論





Facebook 的照片、視頻、直播產品中都已經可以使用全景媒體。在這個過程中,具有沉浸感的內容也會帶來一些特有的問題。這篇文章僅僅介紹瞭 Facebook 的研究人員們解決的問題裡的幾個。隨著用戶往 Facebook 上傳這樣的具有沉浸感的內容的速度越來越快,Facebook 也對研究的前景充滿期待,他們相信類似這樣的技術可以讓用戶用新的方式感受不同的地點和事件。





viaFacebook Blog



台灣電動床工廠 電動床

台灣電動床工廠 電動床

AUGI SPORTS|重機車靴|重機車靴推薦|重機專用車靴|重機防摔鞋|重機防摔鞋推薦|重機防摔鞋

AUGI SPORTS|augisports|racing boots|urban boots|motorcycle boots

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 zks093l7k2 的頭像
    zks093l7k2

    其實基礎在信任

    zks093l7k2 發表在 痞客邦 留言(0) 人氣()