Asymetrické číselné soustavy - Asymmetric numeral systems
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.Květen 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Číselné soustavy |
---|
Hindu-arabská číselná soustava |
východní Asiat |
evropský |
americký |
Abecední |
Bývalý |
Poziční systémy podle základna |
Nestandardní poziční číselné systémy |
Seznam číselných soustav |
Asymetrické číselné soustavy (ANS)[1] je rodina kódování entropie metody zavedené Jarosławem (Jarkem) Dudou[2] z Jagellonská univerzita, použito v komprese dat od roku 2014[3] díky vylepšenému výkonu ve srovnání s dříve používanými metodami je až 30krát rychlejší.[4] ANS kombinuje kompresní poměr aritmetické kódování (který používá téměř přesné rozdělení pravděpodobnosti), s náklady na zpracování podobné jako u Huffmanovo kódování. V předložené variantě ANS (tANS) je toho dosaženo konstrukcí a konečný stavový stroj pracovat s velkou abecedou bez použití násobení.
ANS se mimo jiné používá v Facebook Zstandard kompresor[5][6] (také se používá např. v Linux jádro,[7] Android[8] operační systém, byl publikován jako RFC 8478 pro MIM[9] a HTTP[10]), v Jablko LZFSE kompresor,[11] Google 3D kompresor Draco[12](používá se např. v Pixar Univerzální popis scény formát[13]) a kompresor obrazu PIK,[14] v NACPAT DNA kompresor[15] z SAMtools utility, Dropbox Kompresor DivANS,[16] a v JPEG XL[17] standard komprese obrazu nové generace
Základní myšlenkou je zakódovat informace do jediného přirozeného čísla .Ve standardním systému binárních čísel můžeme přidat trochu informací připojením na konci což nám dává .Pro kodér entropie je to optimální, pokud .ANS zobecňuje tento proces pro libovolné sady symbolů s doprovodným rozdělením pravděpodobnosti .V ANS, pokud je výsledkem připojení informací z na , pak . Ekvivalentně , kde je počet bitů informací uložených v čísle a je počet bitů obsažených v symbolu .
U pravidla kódování je sada přirozených čísel rozdělena na disjunktní podmnožiny odpovídající různým symbolům - jako na sudá a lichá čísla, ale s hustotami odpovídajícími rozdělení pravděpodobnosti kódovaných symbolů. Poté přidejte informace ze symbolu do informací již uložených v aktuálním čísle , jdeme na číslo být pozicí -té vystoupení z -tá podmnožina.
Existují alternativní způsoby, jak to v praxi aplikovat - přímé matematické vzorce pro kroky kódování a dekódování (varianty uABS a rANS), nebo lze celé chování dát do tabulky (varianta tANS). K prevenci se používá renormalizace přechod do nekonečna - přenos nahromaděných bitů do nebo z bitového toku.
Entropické kódování
Předpokládejme, že by byla kódována sekvence 1000 nul a jedniček, což by trvalo 1000 bitů, než by se uložily přímo. Pokud je však nějak známo, že obsahuje pouze 1 nulu a 999 jednotek, stačilo by zakódovat polohu nuly, což vyžaduje pouze zde místo původních 1000 bitů.
Obecně taková délka sekvence obsahující nuly a ty, pro jistou pravděpodobnost , jsou nazývány kombinace. Použitím Stirlingova aproximace dostaneme jejich asymptotické číslo
volala Shannonova entropie.
Proto, abychom si vybrali jednu takovou sekvenci, potřebujeme přibližně bity. Stále je bity, pokud může však být i mnohem menší. Například potřebujeme jen bity pro .
An kodér entropie umožňuje kódování sekvence symbolů pomocí přibližně Shannonových entropických bitů na symbol. Například ANS lze přímo použít k výčtu kombinací: přiřadit jiné přirozené číslo každé posloupnosti symbolů majících pevné proporce téměř optimálním způsobem.
Na rozdíl od kombinací kódování se toto rozdělení pravděpodobnosti u datových kompresorů obvykle liší. Za tímto účelem lze Shannonovu entropii považovat za vážený průměr: symbol pravděpodobnosti obsahuje kousky informací. ANS kóduje informace do jediného přirozeného čísla , interpretováno jako obsahující kousky informací. Přidání informací ze symbolu pravděpodobnosti zvyšuje tento informační obsah na . Nové číslo obsahující obě informace by tedy mělo být .
Základní pojmy ANS

Představte si, že jsou nějaké informace uloženy v přirozeném čísle , například jako bitová sekvence jeho binární expanze. Chcete-li přidat informace z binární proměnné , můžeme použít funkci kódování , který posune všechny bity o jednu pozici nahoru a umístí nový bit do nejméně významné polohy. Nyní funkce dekódování umožňuje jednomu získat předchozí a toto přidalo bit: . Můžeme začít s počáteční stav, pak použijte funkce na po sobě jdoucích bitech konečné bitové sekvence pro získání finále číslo ukládající celou tuto sekvenci. Pak pomocí fungovat vícekrát do umožňuje načíst bitovou sekvenci v obráceném pořadí.
Výše uvedený postup je optimální pro rovnoměrné (symetrické) rozdělení pravděpodobnosti symbolů . ANS to zobecňují, aby byly optimální pro jakékoli zvolené (asymetrické) rozdělení pravděpodobnosti symbolů: . Zatímco ve výše uvedeném příkladu byla volba mezi sudým a lichým , v ANS je toto sudé / liché rozdělení přirozených čísel nahrazeno rozdělením na podmnožiny mající hustoty odpovídající předpokládanému rozdělení pravděpodobnosti : do polohy , existuje přibližně výskyty symbolu .
Funkce kódování vrátí -tý vzhled z takové podmnožiny odpovídající symbolu . Předpoklad hustoty je ekvivalentní podmínce . Za předpokladu, že přirozené číslo obsahuje informace o bitech, . Odtud pochází symbol pravděpodobnosti je zakódován jako obsahující bitů informací, jak je požadováno od kodéry entropie.
Jednotná binární varianta (uABS)
Začněme binární abecedou a rozdělením pravděpodobnosti , . Až do polohy chceme přibližně analogy lichých čísel (pro ). Můžeme zvolit tento počet vystoupení jako , získávání . Tato varianta se nazývá uABS a vede k následujícím dekódovacím a kódovacím funkcím:[18]
Dekódování:
s = strop((X+1)*str) - strop(X*str) // 0 if fract (x * p) <1-p, else 1-li s = 0 pak new_x = X - strop(X*str) // D (x) = (new_x, 0)-li s = 1 pak new_x = strop(X*str) // D (x) = (new_x, 1)
Kódování:
-li s = 0 pak new_x = strop((X+1)/(1-str)) - 1 // C (x, 0) = new_x-li s = 1 pak new_x = podlaha(X/str) // C (x, 1) = new_x
Pro rovná se standardnímu binárnímu systému (s invertovanou 0 a 1), pro jinou stane se optimální pro toto dané rozdělení pravděpodobnosti. Například pro tyto vzorce vedou k tabulce s malými hodnotami :
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 |
Symbol odpovídá podmnožině přirozených čísel s hustotou , což jsou v tomto případě pozice . Tak jako , tyto pozice se zvýší o 3 nebo 4. Protože zde se vzor symbolů opakuje každých 10 pozic.
Kódování lze najít tak, že vezmete řádek odpovídající danému symbolu a výběr daného v tomto řádku. Pak poskytuje horní řádek . Například, ze střední do horní řady.
Představte si, že bychom chtěli kódovat sekvenci '0100' počínaje od . za prvé nás vede , pak na , pak na , pak na . Pomocí funkce dekódování na tomto finále , můžeme načíst sekvenci symbolů. Použití tabulky k tomuto účelu, v prvním řádku určuje sloupec, potom neprázdný řádek a zapsaná hodnota určují odpovídající a .
Varianty rozsahu (rANS) a streamování
Varianta rozsahu také používá aritmetické vzorce, ale umožňuje operaci s velkou abecedou. Intuitivně rozděluje množinu přirozených čísel na velikost rozsahy a rozdělte je každý stejným způsobem do podoborů proporcí daných předpokládaným rozdělením pravděpodobnosti.
Začneme s kvantizací rozdělení pravděpodobnosti do jmenovatel, kde je vybrán (obvykle 8-12 bitů): pro některé přirozené čísla (velikosti podrozsahů).
Označit , funkce kumulativní distribuce:
Pro označit funkci (obvykle v tabulce)
symbol (y) = s takový, že CDF [s] <= y
Nyní je funkce kódování:
C (x, s) = (podlaha (x / f [s]) << n) + (x% f [s]) + CDF [s]
Dekódování: s = symbol (x & maska)
D (x) = (f [s] * (x >> n) + (x & maska) - CDF [s], s)
Tímto způsobem můžeme kódovat sekvenci symbolů do velkého přirozeného čísla . Aby se zabránilo použití aritmetiky velkého počtu, v praxi se používají varianty proudu: which enforce renormalizací: odeslání nejméně významných bitů z do nebo z bitového proudu (obvykle a jsou pravomoci 2).
Ve variantě rANS je například 32 bit. Pro 16bitovou renormalizaci , dekodér v případě potřeby doplní nejméně významné bity z bitového toku:
if (x <(1 << 16)) x = (x << 16) + read16bits ()
Předložená varianta (TANS)

Varianta tANS staví celé chování (včetně renormalizace) na do tabulky, která dává a konečný stavový stroj vyhýbání se potřebě množení.
Nakonec lze krok dekódovací smyčky zapsat jako:
t = dekódovací tabulka(X); X = t.novýX + readBits(t.nbBits); // přechod stavuwriteSymbol(t.symbol); // dekódovaný symbol
Krok kódovací smyčky:
s = Číst symbol();nbBits = (X + ns[s]) >> r; // počet bitů pro renormalizaciwriteBits(X, nbBits); // odeslání nejméně významných bitů do bitstreamX = encodingTable[Start[s] + (X >> nbBits)];
Specifické kódování tANS je určeno přiřazením symbolu každému jejich poloha by měla být úměrná předpokládaným pravděpodobnostem. Například lze zvolit přiřazení „abdacdac“ pro Pr (a) = 3/8, Pr (b) = 1/8, Pr (c) = 2/8, Pr (d) = 2/8 rozdělení pravděpodobnosti. Pokud jsou symboly přiřazeny v rozsahu délek, které jsou mocninami 2, dostali bychom Huffmanovo kódování. Například pro tANS s přiřazením symbolu „aaaabcdd“ by byl získán kód předpony a-> 0, b-> 100, c-> 101, d-> 11.

Poznámky
Pokud jde o Huffmanovo kódování, je úprava rozdělení pravděpodobnosti tANS relativně nákladná, proto se používá hlavně ve statických situacích, obvykle u některých Lempel – Ziv schéma (např. ZSTD, LZFSE). V tomto případě je soubor rozdělen do bloků - pro každý z nich jsou frekvence symbolů nezávisle počítány, poté po aproximaci (kvantizaci) zapsány do záhlaví bloku a použity jako statické rozdělení pravděpodobnosti pro tANS.
Naproti tomu se rANS obvykle používá jako rychlejší náhrada za rozsahové kódování (např. NACPAT, LZNA, Draco, AV1). Vyžaduje násobení, ale je paměťově efektivnější a je vhodná pro dynamické přizpůsobování distribucí pravděpodobnosti.
Kódování a dekódování ANS se provádí v opačných směrech, což z něj činí a zásobník pro symboly. Tato nepříjemnost se obvykle vyřeší kódováním zpětným směrem, poté lze dekódování provést dopředu. Pro kontextovou závislost, jako Markovův model musí kodér používat kontext z pohledu pozdějšího dekódování. Pro přizpůsobivost by kodér měl nejprve přejít dopředu, aby našel pravděpodobnosti, které budou použity (předpovězeny) dekodérem, a uložit je do vyrovnávací paměti, poté kódovat zpětným směrem pomocí pravděpodobností v mezipaměti.
Konečný stav kódování je nutný pro zahájení dekódování, a proto musí být uložen v komprimovaném souboru. Tuto cenu lze kompenzovat uložením některých informací v počátečním stavu kodéru. Například namísto zahájení ve stavu „10 000“ začněte ve stavu „1 ****“, kde „*“ jsou některé další uložené bity, které lze načíst na konci dekódování. Alternativně lze tento stav použít jako kontrolní součet spuštěním kódování s pevným stavem a otestováním, zda je konečný stav dekódování očekávaný.
Viz také
- Entropické kódování
- Huffmanovo kódování
- Aritmetické kódování
- Kódování rozsahu
- Zstandard Facebook kompresor
- LZFSE Apple kompresor
Reference
- ^ J. Duda, K. Tahboub, N. J. Gadil, E. J. Delp, Použití asymetrických numerických systémů jako přesné náhrady za Huffmanovo kódování „Picture Coding Symposium, 2015.
- ^ http://th.if.uj.edu.pl/~dudaj/
- ^ Duda, Jarek (6. října 2019). "Seznam kompresorů využívajících ANS, implementace a další materiály". Citováno 6. října 2019.
- ^ „Google byl obviněn ze snahy patentovat technologii veřejného vlastnictví“. Pípající počítač. 11. září 2017.
- ^ Menší a rychlejší komprese dat se standardem Zstandard, Facebook, srpen 2016
- ^ 5 způsobů, jak Facebook vylepšil kompresi v měřítku pomocí Zstandard, Facebook, prosinec 2018
- ^ Komprese Zstd pro Btrfs a Squashfs pro Linux 4.14, již používaná na Facebooku, Phoronix, září 2017
- ^ „Zstd ve verzi Android P“.
- ^ Zstandardní komprese a aplikace / zstd Media Type (e-mailový standard)
- ^ Parametry protokolu HTTP (Hypertext Transfer Protocol), IANA
- ^ Apple otevírá svůj nový kompresní algoritmus LZFSE, InfoQ, červenec 2016
- ^ Knihovna 3D komprese Google Draco
- ^ Google a Pixar přidávají komprimaci Draco do formátu Universal Scene Description (USD)
- ^ Google PIK: nový ztrátový formát obrázku pro internet
- ^ Specifikace formátu CRAM (verze 3.0)
- ^ Budování lepší komprese společně s DivANS
- ^ Rhatushnyak, Alexander; Wassenberg, Jan; Sneyers, Jon; Alakuijala, Jyrki; Vandevenne, Lode; Versari, Luca; Obryk, Robert; Szabadka, Zoltan; Kliuchnikov, Evgenii; Comsa, Iulia-Maria; Potempa, Krzysztof; Bruse, Martin; Firsching, Moritz; Khasanova, Renata; Ruud van Asseldonk; Boukortt, Sami; Gomez, Sebastian; Fischbacher, Thomas (2019). "Návrh výboru pro systém kódování obrázků JPEG XL". arXiv:1908.03565 [eess.IV ].
- ^ Vysvětlení datové komprese, Matt Mahoney
externí odkazy
- Vysoce výkonné hardwarové architektury pro kódování entropie asymetrických numerických systémů S. M. Najmabadi, Z. Wang, Y. Baroud, S. Simon, ISPA 2015
- https://github.com/Cyan4973/FiniteStateEntropy Finální stavová entropie (FSE) implementace tANS od Yanna Colleta
- https://github.com/rygorous/ryg_rans Implementace rANS od Fabiana Giesena
- https://github.com/jkbonfield/rans_static Rychlá implementace rANS a aritmetické kódování od Jamese K. Bonfielda
- https://github.com/facebook/zstd/ Facebook Zstandard kompresor Yann Collet (autor LZ4 )
- https://github.com/lzfse/lzfse LZFSE kompresor (LZ + FSE) ze dne Apple Inc.
- CRAM 3.0 DNA kompresor (objednávka 1 rANS) (část SAMtools ) od Evropský bioinformatický institut
- https://chromium-review.googlesource.com/#/c/318743 implementace pro Google VP10
- https://chromium-review.googlesource.com/#/c/338781/ implementace pro Google WebP
- https://github.com/google/draco/tree/master/core Google 3D knihovna komprese Draco
- https://aomedia.googlesource.com/aom/+/master/aom_dsp implementace Aliance pro otevřená média
- http://demonstrations.wolfram.com/DataCompressionUsingAsymmetricNumeralSystems/ Demonstrační projekt Wolfram
- http://gamma.cs.unc.edu/GST/ GST: GPU dekódovatelný superkomprimovaný Textury
- Pochopení komprese kniha A. Haecky, C. McAnlis