生猛!看 XX 神器來了!實時把畫質變成 4k 高清,僅延遲3毫秒

本文出自量子位|公衆號QbitAI,若有侵權,則可刪除。git

看動畫 (特別是裏番/P站) 的時候,總會以爲畫質不夠好,就算已經有1080p,仍是會感到不夠清晰,太影響體驗了。github

因此,這個世界十分須要一套拯救分辨率的魔法。web

現在,有個名叫Anime4K的開源算法,能在動畫播放中,實時把畫面變成4k,延時低至3毫秒。算法

能把720p/1080p變成2160p,也能把480p變成1080p。編程

團隊說,這是當下最強 (State-of-the-Art) 的動畫實時超分辨率方法,能夠拿任何編程語言實現。機器學習

如今,項目已經在GitHub摘下3700多顆星,並一度登上了趨勢榜。編程語言

那麼,這個算法到底是如何造福人類的?編輯器

只搞動畫

團隊在論文裏感慨道:學習

傳統超分辨率算法 (如Bicubic) ,結果不怎麼好,由於它們根本不是爲了動畫而生的。
傳統的去模糊 (Unblurring) 或銳化 (Sharpening) 方式,在靠近物體邊緣的時候會發生過沖 (Overshoot) ,分散觀衆注意力,下降圖像的感知質量 (Perceptual Quality) 。
而機器學習方法 (如waifu2x) 又太慢,徹底不能實時 (<30毫秒) ,尤爲是須要超高清的時候。flex

△ waifu2x
△ waifu2x

而Anime4K,只處理動畫就夠了,不考慮其餘視頻類型。這一點很重要。

動畫沒有真實視頻那麼多紋理 (Textures) ,基本都是用平直着色法 (Flat Shading) 處理的物體和線條。

只要畫質變好一點點,觀衆也看得出。因此團隊機智地想到,不用作整張的畫質提高,專一於細化邊緣就能夠了,紋理之類的細節不重要。

具體怎樣作,要從超分辨率的原理開始講:

首先,一張圖能夠分爲兩部分:

一是低頻份量,就是一張模糊的低分辨率圖。
二是高頻殘差,表明兩種分辨率之間的差異 (Difference) 。

輸入一張低清圖,把它變成一個更低清的版本,就能得出一個殘差。

把殘差變薄 (Thin) 、銳化 (Sharpen) ,再加到低清圖上,就能獲得一張高清圖。

但殘差稍稍有點錯誤,就會形成振鈴和過沖,影響效果。這也是前輩的缺陷所在。 因而,團隊找到了一種新方法:

首先把殘差厚度最小化當作目標,這個沒有問題。
但直接把隨意變換(Arbitrarily Transformed)獲得的殘差,用到一張低清圖上是不行的。低清圖要作出相應改變,才能與殘差和平相處,得出理想的超分辨率結果。
因此,當輸入一張圖和它的殘差以後,「push」殘差的像素,讓殘差線變細;
同時,每作一個push,都要在彩色的低清圖上,執行一個相同的操做。

這樣,既能把模糊最小化,也不會出現振鈴和過沖,這兩個下降畫質的現象。

比一比吧

這場比賽,Anime4K (最右) 的對手有:來自madVR的不開源算法NGU前輩 (左二) ,以及開源的機器學習算法waifu2x前輩 (左三) 。

第一題,眼睛:

第二題,耳朵:

第三題,玉手:

第四題,全臉:

waifu2x前輩的效果,明顯不及Anime4K,常見虛影。速度也有明顯缺陷,每張圖耗時超過1秒。

NGU前輩生成的畫質,與Anime4K相近,但也經常被Anime4K戰勝。

不止如此,NGU每張耗時~6毫秒,Anime4K只要~3毫秒,快了一倍,更加適應實時生成的需求了。

效果相近的話,爲啥不直接用NGU?由於不開源。

若是,你以爲720p/1080p的動畫,不必變成4K這麼奢侈,那還能夠把480p拯救到1080p啊:

依然,Anime4K和沒開源的NGU不相上下。

最後,儘管已經得到了精湛的畫質提高技能,團隊也沒有就此拋棄機器學習的力量。

由於在拯救靜止畫做 (而非動畫) 的時候,Anime4K的短板顯現了。這時候,讓機器學習選手waifu2x和它並肩做戰,更加成功一些:

須要實時提高分辨率,仍是用Anime4K吧。

反正也已經開源了:

項目傳送門: https://github.com/bloc97/Anime4K