Google 讓電腦看一萬部影片,打算用深度學習技術改善 YouTube 影片畫質

作者 | 發布日期 2016 年 05 月 27 日 8:00 | 分類 Google , 軟體、系統 , 電子娛樂 line share follow us in feedly line share
Google 讓電腦看一萬部影片,打算用深度學習技術改善 YouTube 影片畫質


根據統計,Google 每分鐘會接收由使用者上傳、總長度超過 400 小時的影片,這些影片有著不同格式,需要經過處理、轉檔之後才能在 YouTube 或其他服務中播放,然而要如何在有限的資料流量中達到最佳畫質,就成了需要考慮的重要課題。為此 Google 提出以深度學習讓影片轉檔最佳化的解決方案。

影片轉檔會造成畫質耗損

由於 YouTube 等串流影片服務需要考慮到網路頻寬、資料流量、播放裝置相容性等因素,因此會對上傳的影片進行處理、轉檔。不過由於轉檔時會採用破壞性壓縮(意指會犧牲部分資訊,以求進一步降低壓縮後檔案容量),所以會讓轉檔後的影片畫質比原始影片差。

另一方面,Google 為了提高影片處理的速度,會將原始影片拆分為許多長度只有數秒、稱為 chunk 的片段,如此一來就能讓伺服器中的多個處理器同時處理多個 chunk,以提升整體處理效率。不過這個方式的副作用,就是各 chunk 會被視為獨立的資料,並各自進行處理,由於處理時缺乏時間軸上臨近 chunk 的資訊,不利於控制整體影片的畫質表現。

Google 對此也自嘲,表示大家可以說他們是起跑前就先把自己的腳打斷,但是不可否認的,這是個妥協的結果。如果在處理影片時,讓各 chunk 彼此互通資訊的話,又會大幅提高運算複雜度,甚至有部分 chunk 需要多次重覆處理,就失去了將影片切割為小片段處理的初衷。

T客邦配圖

▲ 圖表橫軸代表影片時間,縱軸則為影片品質(PSNR)。可以看到在各 chunk 的頭尾處,品質會變得不穩定。

透過深度學習強化處理品質

為了要解決處理各 chunk 會產生品質不一的情況,最直接的想法就是盡量在切割 chunk 時,讓各區塊的內容趨於一致,比方說依各場景的切換來切割 chunk,但是在實務上,這種方式並不如我們所想像的理想。

解決這個問題的關鍵,在於透過深度學習的方式,讓電腦自動多次處理每個 chunk,在迭代的過程中調整編碼參數,並分析對整體影片產生的改變,這不但讓每個 chunk 的開頭與結尾能維持更接近的品質,也因每個 chunk 本身很短的關係,讓各 chunk 之間的品質差異得以降低。有趣的是,研究人員發現,迭代的所需的總次數受第一次迭代時所使用的 CRF 參數(影片品質指標)影響很大,而且每個 chunk 的最佳 CRF 參數都不一樣,因此如果用最快的方式找到最佳 CRF 參數就是解決問題的核心關鍵。

尋找最佳 CRF 參數的方式,主要是透過先用極快的速度「預覽」影片,並取得幾組運算複雜度低的指標數據,然後再根據這些數據來推斷適合的 CRF 參數。但是由於要找出指標數據與最佳 CRF 參數間的關係並不容易,尤其是要找出解析解更是困難,因此研發團隊改應用數值解的概念,讓電腦透過深度學習的方式,自動學習搜尋技巧,增加尋找最佳 CRF 參數的效率與準確性。

首先研發團隊準備了一萬部影片,嘗試所有轉檔參數設定,並記錄輸出影片的流量,接著讓深度學習系統分析指標數據與參數設定的關連,讓系統找出適當的預預測測方式,最終讓轉檔前只需用很快的速度求出指標數據,就能準確最佳 CRF 參數。

研發團隊表示這項技術已經實際應用在影片服務長達一年之久,並確實能夠提升影片播放品質,研發團隊接著也會持續努力來提供更優異的服務。

T客邦配圖

▲ CRF 參數與影片流量的關係圖。CRF 參數越小,代表壓縮出來的影片畫質越好,但是流量卻會比較高。

T客邦配圖

▲ 此圖為影片最佳 CRF 參數對照圖,藍色曲線為使用窮舉法所找出的最佳參數,其他曲線越接近則代表成果越好。綠色曲線為最傳統的處理方式,可以看到離藍色曲線比較遠,紅色曲線則為使用使用者上傳的參數進行分析,虛線曲線則為使用「預覽」影片取得的指標數據進行預測,效果很好。

T客邦配圖

▲ 在未使用此項技術前,影片的品質不太穩定,尤其在 chunk 的頭尾處情況更是明顯。

T客邦配圖

▲ 採用新技術後,可以在維持相同資料流量的情況下,大幅提升畫質表現。

(本文由 T客邦 授權轉載)