有個名叫Anime4K的開源演算法,能在動畫播放中,即時把畫面變成4k,延時低至3毫秒。能把720p/1080p變成2160p,也能把480p變成1080p。
看動畫的時候,總會覺得畫質不夠好,就算已經有1080p,還是會感到不夠清晰。
所以,這個世界十分需要一套拯救解析度的魔法。
如今,有個名叫Anime4K的開源演算法,能在動畫播放中,即時把畫面變成4k,延時低至3毫秒。
能把720p/1080p變成2160p,也能把480p變成1080p。
團隊說,這是當下最強 (State-of-the-Art)的動畫即時超解析度成像方法,可以拿任何編程語言實現。
現在,項目已經在GitHub摘下3700多顆星,並一度登上了趨勢榜。
那麼,這個演算法究竟是如何造福人類的?
只做動畫
團隊在論文裡感慨道:
傳統超解析度成像演算法(如Bicubic) ,結果不怎麼好,因為它們根本不是為了動畫而生的。
傳統的去模糊(Unblurring)或銳化(Sharpening)方式,在靠近物體邊緣的時候會發生過衝 (Overshoot) ,分散觀眾注意力,降低圖像的感知品質(Perceptual Quality) 。
而機器學習方法(如waifu2x)又太慢,完全不能即時(<30毫秒) ,尤其是需要超高解析的時候。
而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吧。
反正也已經開源了。
(⊙ˍ⊙)