Co je to DLSS od Nvidie a jak funguje? Supersampling, nebo upscaling?

17. 9. 2018

Sdílet

 Autor: Redakce

V informacích o architektuře GPU Turing, nyní vypouštěných Nvidií na trh, jste asi zaregistrovali zmínky o technologii DLSS. Ta má na kartách Turing zvyšovat výkon ve hrách, což má být užitečné zejména pro rozlišení 4K. DLSS znamená Deep Learning Supersampling, což není úplně šťastné. Je tak evokována souvislost se supersamplingem (antialiasingem), což je naopak technologie, která zvyšuje kvalitu a stojí výkon navíc. DLSS je naopak optimalizace zvyšující výkon za cenu nějaké té ztráty kvality. Ve zkratce jde o upscaling z nižší kvality (rozlišení), tedy něco podobného, jako máte na konzolích. Podrobné fungování je ovšem poněkud komplikovanější a v tomto článku se ho pokusím vysvětlit.  

Upscaling a jak do něj zapadá „umělá inteligence“

Pojem upscaling znáte asi třeba z přehrávačů videa – znamená použití nějakého filtru pro zvýšení rozlišení (třeba z 1920 × 1080 bodů na 4K). Může jít o nějakou prostou interpolaci (bikubické škálování, Lanczos) nebo sofistikovanější algoritmus. A jednou z cest, jak takový sofistikovanější upscaling dosáhnout, je použít neuronovou síť, neboli strojové učení. Tento přístup už je známý řadu let a podává poměrně dobré výsledky. Pro tuto úlohu lze totiž síť docela účinně trénovat. Výhoda strojového učení je taková, že dává nějaké výsledky „samo od sebe“. Problém, na který ji nasazujete, nemusí mít nějaké teoreticky pochopené a popsané řešení nebo konkrétní algoritmus. Strojové učení funguje jako „black box“, který při trénování dokážete dokopat k určitému žádanému chování. Je to trochu jako cvičení zvířete.

Natrénování upscalingové filtru na bázi neuronové sítě funguje tak, že dáte dohromady korpus nejrůznějších obrazů, k nimž pak vyrobíte ještě verze se sníženým rozlišením. Neuronovou síť pak trénujete tím směrem, aby se naučila interpolovat z obrazů s nízkým rozlišením, které má jako vstup, takovou „upscalovanou“ verzi, která se co nejvíce blížila podobě původních kvalitních obrazů. Úspěšnost se snadno porovná, protože tu ideální lepší verzi máte stále k dispozici, jako hodnocení podobnosti lze použít PSNR nebo jinou metriku.

Podoba samozřejmě nemůže být dokonalá, protože do onoho black boxu natrénované sítě se uloží jen určité tendence jak při interpolování postupovat, nikoliv původní data, která snížením rozlišení prostě zmizela. Ani upscaling na bázi strojového učení tedy nedokáže skutečně obnovit detaily. Jeho výstup má ale obvykle tu výhodu, že vypadá ostře a nemá typické artefakty spojené s upscalingem například bikubickou interpolací a tak podobně – aliasing (pixelizaci) nebo ringing. Nevidíte na něm tedy hned na první pohled, že byl zvětšen. Zase ale může trpět různými deformacemi, spojováním malých detailů v obrázku – to nastává tehdy, když se neuronová síť při svém hádání chybějících detailů splete. Nebezpečná je na to například tráva nebo podobné komplexní textury, u nichž může dojít k „psychedelickým“ deformacím. Viz třeba plot na následujícím srovnání (rozklikněte si ho pro plné rozlišení, přeškálování v prohlížeči rozdíly smazává).

Upscaling z 50% zmenšení pomocí neuronové sítě
Upscaling z 50% zmenšení pomocí neuronové sítě
Upscaling z 50% zmenšení pomocí algoritmu Lanczos
Upscaling z 50% zmenšení pomocí algoritmu Lanczos

DLSS zatím nemáme možnost testovat, ale čistě pro ilustraci se v galerii můžete podívat na výsledky jiné neuronové sítě sloužící k upscalingu. Stejný obrázek jsem 2× zmenšil a poté zvětšil zpátky nejdřív „AI“ metodou (můžete si vyzkoušet zde, nastavení bylo 2× zvětšení, photo a bez denoisingu) a poté pro srovnání běžným algoritmem Lanczos. Třetí obrázek je originál na původním rozlišení, tedy ideální avšak upscalingem stěží dosažitelný výsledek. Na tomto případě si asi můžete udělat obrázek o tom, jak může interpolace neuronovou sítí například vypadat. Tento konkrétní případ ale nepředstavuje to nejlepší, čeho je přístup schopen (a testovací obrázek s majákem je hodně obtížný). Až se GeForce RTX začnou prodávat, raději se poohlédněte po nějakém srovnání kvality přímo s tímto algoritmem.

Deep Learning Supersampling. Jak dokáže vylepšit obraz?

DLSS funguje na podobném principu. Klíčové je, že při vykreslování pomocí DLSS je reálné rozlišení, které GPU při standardních operacích produkuje, nižší než plné finální rozlišení, které bude zobrazeno – proto jde o upscaling. GPU tak vypočítá snímky se všemi náležitostmi například při 2560 × 1440 pixelech (můj příklad). A poté je na hotové snímky coby posprocessing aplikován filtr DLSS, který je právě takovou neuronovou sítí, natrénovanou pro upscaling, a ten zvýší rozlišení na cílové – třeba na 4K. Samotný filtr je počítán převážně pomocí tensor cores v GPU Turing, takže by neměl stát mnoho výkonu. Vykreslení snímku ale díky redukovanému rozlišení naopak desítky procent výkonu ušetřilo. Výsledek tedy je, že snímková frekvence (výkon) s DLSS je dramaticky vyšší proti neošizenému vykreslování na plném rozlišení.

Podle Nvidie je GeForce RTX 2080 v rozlišení 4K až 2× výkonnější než GeForce RTX 1080. To ovšem jen s filtrem DLSS, kdy jde vlastně o upscaling z nižšího rozlišení Slajd s benchmarky, který byl publikován už v srpnu. Jak vidíte, vykreslování s upscalingem DLSS (kdy je reálné rozlišení zpracovávané na GPU nižší), se projeví výrazně vyšší snímkovou frekvencí než vykreslování bez DLSS (tedy reálně na nativním rozlišení, zde 4K)

Nvidia tuto neuronovou síť trénuje na svých serverech, přičemž používá snímky vykreslené s vysokou kvalitou a právě se supersamplingem (64×) a k nim korespondující snímky s nížší, respektive běžnou kvalitou. Snímky trénovacího korpusu zde pochází z konkrétních her, takže výsledná síť bude specializovaná na tento typ obrazu. Síť se tedy učí interpolovat co nejlépe z nižší kvality na něco blížícího se té vyšší kvalitě. Když je síť hotová, předá ji Nvidia do distribuce. Měla by se k uživateli dostat přes ovladače (GeForce Experience nemá být potřeba) a hra ji pak použije jako filtr během vykreslování. Výhoda je, že se časem síť může o něco zlepšovat, zejména je ale plus to, že se trénuje vždy na stejné hře, na jakou bude nasazena. O to by výsledky měly být lepší, ovšem nepočítejte s tím, že kvalita bude stejná jako nativní. Zázraky možné nejsou a z chybějící detail nelze uhádnout, lze jej jen „zfalšovat“. Což však oko může uspokojit.

DLSS allows faster rendering at a lower input sample count, and then infers a result that at target resolution is similar quality to the TAA result, but with roughly half the shading work.

Stejně dobrý obraz jako při nativním rozlišení?

Podle Nvidie má kvalita výsledných snímků být „podobná“ kvalitě snímků v nativním rozlišení s antialiasingem TAA, ale zde bych byl hodně zdrženlivý. Bude na místě si počkat na reálnou implementaci a přesvědčit se osobně. Nvidia sice nějaké příkladové snímky publikovala (můžete je vidět níže), ale mnoho toho z nich vykoukat nelze. Je na nich tma a také asi nedostatek problematických malých detailů a komplexních textur, kde by se neuronová síť nachytala. Je pravděpodobné, že obraz produkovaný DLSS bude na pohled hodně uspokojivý a dobře vypadající, aspoň pokud nebudete paranoidně pátrat po interpolačních artefaktech.

Ale při opatrném srovnání identického snímku v nativním rozlišení a vyprodukovaného DLSS budou pravděpodobně často patrné velké rozdíly. Měl by být vidět určitý efekt toho, že nejmenší detaily jsou „hádané“, plus mohou vyvstat chyby v interpolaci. Použití tohoto zlepšováku by mohlo být podobně jako použití podobných algoritmů pro „vylepšování“ videa tedy asi záležitostí toho, jaký má kdo vkus a preference. Na druhou stranu pokud nebude rozdíl v rozlišení výrazný (například pokud by upscaling pracoval z 1440p na 4K a nikoliv z 1080p na 4K), tak by negativa mohla být relativně málo patrná.

Příklad efektu upscalingu DLSS proti nativnímu obrazu se supersamplingem podle Nvidie Příklad efektu upscalingu DLSS proti nativnímu obrazu se supersamplingem podle Nvidie

Osobně bych ale DLSS považoval vždy jen za „vylepšení kvality“ onoho nižšího rozlišení, na němž probíhá vykreslování, a nikoliv za ekvivalent nativního vykreslování na cílovém výstupním rozlišení. To by asi mělo být logicky jasné už z toho, že DLSS je zrychlovací optimalizace, která šetří výkon. DLSS tedy použijete, pokud vaše grafika nemá dost síly na to, aby zvládla třeba rozlišení 4K (nedejbože 5K, 8K) utáhnout nativně.

Antialiasing zadarmo bez ztráty výkonu

Filtr DLSS by také měl v podstatě jako vedlejší efekt dodávat efekt antialiasingu (vyhlazení hran). Je to proto, že cílové obrazy s vysokou kvalitou, jimiž je síť trénována, mají aplikovaný antialiasing a interpolátor tedy cílí na podobně vypadající obraz s vyhlazenými hranami. Tento AA efekt nestojí výkon navíc, protože se dostavuje jako součást onoho upscalingu. DLSS tím striktně vzato nekonkuruje nativnímu obrazu, ale nativnímu obrazu s antialiasingem.

Nvidia také proto DLSS srovnává s TAA a proto také asi metodu označuje jako supersampling, i když jde o náhražku. Ale je třeba pamatovat, že jde o srovnání dvou kvalitativně odlišných výsledků a antialiasing TAA by asi měl být kvalitnější než AA efekt v rámci DLSS. Nativní rozlišení s TAA by tudíž mělo být striktně lepší. Výjimkou ale budou situace, kdy temporální průměrování (TAA je temporální filtr pracující s více snímky následujícími po sobě) způsobí nějaké artefakty kvůli zprůměrování (rozmazání) něčeho, co se v obraze hýbalo.

Zde Nvidia srovnává DLSS 2X (kvalitnější režim DLSS, na který se podíváme za chvíli) s TAA v případě, kdy temporální filtrování TAA způsobilo rozmazání pohybu a tím ztrátu detailů. Je ale třeba říct, že rozmazání v pohybu nemusí oko postřehnout, kdežto nižší detaily v statickém snímku by postřehlo Zde Nvidia srovnává DLSS 2X (kvalitnější režim DLSS, na který se podíváme za chvíli) s TAA v případě, kdy temporální filtrování TAA způsobilo rozmazání pohybu a tím ztrátu detailů. Je ale třeba říct, že rozmazání v pohybu nemusí oko postřehnout, kdežto nižší detaily v statickém snímku by zaregistrovat

DLSS 2X: Šlo by to i bez upscalingu?

Onen inherentní vyhlazovací efekt není bez zajímavosti. Možná vás tedy už napadlo, zda by se takový naučený vyhlazovací filtr nedal použít i bez onoho upscalingu, přímo při nativním rozlišení. Na toto Nvidia myslela a tato metoda by také měla být dostupná – označuje se jako DLSS 2X. V tomto případě je vstupní obraz na plném rozlišení a neuronová síť se opět snaží přiblížit jej obrazu s vyšší kvalitou – ještě s vyšším rozlišením a s vyhlazováním. DLSS 2X v tomto režimu funguje jako postprocessing a jde tedy o podobný typ antialiasingu jako je FXAA, ovšem implementován je jako neuronová síť běžící na tensor cores. Kvalita by ale mohla být vyšší než s FXAA, protože filtr je vytrénovaný přímo pro danou hru.

Příklad efektu DLSS X2 proti nativnímu obrazu se supersamplingem podle Nvidie Příklad efektu DLSS X2 proti nativnímu obrazu se supersamplingem podle Nvidie

V tomto případě ale samozřejmě neušetříte výkon jako se standardním DLSS, protože vykreslování běželo s plnou kvalitou. Filtr DLSS 2X by ale měl být skoro zadarmo, protože běží na tensor cores, nestojí teoreticky mnoho výpočetního času navíc. Tudíž by tato metoda vykreslování měla být rychlejší, než pokud by se na stejném rozlišení aplikoval nějaký kvalitnější antialiasing na bázi reálného supersamplingu. V tomto ohledu tedy o určitém zrychlení hovořit lze, ale opět asi za cenu ztráty kvality.

bitcoin_skoleni

Hry budou muset DLSS explicitně podporovat

To, že se neuronová síť DLSS trénuje zvlášť pro každou hru má i nevýhodu. DLSS bude potřebovat v každém titulu explicitní podporu. Pokud ji vývojáři hry ve spolupráci s Nvidií nevytvoří, nepůjde DLSS použít. Ovšem teoreticky by mělo být možná natrénovat nějakou generickou síť, která by byla méně kvalitní, ale univerzální. Je možné, že něco takového Nvidia oznámí později po dalším ladění.

Hry, u kterých by DLSS mělo být implementováno Hry, u kterých by DLSS mělo být implementováno (Zdroj: Nvidia)

Užitečnost této techniky každopádně bude záviset na obrazové kvalitě a příjemnosti oné interpolace. A nezbývá tedy než počkat, až to bude někde dobře otestováno v praxi. Trochu zrada může být v onom separátním trénování, je docela možné, že efekt se bude hr od hry trošku lišit, takže někdo to může sednout lépe, někde víc.