- 1
Tiedonpakkausalgoritmit voidaan määritellä tiedostojen koon pienentämisprosessiksi samalla kun säilytetään sama tai samankaltainen data jossain määrin. Tämä tehdään suorittamalla tarpeettomien tietojen poistaminen tai tekemällä tiedot uudelleen suurempaa tehokkuutta varten.
Pakkauksen yhteydessä on mahdollista valita häviölliset tai häviöttömät menetelmät. Jos puhutaan häviöllisestä menetelmästä, se poistaa tiedot pysyvästi. Toisaalta häviötön menetelmä huolehtii alkuperäisistä tiedoista. Valitsemasi tyyppi riippuu siitä, millaista laatua haluat tiedostoistasi.
Tässä artikkelissa on sekoitus häviöttömiä tiedonpakkausalgoritmeja ja syväoppimiseen perustuvia kuvan- ja videonpakkausalgoritmeja.
Häviöttömät tiedonpakkausalgoritmit ovat yleensä olentoja, joita käytetään arkistointitehtävän suorittamiseen tai muihin korkealaatuisiin toimintoihin. Näiden tiedonpakkausalgoritmien avulla voidaan suorittaa tiedostokoon pienentäminen. Se myös varmistaa, että tiedostot voidaan palauttaa kokonaan, jos ne on palautettava.
Sisällysluettelo
- LZ77
- LZR
- LZSS
- Deflate
- LZMA
- LZMA2
- Multi-Layer Perceptron (MLP)-pohjainen pakkaus
- Dee Coder- Deep Neural Network Based Video Compression
- Convolutional Neural Network (CNN) – Based compression
- Generative Adversarial Network (GAN)- Based Compression
- Prediction by partial matching (PPM)
- Run-length encoding (RLE)
- bzip2
- Huffman-koodaus
- ZStandard
- Johtopäätökset
LZ77
LZ77 julkistettiin vuonna 1977, ja sitä kutsutaan niin monen muun häviöttömän pakkausalgoritmin perustaksi. Se käyttää yleensä ”Sliding Window” -menetelmää. Tässä menetelmässä se huolehtii sanakirjasta, joka käyttää kolmikoita edustamaan:
- Offset- Sitä voidaan kutsua lauseen varsinaiseksi alkupisteeksi ja tiedoston alkupisteeksi.
- Run-length-Se määritellään merkkien määräksi, jotka auttavat sinua lauseen tekemisessä.
- Poikkeavat merkit-Näitä ovat markkinamiehet, jotka ilmaisevat uuden lauseen.
Se sisältää merkinnän siitä, että käytetty fraasi on täysin sama kuin alkuperäinen fraasi, ja määrittelee myös sen, jos siinä on jokin poikkeava merkki.
Kun tiedostoa jäsennetään, sanakirja päivittyy dynaamisesti myös pakatun datan sisällön ja koon heijastamiseksi.
LZR
LZR kehitettiin ja julkistettiin vuonna 1981. Michael Rodeh julkisti sen ja muutti sitä myöhemmin. Sitä voidaan käyttää ensisijaisena vaihtoehtona LZ77-tiedonpakkausalgoritmille, mutta sinulla on myös mahdollisuus käyttää sitä mihin tahansa offsetiin tiedoston sisällä. Jos et käytä sitä lineaarisesti, se tarvitsee huomattavan määrän muistitilaa. Tämä ehto tekee LZ77:n käytöstä paremman vaihtoehdon. Tämä tiedonpakkausalgoritmi on suoraviivainen toteuttaa, ja sillä on potentiaalia erittäin suureen suorituskykyyn, kun se toteutetaan laitteistolla.
Se on algoritmi, joka on laajalti käytetty Unixin tiedonpakkausalgoritmi apuohjelma pakkaa ja jota käytetään GIF-kuvamuodossa. Siitä tuli ensimmäinen tietojenpakkausalgoritmi, jota käytettiin laajasti tietokoneissa. Suuri englanninkielinen tekstitiedosto voidaan tyypillisesti pakata LZW:llä noin puoleen alkuperäisestä koosta.
LZSS
LZSS on lyhenne sanoista Lempel Ziv Storer Szymanski ja se kehitettiin ja julkistettiin vuonna 1982. Se on tiedonpakkausalgoritmi, joka parantaa LZ77:ää. Tämä pakkausprosessi tehdään sisällyttämällä siihen menetelmä, joka pitää silmällä, pienentääkö korvaaminen tiedoston kokoa. Jos se ei vähene, syöttöaineisto jätetään alkuperäiseen muotoonsa. Se ei myöskään suosi poikkeavien merkkien käyttöä, vaan käyttää mieluummin vain offset-pituuspareja.
Tätä algoritmia käytetään pääasiassa tiedostojen arkistointiin eri formaatteihin, kuten RAR- tai ZIP-muotoihin, tai verkkodatan pakkaamiseen.
Sitä voidaan kutsua sanakirjakoodaustekniikaksi. LZSS pyrkii korvaamaan symbolijonon viittauksella saman merkkijonon sanakirjapaikkaan. Keskeinen ero LZ77:n ja LZSS:n välillä on se, että LZ77:ssä sanakirjaviite saattoi olla pidempi kuin korvattava merkkijono. LZSS:ssä tällaiset viittaukset jätetään pois, jos pituus on pienempi kuin ”break-even”-piste.
Deflate
Deflate on häviötön tiedonpakkausalgoritmillinen tiedostomuoto, jossa käytetään LZSS:n ja Huffman-koodauksen yhdistelmää. Sen on suunnitellut Phil Katz vuonna 1993. Huffman-koodaus on myös algoritmi, joka kehitettiin vuonna 1952. Se voidaan määritellä entropiakoodausalgoritmiksi, joka auttaa koodin määrittämisessä merkin taajuuden perusteella.
Katz suunnitteli myös alkuperäisen algoritmin, jota käytetään Deflate-virtojen rakentamiseen. Kuten RFC-dokumentissa todettiin, Deflate-tiedostoja tuottavan algoritmin uskottiin laajalti olevan toteutettavissa tavalla, joka ei kuulu patenttien piiriin. Tämä johti sen laajaan käyttöön ZIP-tiedostomuodon lisäksi, joka oli Katzin päätarkoitus sen suunnittelussa. Patenttia ei ole enää saatavilla.
LZMA
LZMA on lyhenne sanoista Lempel Ziv Markovin ketjualgoritmi ja se on suunniteltu ja julkaistu vuonna 1998. Sitä voidaan sanoa myös LZ77:n muunnelmaksi. Tämä modifikaatio tehtiin -Zip-arkistointiohjelmaa varten .7z-muodossa. Käytössä on ketjupakkausmenetelmä, joka toteuttaa muunnetun LZ77:n pikemminkin bitti- kuin tavutasolla. Ulostulon ilmestyminen käsitellään edelleen käyttämällä aritmeettista koodausta suuremman pakkauksen suorittamiseksi.
Muiden pakkausvaiheiden suorituskyky on riippuvainen tarkasta toteutuksesta. Tämä tiedonpakkausalgoritmi käyttää sanakirjapakkausmenetelmää, joka muistuttaa hyvin paljon Abraham Lempelin ja Jacob Zivin vuonna 1977 julkaisemaa LZ77-algoritmia. Siinä on myös korkea pakkaussuhde ja muuttuva pakkaussanakirjan koko. Purkamisnopeus säilyy silti hyvin samanlaisena kuin muilla yleisesti käytetyillä pakkausalgoritmeilla.
LZMA2
LZMA2 on suunniteltu ja julkaistu vuonna 2009. Se voidaan määritellä myös LZMA:n modifikaatioksi. Se tekee LZMA:sta paremman parantamalla sen suorituskykyä suuremmilla monisäikeisyysominaisuuksilla. LZMA2 tarjoaa myös parannetun kokoonpuristumattoman datan käsittelyn. Se on yksinkertainen konttiformaatti, joka voi sisältää sekä pakkaamatonta dataa että LZMA-dataa ja vieläpä useilla eri LZMA-koodausparametreilla.
LZMA2 tukee mielivaltaisesti skaalautuvaa monisäikeistä pakkaamista ja purkamista sekä osittain pakkaamattoman datan tehokasta pakkaamista. Sillä voi kuitenkin olla joitakin tietoturvaongelmia, ja se voi olla vaarallinen ja vähemmän tehokas kuin LZMA. Yksinkertaisesti sanottuna tämä voi olla sinulle hyödyllinen, mutta kyllä se ei ole niin turvallinen verrattuna LZMA:han.
Multi-Layer Perceptron (MLP)-pohjainen pakkaus
MLP voidaan määritellä teknologiaksi, joka käyttää useita neuronikerroksia syöttö-, käsittely- ja lähtötietojen antamiseen. Se voidaan toteuttaa ulottuvuuden vähentämistehtäviin ja myös tietojen pakkaamiseen. MLP-pohjainen algoritmi kehitettiin ensimmäisen kerran vuonna 1988, ja se liittyy jo olemassa oleviin prosesseihin:
- Binäärikoodaus- tavallinen kahden symbolin koodaus.
- Kvantisointi- ongelmia syötteen jatkuvasta joukosta diskreettiin joukkoon.
- Spatiaalisen alueen muunnos – pikselikohtaiset muutokset dataan.
Optimaalisen binäärikoodin määrittämiseksi MLP-algoritmi käyttää edellä mainituista prosesseista saatuja ulostuloja hajotusneuroverkkoon.
Edelleen tätä algoritmia muokattiin intuitiivisilla tekniikoilla, jotka mahdollistivat tietojen tarkan approksimoinnin täysin naapuridatan perusteella backpropagationin avulla. Se voi olla erittäin hyödyllinen kuva- ja videodatan pakkauksessa.
Dee Coder- Deep Neural Network Based Video Compression
Deep Coder on määritelty Convolutional Neural Network (CNN) -pohjaiseksi kehykseksi. Tämä tekee esityksestä vaihtoehdon niille videonpakkaustekniikoille, joita olemme käyttäneet niin kauan. Ennustaville ja jäännössignaaleille erilaisia Convolutional Neural Networks (CNN) tuodaan käyttää tätä mallia.
Se suorittaa ominaisuuskarttojen koodauksen binäärivirtaan käyttämällä skalaarikvantisointia ja hyvin vanhaa ja perinteistä tiedostojen pakkausalgoritmia nimeltä Huffman-koodaus. Väitetään, että tämä malli pystyy tarjoamaan paremman suorituskyvyn verrattuna tunnettuun H.264/AVC-videokoodausstandardiin.
Convolutional Neural Network (CNN) – Based compression
CNN:t määritellään eri kerroksista koostuviksi neuroverkoiksi. Sitä käytetään pääasiassa kuvien tunnistamiseen ja ominaisuuden havaitsemiseen. Kun sitä sovelletaan pakkaamiseen, nämä verkot käyttävät konvoluutiota naapuripikselien välisen yhteyden laskemiseen. Jos sitä verrataan MLP-pohjaisiin algoritmeihin, CNN:t osoittavat parempia pakkaustuloksia kuin ne.
Tämä tarjoaa myös paremman superresoluution suorituskyvyn ja artefaktien vähentämisen. Tämän lisäksi CNN-pohjaiset tiedonpakkausalgoritmit parantavat JPEG-kuvien laatua. Tämä tapahtuu vähentämällä huippusignaalin ja kohinan suhdetta ja rakenteellista samankaltaisuutta.
CNN-pohjaisella pakkauksella päästään myös yhteen High-Efficiency Video Coding -standardin suorituskyvyn kanssa. Tämä tehdään käyttämällä entropian estimointia. Se voi olla myös erittäin hyödyllinen tiedostojen pakkauksen suorittamisessa.
Generative Adversarial Network (GAN)- Based Compression
GAN voidaan määritellä neuroverkkojen vaihtoehdoksi, jossa käytetään kahta kilpailevaa verkkoa. Tämä tehdään tarkempien analyysien ja ennusteiden tuottamiseksi. Vuonna 2017 kehitettiin ensimmäisen kerran GAN-pohjaisia algoritmeja. Nämä tiedonpakkausalgoritmit voivat pakata tiedostoja yli kaksi ja puoli kertaa pienemmiksi verrattuna perinteisiin yleisesti käytettyihin menetelmiin, kuten JPEG:hen tai WebP:hen.
GAN-pohjaisia algoritmeja voidaan käyttää reaaliaikaiseen pakkaamiseen rinnakkaisen prosessoinnin kanssa, kun niitä käytetään yhdessä. Tämä algoritmi toimii siten, että se pakkaa kuvat täysin yhteensopivimpien piirteiden perusteella.
Kun dekoodaus suoritetaan, näiden piirteiden perusteella tehtyjen ennusteiden perusteella kuvat rekonstruoidaan. Jos sitä verrataan CNN-pohjaiseen pakkaukseen, GAN-pohjainen pakkaus tuottaa erittäin korkealaatuisia kuvia, koska se eliminoi vastakohtaisen häviön.
Prediction by partial matching (PPM)
PPM on adaptiivinen tilastollinen tiedonpakkaustekniikka, joka perustuu kontekstin mallintamiseen ja ennustamiseen. Nämä mallit käyttävät pakkaamattomassa symbolivirrassa olevien aiempien symbolien joukkoa ennustamaan seuraavan symbolin virrassa. PPM-algoritmeja voidaan käyttää myös klusteroimaan dataa ennustettuihin ryhmiin klusterianalyysissä.
Edellisten symbolien määrä n määrää PPM-mallin järjestyksen, jota merkitään PPM(n).
On olemassa myös rajoittamattomia muunnelmia, joissa kontekstilla ei ole pituusrajoituksia, ja niitä merkitään PPM. Jos ennustusta ei voida tehdä kaikkien n kontekstisymbolin perusteella, ennustusta yritetään tehdä n – 1 symbolin avulla. Prosessi toistetaan, kunnes osuma löytyy tai kontekstissa ei ole enää yhtään symbolia jäljellä. Tällöin tehdään kiinteä ennuste.
PPM-pakkaustoteutukset vaihtelevat suuresti muiden yksityiskohtien osalta. Varsinainen symbolivalinta tallennetaan yleensä aritmeettisen koodauksen avulla, vaikka on mahdollista käyttää myös Huffman-koodausta tai jopa jonkinlaista sanakirjakoodaustekniikkaa.
Run-length encoding (RLE)
RLW on häviöttömän tiedonpakkauksen muoto, jossa datan juoksutukset (sekvenssit, joissa sama data-arvo esiintyy monissa peräkkäisissä data-alkioissa) tallentuvat alkuperäisen juoksutuksen sijaan yhdeksi ainoaksi data-arvoksi ja -laskennaksi. Tämä on käyttökelpoisinta datassa, joka sisältää monia tällaisia sarjoja.
Esimerkiksi yksinkertaiset graafiset kuvat, kuten kuvakkeet, viivapiirrokset, Conway’s Game of Life ja animaatiot. Se ei ole käyttökelpoinen sellaisten tiedostojen kanssa, joissa ei ole paljon juoksutuksia, koska se voi kasvattaa tiedostokokoa huomattavasti.
RLE:llä voidaan viitata myös CompuServen tukemaan varhaiseen grafiikkatiedostomuotoon mustavalkoisten kuvien pakkaamiseen, mutta sen syrjäytti laajalti heidän myöhempi Graphics Interchange Format (GIF). RLE viittaa myös Windows 3.x:ssä vähän käytettyyn kuvaformaattiin, jonka päätepiste rule on Run Length Encoded Bitmap ja jota käytettiin Windows 3.x:n aloitusnäytön pakkaamiseen.
bzip2
bzip2 on ilmainen ja avoimen lähdekoodin tiedonpakkausohjelma, joka käyttää Burrows-Wheeler-algoritmia. Se pakkaa vain yksittäisiä tiedostoja eikä ole tiedostojen arkistointiohjelma. Sen on kehittänyt Julian Seward ja sitä ylläpitää Federico Mena. Seward teki bzip2:n ensimmäisen julkisen julkaisun, version 0.15, heinäkuussa 1996. Kompressorin vakaus ja suosio kasvoivat seuraavien vuosien aikana, ja Seward julkaisi version 1.0 vuoden 2000 lopulla.
Yhdeksän vuoden tauon jälkeen projektin päivitykset ovat olleet poissa vuodesta 2010. 4. kesäkuuta 2019 Federico Mena otti vastaan bzip2-projektin ylläpitovastuun. bzip2 pakkaa dataa lohkoihin, joiden koko on 100-900 kB.
Se käyttää Burrows-Wheeler-muunnosta muuntamaan usein toistuvat merkkijonot identtisten kirjainten merkkijonoiksi. Sen jälkeen se soveltaa move-to-front-muunnosta ja Huffman-koodausta. bzip2:n esi-isä bzip käytti aritmeettista koodausta Huffmanin sijaan. Muutos tehtiin ohjelmistopatenttirajoituksen vuoksi.
Huffman-koodaus
Huffman-koodaus on tietyntyyppinen optimaalinen etuliitekoodi, jota käytetään yleisesti häviöttömään tiedonpakkaukseen. Tällaisen koodin löytämisessä tai käyttämisessä hyödynnetään Huffman-koodausta, algoritmia, jonka David A. Huffman kehitti ollessaan tohtorikoulutettava MIT:ssä ja joka julkaistiin vuonna 1952 artikkelissa ”A Method for the Construction of Minimum-Redundancy Codes.”
Huffmanin algoritmin ulostuloa voidaan pitää vaihtelevan pituisena kooditaulukkona lähdesymbolin (esim. tiedoston merkin) koodaamiseksi. Algoritmi johtaa tämän taulukon arvioidusta todennäköisyydestä tai esiintymistiheydestä (paino) kullekin lähdesymbolin mahdolliselle arvolle.
Kuten muissakin entropian koodausmenetelmissä, yleisemmät symbolit esitetään yleensä käyttämällä vähemmän bittejä kuin harvinaisemmat symbolit. Huffmanin menetelmä voidaan toteuttaa tehokkaasti. Koodin löytäminen tapahtuu ajassa, joka on lineaarinen tulopainojen lukumäärään nähden, jos nämä painot on lajiteltu.
ZStandard
Zstandard (tai zstd) on häviötön datan pakkausalgoritmi, jonka Yann Collet kehitti Facebookissa. Zstd on referenssitoteutus C-kielellä. Toteutuksen versio 1 julkaistiin vapaana ohjelmistona 31. elokuuta 2016.
Zstandard suunniteltiin antamaan pakkaussuhde, joka on verrattavissa DEFLATE-algoritmiin (joka kehitettiin vuonna 1991 ja jota käytettiin alkuperäisissä ZIP- ja gzip-ohjelmissa), mutta nopeampi, erityisesti purkamisessa. Se on viritettävissä pakkaustasoilla, jotka vaihtelevat negatiivisesta 5:stä (nopein) 22:een (hitain pakkausnopeus, mutta paras pakkaussuhde).
Zstd antaa suurimmalla pakkaustasollaan pakkaussuhteen, joka on lähellä LZMA:ta, LZAHM:ää ja PPM:ää. Se toimii paremmin kuin LZA tai bzip2. Zstandard saavuttaa nykyisen Pareto-rajan, sillä se purkaa pakkauksen nopeammin kuin mikään muu tällä hetkellä saatavilla oleva algoritmi, jolla on samanlainen tai parempi pakkaussuhde
Sanakirjoilla voi olla suuri vaikutus pienten tiedostojen pakkaussuhteeseen, joten Zstandard voi käyttää käyttäjän antamaa pakkaussanakirjaa. Se tarjoaa myös harjoittelutilan, joka pystyy luomaan sanakirjan joukosta näytteitä.
Johtopäätökset
Nämä tiedonpakkausalgoritmit auttavat sinua optimoimaan tiedoston koon. Erityyppiset tiedonpakkausalgoritmit tuottavat erilaisia tuloksia. Jos et kuitenkaan löydä oikeaa algoritmia täältä, voit tutustua tähän oppaaseen ja tarkentaa hakua. Algoritmeista ei ole pulaa, mutta sinun on oltava tarkka, kun etsit oikeaa algoritmia projektiisi.
Toivottavasti tästä artikkelista oli sinulle hyötyä valitessasi parhaan tiedonpakkausalgoritmin tarpeidesi mukaan. Kiitos, että luit tämän artikkelin. Voit myös tutustua artikkeliin Parhaat salaus- ja häivytysalgoritmit.
Stay Tuned