- 1
Algorytmy Kompresji Danych można zdefiniować jako proces zmniejszania rozmiarów plików przy zachowaniu tych samych lub podobnych do pewnego stopnia danych. Odbywa się to poprzez wykonanie eliminacji zbędnych danych lub ponowne wykonanie danych dla większej wydajności.
W czasie kompresji, masz możliwość wyboru z stratnych lub bezstratnych metod. Jeśli mówimy o stratnej metody to trwale usuwa dane. Z drugiej strony, bezstratne dbać o swoje oryginalne dane. Typ, który wybierzesz, zależy od tego, jakiej jakości plików potrzebujesz.
W tym artykule znajdziesz mieszankę algorytmów bezstratnej kompresji danych i algorytmów kompresji obrazu i wideo opartych na głębokim uczeniu się.
Algorytmy bezstratnej kompresji danych są zwykle istotami używanymi do wykonywania funkcji archiwum lub innych funkcji wysokiej jakości. Te algorytmy kompresji danych pozwalają na wykonanie redukcji rozmiaru pliku. Zapewnia również, że pliki mogą być przywrócone w pełni, jeśli muszą być przywrócone.
Table of Contents
- LZ77
- LZR
- LZSS
- Deflate
- LZMA
- LZMA2
- Multi-Layer Perceptron (MLP)- Based Compression
- Dee Coder- Deep Neural Network Based Video Compression
- Convolutional Neural Network (CNN) – Based kompresji
- Generative Adversarial Network (GAN)- Based Compression
- Predykcja przez częściowe dopasowanie (PPM)
- Kodowanie długości przebiegu (RLE)
- bzip2
- Kodowanie Huffmana
- ZStandard
- Wnioski
LZ77
LZ77 został ogłoszony w 1977 roku i określany jako podstawa wielu innych algorytmów kompresji bezstratnej. Normalnie używa on metody „Przesuwającego się okna”. W tej metodologii, to zajmuje się słownika, który wykorzystuje triples do reprezentowania:
- Offset- To może być określane jako rzeczywisty początek frazy i początek pliku.
- Run-length-It jest zdefiniowany jako ilość znaków, które pomagają w dokonywaniu phrase.
- Deviating znaków-Te są marketerzy, które wskazują na nową frazę.
To zawiera wskazanie, że fraza używana jest całkowicie równa oryginalnej frazy, a także określa, czy istnieje jakakolwiek inna character.
Jak będziesz parsować plik, słownik jest aktualizowany dynamicznie dla odzwierciedlenia zawartości skompresowanych danych i size also.
LZR
LZR został opracowany i ogłoszony w roku 1981. Michael Rodeh ogłosił go, i zmodyfikował go później. Może być używany jako podstawowa alternatywa dla algorytmu kompresji danych LZ77, ale masz również możliwość użycia go dla dowolnego offsetu w pliku. Jeśli nie używasz go liniowo, to wymaga on znacznej ilości pamięci. Ten warunek sprawia, że LZ77 jest lepszą opcją do użycia. Ten algorytm kompresji danych jest prosty w implementacji i ma potencjał bardzo wysokiej wydajności, gdy jest zaimplementowany na sprzęcie.
Jest to algorytm, który jest szeroko stosowany Unix algorytm kompresji danych narzędzie kompresji i jest używany w formacie obrazu GIF. Stał się on pierwszym algorytmem kompresji danych, który był szeroko stosowany na komputerach. Duży angielski plik tekstowy może być zazwyczaj skompresowany z LZW do około połowy jego oryginalnego rozmiaru.
LZSS
LZSS oznacza Lempel Ziv Storer Szymanski i został opracowany i ogłoszony w roku 1982. Jest to algorytm kompresji danych, który poprawia LZ77. Ten proces kompresji jest wykonywany przez włączenie metody, która będzie pilnować, czy substytucja zmniejsza rozmiar pliku. Jeśli nie zmniejszy, to dane wejściowe zostaną pozostawione w oryginalnej formie. Nie preferuje również używania znaków odbiegających, a jedynie preferuje używanie par długości offsetów.
Algorytm ten jest głównie używany do archiwizacji plików w różnych formatach, takich jak RAR lub ZIP, lub do kompresji danych sieciowych.
Można go określić jako technikę kodowania słownikowego. LZSS próbuje zastąpić ciąg symboli odniesieniem do słownikowej lokalizacji tego samego ciągu. Kluczowa różnica między LZ77 a LZSS polega na tym, że w LZ77 odwołanie do słownika może być dłuższe niż ciąg, który zastępuje. W LZSS takie odniesienia są pomijane, jeśli długość jest mniejsza niż punkt „break-even”.
Deflate
Deflate to format pliku z algorytmem bezstratnej kompresji danych, który wykorzystuje połączenie LZSS i kodowania Huffmana. Został on zaprojektowany przez Phila Katza w roku 1993. Kodowanie Huffmana jest również algorytmem, który został opracowany w roku 1952. Można go zdefiniować jako algorytm kodowania entropii, który pomaga w przypisaniu kodu na podstawie częstotliwości występowania znaków.
Katz zaprojektował również oryginalny algorytm, który jest używany do konstruowania strumieni Deflate. Jak stwierdzono w dokumencie RFC, algorytm produkujący pliki Deflate był powszechnie uważany za możliwy do zaimplementowania w sposób, który nie był objęty patentami. Doprowadziło to do jego powszechnego stosowania, obok formatu plików ZIP, który był głównym celem zaprojektowania go przez Katza. Patent nie jest już dostępny.
LZMA
LZMA to skrót od Lempel Ziv Markov chain algorithm i został zaprojektowany i wydany w roku 1998. Można również powiedzieć, że jest to modyfikacja LZ77. Ta modyfikacja została wykonana dla archiwizatora -Zip z formatem .7z. Używana jest metoda kompresji łańcuchowej, która implementuje zmodyfikowany LZ77 na poziomie bitów, a nie bajtów. Pojawiające się dane wyjściowe będą dalej przetwarzane przy użyciu kodowania arytmetycznego w celu wykonania większej kompresji.
Wydajność innych kroków kompresji zależy od dokładnej implementacji. Ten algorytm kompresji danych wykorzystuje schemat kompresji słownikowej nieco bardzo podobny do algorytmu LZ77, który został opublikowany przez Abrahama Lempela i Jacoba Ziva w roku 1977. Charakteryzuje się on również wysokim stopniem kompresji i zmiennym rozmiarem słownika kompresji. Jednocześnie zachowuje szybkość dekompresji bardzo zbliżoną do innych powszechnie stosowanych algorytmów kompresji.
LZMA2
LZMA2 został zaprojektowany i wydany w roku 2009. Można go również zdefiniować jako modyfikację LZMA. Sprawia, że LZMA jest lepsza poprzez poprawę jej wydajności z większymi możliwościami wielowątkowości. LZMA2 zapewnia również ulepszoną obsługę danych nieściśliwych. Jest to prosty format kontenera, który może zawierać zarówno nieskompresowane dane, jak i dane LZMA, i to z wieloma różnymi parametrami kodowania LZMA.
LZMA2 obsługuje arbitralnie skalowalną wielowątkową kompresję i dekompresję oraz wydajną kompresję danych, które są częściowo nieściśliwe. Jednak może mieć pewne problemy z bezpieczeństwem i może być niebezpieczny i mniej wydajny niż LZMA. W prostych słowach, to może być przydatne dla Ciebie, ale tak nie jest to, że bezpieczne w porównaniu do LZMA.
Multi-Layer Perceptron (MLP)- Based Compression
MLP może być zdefiniowany jako technologia, która wykorzystuje wiele warstw neuronów do wejścia, przetwarzania i dając dane wyjściowe. Może być zaimplementowana do zadań redukcji wymiaru, a także kompresji danych. Algorytm oparty na MLP został po raz pierwszy opracowany w roku 1988 i dołącza do już istniejących procesów:
- Kodowanie binarne- standardowe kodowanie dwusymbolowe.
- Kwantyzacja- problemy z danymi wejściowymi ze zbioru ciągłego do zbioru dyskretnego.
- Transformacja domeny przestrzennej – zmiany danych piksel po pikselu.
Do wyznaczenia optymalnego kodu binarnego algorytm MLP wykorzystuje wyjścia z powyższych procesów do dekompozycyjnej sieci neuronowej.
Dalej, ten algorytm został zmodyfikowany z intuicyjnych technik, które pozwoliły dokładne przybliżenie danych całkowicie w oparciu o sąsiednie dane poprzez backpropagation. To może być bardzo przydatne dla Ciebie w obrazie i kompresji danych wideo.
Dee Coder- Deep Neural Network Based Video Compression
Deep Coder jest zdefiniowany jako Convolutional Neural Network (CNN) oparte ramy. To sprawia, że reprezentacja alternatywy do tych technik kompresji wideo, które zostały przy użyciu tak długo. Dla sygnałów predykcyjnych i resztkowych różne Convolutional Neural Networks (CNNs) są przynieść używane przez ten model.
Wykonuje on kodowanie map cech do strumienia binarnego z wykorzystaniem kwantyzacji skalarnej i bardzo starego i tradycyjnego algorytmu kompresji plików zwanego kodowaniem Huffmana. Twierdzi się, że model ten jest w stanie zapewnić doskonałą wydajność w porównaniu do znanego standardu kodowania wideo H.264/AVC.
Convolutional Neural Network (CNN) – Based kompresji
CNN’s są zdefiniowane jako sieci neuronowe z różnych warstw. Jest to głównie używane do rozpoznawania obrazów i wykrywania funkcji. W momencie zastosowania do kompresji, sieci te wykorzystują konwolucję do obliczania połączeń między sąsiednimi pikselami. Jeśli porównamy to z algorytmami opartymi na MLP, CNNs pokazuje lepsze wyniki kompresji niż one.
To również zapewnia lepszą wydajność super-rozdzielczości i redukcji artefaktów. Oprócz tego, algorytmy kompresji danych oparte na CNN dokonują poprawy jakości obrazów JPEG. Odbywa się to poprzez zmniejszenie szczytowego stosunku sygnału do szumu i podobieństwa strukturalnego.
Kompresja oparta na CNN może również zbliżyć się do wydajności standardu High-Efficiency Video Coding. Odbywa się to przy użyciu estymacji entropii. To może być również bardzo przydatne dla Ciebie w wykonywaniu kompresji files.
Generative Adversarial Network (GAN)- Based Compression
GANs mogą być zdefiniowane jako alternatywa sieci neuronowych, które wykorzystują dwie sieci, które konkurują. Odbywa się to w celu produkcji bardziej dokładnych analiz i przewidywań. W roku 2017 algorytmy oparte na GAN zostały po raz pierwszy opracowane. Te algorytmy kompresji danych może skompresować pliki więcej niż dwa i pół razy mniejsze w porównaniu do tradycyjnych powszechnie stosowanych metod, takich jak JPEG lub WebP.
GAN oparte algorytmy mogą być używane do kompresji w czasie rzeczywistym z równoległego przetwarzania są używane razem. Algorytm ten działa w ten sposób, że kompresuje obrazy całkowicie w oparciu o najbardziej pasujące cechy.
Gdy dekodowanie jest wykonywane, na podstawie przewidywań, które zostały wykonane przez te cechy obrazy są rekonstruowane. Jeśli porównamy to z kompresją opartą na CNN, kompresja oparta na GAN będzie produkować bardzo wysokiej jakości obrazy dla Ciebie poprzez eliminację przeciwnych strat.
Predykcja przez częściowe dopasowanie (PPM)
PPM jest adaptacyjną techniką statystycznej kompresji danych opartą na modelowaniu kontekstu i predykcji. Modele te wykorzystują zestaw poprzednich symboli w nieskompresowanym strumieniu symboli, aby przewidzieć następny symbol w strumieniu. Algorytmy PPM mogą być również używane do grupowania danych w przewidywane grupy w analizie skupień.
Liczba poprzednich symboli, n, określa kolejność modelu PPM, który jest oznaczany jako PPM(n).
Nieograniczone warianty, w których kontekst nie ma ograniczeń długości, również istnieją i są oznaczane jako PPM. Jeśli nie można dokonać predykcji w oparciu o wszystkie n symboli kontekstu, podejmowana jest próba predykcji z n – 1 symbolem. Proces ten jest powtarzany aż do znalezienia dopasowania lub do momentu, gdy nie pozostanie więcej symboli w kontekście. W tym momencie wykonywana jest stała predykcja.
Inplementacje kompresji PPM różnią się znacznie w innych szczegółach. Rzeczywisty wybór symboli jest zwykle zapisywany przy użyciu kodowania arytmetycznego, chociaż możliwe jest również użycie kodowania Huffmana lub nawet pewnego rodzaju techniki kodowania słownikowego.
Kodowanie długości przebiegu (RLE)
RLW jest formą bezstratnej kompresji danych, w której przebiegi danych (sekwencje, w których ta sama wartość danych występuje w wielu kolejnych elementach danych) są przechowywane jako pojedyncza wartość danych i liczba, a nie jako oryginalny przebieg. Jest to najbardziej przydatne na danych, które zawierają wiele takich przebiegów.
Na przykład proste obrazy graficzne, takie jak ikony, rysunki liniowe, Gra w życie Conwaya i animacje. Nie jest to przydatne w przypadku plików, które nie mają wielu przebiegów, ponieważ może to znacznie zwiększyć rozmiar pliku.
RLE może być również używany w odniesieniu do wczesnego formatu plików graficznych obsługiwanego przez CompuServe do kompresji obrazów czarno-białych, ale został szeroko wyparty przez ich późniejszy Graphics Interchange Format (GIF). RLE odnosi się również do mało używanego formatu obrazu w Windows 3.x, z rozszerzeniem rule, który jest Run Length Encoded Bitmap, używanym do kompresji ekranu startowego Windows 3.x.
bzip2
bzip2 jest darmowym i open-source’owym programem do kompresji danych, który używa algorytmu Burrowsa-Wheelera. Kompresuje on tylko pojedyncze pliki i nie jest archiwizatorem plików. Jest rozwijany przez Juliana Sewarda i utrzymywany przez Federico Menę. Seward udostępnił pierwsze publiczne wydanie bzip2, wersję 0.15, w lipcu 1996 roku. Stabilność i popularność kompresora wzrosła w ciągu następnych kilku lat, a Seward wydał wersję 1.0 pod koniec 2000 r.
Po dziewięcioletniej przerwie w aktualizacjach projektu od 2010 r. 4 czerwca 2019 roku Federico Mena przyjął opiekę nad projektem bzip2. bzip2 kompresuje dane w blokach o wielkości od 100 do 900 kB.
Używa transformaty Burrowsa-Wheelera do konwersji często powtarzających się sekwencji znaków na ciągi identycznych liter. Następnie stosuje transformację move-to-front i kodowanie Huffmana. Przodek bzip2, bzip, używał kodowania arytmetycznego zamiast Huffmana. Zmiana została dokonana z powodu ograniczenia patentowego oprogramowania.
Kodowanie Huffmana
Kodowanie Huffmana jest szczególnym rodzajem optymalnego kodu prefiksowego, który jest powszechnie używany do bezstratnej kompresji danych. Proces znajdowania lub używania takiego kodu przebiega z wykorzystaniem kodowania Huffmana, algorytmu opracowanego przez Davida A. Huffmana, gdy był on studentem Sc.D. w MIT, i opublikowanego w 1952 roku w pracy „A Method for the Construction of Minimum-Redundancy Codes.
Wyjście z algorytmu Huffmana może być postrzegane jako tabela kodów o zmiennej długości do kodowania symbolu źródłowego (takiego jak znak w pliku). Algorytm wyprowadza tę tabelę z szacowanego prawdopodobieństwa lub częstotliwości występowania (waga) dla każdej możliwej wartości symbolu źródłowego.
Tak jak w innych metodach kodowania entropii, bardziej powszechne symbole są generalnie reprezentowane przy użyciu mniejszej liczby bitów niż mniej powszechne symbole. Metoda Huffmana może być efektywnie zaimplementowana. Znajduje kod w czasie liniowym do liczby wag wejściowych, jeśli te wagi są posortowane.
ZStandard
Zstandard (lub zstd) jest algorytmem bezstratnej kompresji danych opracowanym przez Yanna Colleta w firmie Facebook. Zstd jest referencyjną implementacją w języku C. Wersja 1 tej implementacji została wydana jako wolne oprogramowanie 31 sierpnia 2016 r.
Zstandard został zaprojektowany, aby dać stopień kompresji porównywalny z algorytmem DEFLATE (opracowanym w 1991 r. i używanym w oryginalnych programach ZIP i gzip), ale szybszy, zwłaszcza w przypadku dekompresji. Można go regulować poziomami kompresji od minus 5 (najszybszy) do 22 (najwolniejszy pod względem szybkości kompresji, ale o najlepszym stopniu kompresji).
Zstd przy maksymalnym poziomie kompresji daje stopień kompresji zbliżony do LZMA, LZAHM i PPM. Wypada lepiej niż LZA, czy bzip2. Zstandard osiąga obecną granicę Pareto, ponieważ dekompresuje się szybciej niż jakikolwiek inny dostępny obecnie algorytm o podobnym lub lepszym stopniu kompresji
Słowniki mogą mieć duży wpływ na stopień kompresji małych plików, więc Zstandard może używać słownika kompresji dostarczonego przez użytkownika. Oferuje również tryb szkolenia, zdolny do generowania słownika z zestawu próbek.
Wnioski
Te algorytmy kompresji danych pomogą Ci zoptymalizować rozmiar pliku. Różne typy algorytmów kompresji danych zapewnią ci różne wyniki. Jeśli jednak nie możesz znaleźć odpowiedniego algorytmu tutaj, możesz zajrzeć do tego przewodnika i udoskonalić swoje wyszukiwanie. Nie brakuje algorytmów, ale musisz być konkretny, gdy szukasz odpowiedniego algorytmu dla swojego projektu.
Mam nadzieję, że ten artykuł był dla Ciebie przydatny w wyborze najlepszego algorytmu kompresji danych zgodnie z Twoimi potrzebami. Dziękuję za przeczytanie tego artykułu. Możesz również sprawdzić Najlepsze algorytmy szyfrowania i haszowania.
Stay Tuned
.