看動畫 (特別是裡番) 的時候,總會覺得畫質不夠好,就算已經有1080p,還是會感到不夠清晰。
所以,這個世界十分需要一套拯救解析度的魔法。
如今,有個名叫Anime4K的開源算法,能在動畫播放中,實時把畫面變成4k,延時低至3毫秒。
能把720p/1080p變成2160p,也能把480p變成1080p。
團隊說,這是當下最強 (State-of-the-Art) 的動畫實時超解析度方法,可以拿任何程式語言實現。
現在,項目已經在GitHub摘下3700多顆星,並一度登上了趨勢榜。
那麼,這個算法究竟是如何造福人類的?
只搞動畫團隊在論文裡感慨道:
傳統超解析度算法 (如Bicubic) ,結果不怎麼好,因為它們根本不是為了動畫而生的。
傳統的去模糊 (Unblurring) 或銳化 (Sharpening) 方式,在靠近物體邊緣的時候會發生過衝 (Overshoot) ,分散觀眾注意力,降低圖像的感知質量 (Perceptual Quality) 。
而機器學習方法 (如waifu2x) 又太慢,完全不能實時 (<30毫秒) ,尤其是需要超高清的時候。
△ 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
論文傳送門:
https://github.com/bloc97/Anime4K/blob/master/Preprint.md
量子位MEET 2020智能未來大會啟幕,將攜手優秀AI企業、傑出科研人員呈現一場高質量行業盛會!詳情可點擊圖片:
2019中國人工智慧年度評選啟幕,將評選領航企業、商業突破人物、最具創新力產品3大獎項,並於MEET 2020大會揭榜,歡迎優秀的AI公司掃碼報名!