Facebook批量优化360照片
相比而言,全景圖片所包含的信息更為豐富,可為用戶帶來沉浸式的體驗,但相比普通的圖片也會面臨更多的挑戰。Facebook自去年推出360度照片功能,已有超過7000萬張照片被上傳。本文則介紹了Facebook在創建高分辨率的360度照片中遇到的挑戰,以及利用深度神經網絡修復照片旋轉問題的原理解析。感謝微博算法工程師劉文幫助完成文章的技術校對,原文鏈接請點擊【閱讀原文】。
作者:馬特Uyttendaele
翻譯:鴻蒙
校對:劉文,王宇豪
自去年推出該功能以來,人們已經向Facebook上傳了超過7000萬張360度照片。Facebook使用多種方法來捕獲360度照片和視頻,這使人們可以與他們的朋友分享身臨其境的體驗。如果您擁有專用的360度相機,如理光Theta S或Giroptic iO,則可以從相機直接發布到Facebook。而現在大部分高端Android和iOS智能手機也都擁有全景模式的相機,可用于拍攝360度照片。
Facebook在過去一年中開發并部署了多種技術,以優化人們創建和共享360度內容的方式,包括360度采集、360度視頻穩定性以及重新設計存儲高分辨率媒體的方式。最近,我們一直在探索使用深度神經網絡自動重新調整360度照片的方向,為人們帶來更逼真的身臨其境的體驗。
創建高分辨率的360照片
我們最近在Facebook應用程序中發布了一項新功能,允許用戶使用全新的、不受約束的全景UI來捕捉完整的360度場景。(原文視頻中展示了Facebook 360的實際拍攝)相比于傳統照片,360度照片往往要大得多,因此我們也面臨著挑戰——讓人們能夠像以前一樣快速瀏覽包含360度照片的Feed流,同時我們也提供了照片的全分辨率版本,以便用戶可以停下來通過傾斜、平移或縮放來查看照片。當然,立即發送全分辨率照片會妨礙人們滾動查看新內容,同時會占用大量內存來處理照片。
面對這些挑戰,我們重新設計了Facebook的照片基礎設施,以便“分塊”存儲和提供照片內容。
我們會將360度照片轉換為立方體貼圖,這類似于我們用于360度視頻的早期方法。這些立方體貼圖依次存儲在多個分辨率下,并且這些不同分辨率都會被分割成小的、單獨的512x512圖像。當拍攝好一張360度照片時,我們會計算出哪個分辨率和哪些圖塊是渲染當前窗口所必需的。如果當前的分辨率不可用,我們會暫時呈現較低分辨率的表示,同時等待網絡傳送高分辨率內容的請求。人們在查看360度照片中會平移和放大,因此我們不斷地重復這個計算。而這個改變讓我們能夠顯示數百萬像素的照片的同時,不會在性能上發生任何變化。
深度神經網絡用于360度照片
上傳到Facebook的數千萬公共360度照片,為我們提供了一個強大的新數據集來幫助改進產品。這些數據本身可以與機器學習方法結合使用,從而為人們創造更好的體驗。
360度照片不符合現實情況有一點最基本特征,就是當相機未達到水平時拍攝的圖像,即使通過旋轉也無法得到有效校正。在下圖的例子中可以看到,在拍攝照片時相機沒有完全直立,這就導致了傾斜的視野,使得照片和現實世界的感覺完全不同。
使用編輯軟件修復傳統照片的這種旋轉問題很簡單,但相同類型的工具并不能廣泛應用于360度照片,并且糾正球體上的旋轉也更不直觀。360度照片中的旋轉由兩個參數捕獲 - 傾斜和滾動,如下圖所示。第三個軸(偏離)通過更改初始觀察方向來影響照片,但它本身不會引起旋轉的場景。而我們希望開發一種能夠自動修復由這些運動引起的旋轉的技術。
我們通過使用深度神經網絡(DNN)架構AlexNet解決了這個問題,并對其進行了一些修改。如上圖所示,我們的訓練數據包含完整的球形環境(360x180度)并使用等距離長方圓柱投影。我們假設問題的幾何性質不需要顏色信息,由此我們設置訓練數據是由分辨率為256x128的單色圖像組成。AlexNet架構旨在解決超過1000個類別的分類問題,因此最終的全連接層有4096個輸入和1000個輸出。現在我們將它(alexnet)運用到解決一個回歸問題的場景上來,因此我們的最后一層有4096個輸入和2個連續值作為輸出——傾斜和滾動值。
我們使用標有傾斜和滾動值的旋轉圖像來訓練DNN。訓練數據集包含了500000個Equirectangular(等距長方)圖像,我們假設它們一般不旋轉,也就是它們的傾斜角度和滾動角度是0。在訓練期間,我們通過隨機生成的傾斜和滾動值人為地旋轉每個訓練樣本。下面公式使用損失函數,來測量這些隨機生成的標簽值與DNN估計的結果值之間的距離。
為了測試訓練結果,我們通過已知的一組傾斜和滾動值,人為地旋轉數據集中的每張照片,然后我們將每個旋轉樣本輸入至訓練好的DNN模型中并記錄結果值。已知應用值和計算結果之間的任何差異都可以歸因于兩個因素:(1)DNN并不能準確解決旋轉問題;(2)數據集照片并不完全正確。其中第二個因素是因為我們假定數據集一般直立,但任何特定樣本都可能有一些固有的旋轉。
對于每張照片,我們掃描集合[-4deg,-2deg,0deg,2deg,4deg]中傾斜和滾動值的所有組合,每張照片有25個不同的生成照片用于DNN模型。根據每次運行的傾斜和滾動值,我們計算出應用的旋轉,表示這種旋轉的最有效方式是使用經常用于3D圖形的工具 - 四元數(quaternion)。我們通過計算四元數來表示由網絡計算的旋轉,如果網絡和數據沒有前面列出的兩個問題,那么這些四元數應該是相同的,但在實踐中卻并非如此,因此在每次運行時我們通過相除來計算它們之間的差異。最后,使用Quaternion Averaging 技術計算這些差異的平均值。
四元數在計算三維旋轉的差異和平均值時很有用,但我們需要為每張照片添加新的傾斜和滾動值,這是因為數據集照片并不是豎直拍攝的,而這種平均差異是每個訓練圖像真實取向的良好估計。因此,我們在四元數和偏離、傾斜和滾動之間使用簡單的轉換技術,通過平均值進行到更新的標簽。
一旦數據集被重新標記,我們就會進行新一輪的訓練,如此進行四輪重復迭代的訓練和優化。經過以上優化,最終訓練好的DNN模型平均可以計算出誤差在0.1度以內的360度旋轉。如下圖所示,每個訓練階段都會從一個未初始化的模型開始,我們可以看到每個階段最終會收斂到一個更小的損失。而保持測試集也顯示非常相似的收斂和誤差值,這種收斂行為讓我們得出結論:訓練優化的循環過程正在學習我們所期望的旋轉函數。
以下是旋轉360度照片的一些結果(這些不是訓練集的一部分)。每一對圖像中的第一張是原始圖像,第二張是由DNN糾正的結果。請注意,DNN在不同的內容類別(包括建筑物等人造結構以及自然場景)中表現都很好。
第一組
第二組
第三組
結論
我們現在已經在Facebook的照片、視頻和直播產品中部署了360媒體。當做這些事情時,會出現沉浸式內容變革所帶來的獨特挑戰。本文涉及了我們在過去一年中解決的一些挑戰。正如我們所看到的,將沉浸式媒體上傳到Facebook的速度正在加快,我們對所研究的這些技術如何幫助人們以新方式體驗地點和事件而感到非常興奮。
WebRTCon 2018 8折報名
WebRTCon希望與行業專家一同分享、探討當下技術熱點、行業最佳應用實踐。如果你擁有音視頻領域獨當一面的能力,歡迎申請成為講師,分享你的實踐和洞察,請聯系 speaker@livevideostack.com。更多詳情掃描下圖二維碼。
總結
以上是生活随笔為你收集整理的Facebook批量优化360照片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Facebook构建高性能Android
- 下一篇: 展望2018,多媒体开发新趋势