Zarządzane algorytmy danych, takie jak sieci neuronowe, podbiły świat. Ich rozwój jest spowodowany kilkoma czynnikami, w tym tanim i wydajnym sprzętem oraz ogromnymi zbiorami danych. Sieci neuronowe obecnie stoją na czołowej pozycji w zakresie zadań "kognitywnych", takich jak rozpoznawanie obrazów, rozumienie języka naturalnego itp. Jednak nie powinny być ograniczone tylko do takich zadań. W niniejszym materiale omówimy sposób kompresji obrazów przy użyciu sieci neuronowych, wykorzystując uczenie resztkowe. Przedstawione podejście działa szybciej i lepiej niż standardowe kodeki. Schematy, równania i oczywiście tabela z testami znajdują się pod tym podsumowaniem.
Ten artykuł opiera się na pracy. Zakłada się, że znasz sieci neuronowe i ich pojęcia splot i funkcja straty.
Czym jest kompresja obrazów i jakie są jej rodzaje?
Kompresja obrazów to proces przekształcania obrazu w taki sposób, aby zajmował mniej miejsca. Przechowywanie obrazów w swojej surowej formie zajmowałoby dużo miejsca, dlatego istnieją kodeki, takie jak JPEG i PNG, które mają na celu zmniejszenie rozmiaru oryginalnego obrazu.
Jak wiadomo, istnieją dwa typy kompresji obrazów: bezstratna i z utratą. Jak sugerują nazwy, w przypadku kompresji bezstratnej można odzyskać dane z oryginalnego obrazu, podczas gdy w przypadku kompresji z utratą niektóre dane są tracone podczas kompresji. Na przykład, JPG to algorytmy z utratą [przyp. tłum. — głównie nie zapominając również o JPEG bezstratnym], a PNG to algorytm bezstratny.

Porównanie kompresji bezstratnej i z utratą
Zwróć uwagę, że na obrazie po prawej stronie widać wiele blokowych artefaktów. To utracona informacja. Sąsiadujące piksele o podobnych kolorach są kompresowane jak jeden obszar w celu oszczędności miejsca, ale przy tym traci się informację o faktycznych pikselach. Oczywiście algorytmy stosowane w kodekach JPEG, PNG itp. są znacznie bardziej skomplikowane, ale to dobry przykładowy intuicyjny przykład kompresji stratnej. Kompresja bezstratna jest dobra, ale pliki skompresowane bezstratnie zajmują dużo miejsca na dysku. Istnieją bardziej efektywne sposoby kompresji obrazów bez utraty dużej ilości informacji, ale są one dość wolne, a wiele z nich wykorzystuje podejścia iteracyjne. Oznacza to, że nie mogą być uruchamiane równolegle na wielu rdzeniach procesora centralnego lub graficznego. To ograniczenie czyni je całkowicie niepraktycznymi w codziennym użytkowaniu.
Wprowadzenie do konwolucyjnej sieci neuronowej
Jeśli coś trzeba obliczyć i obliczenia mogą być przybliżone, dodaj . Autorzy zastosowali dość standardową konwolucyjną sieć neuronową, aby polepszyć kompresję obrazów. Przedstawiona metoda nie tylko działają na równi z najlepszymi rozwiązaniami (o ile nie lepiej), ale także może wykorzystywać obliczenia równoległe, co prowadzi do znacznego zwiększenia szybkości. Powód jest taki, że konwolucyjne sieci neuronowe (CNN) są bardzo dobre w wydobywaniu informacji przestrzennej z obrazów, które następnie są reprezentowane w bardziej kompaktowej formie (np. przechowywane są tylko „ważne” bity obrazu). Autorzy chcieli wykorzystać tę zdolność CNN, aby lepiej reprezentować obrazy.
Architektura
Autorzy zaproponowali podwójną sieć. Pierwsza sieć przyjmuje jako wejście obraz i generuje kompaktowe przedstawienie (ComCNN). Dane wyjściowe tej sieci są następnie przetwarzane przez standardowy kodek (np. JPEG). Po przetworzeniu przez kodek obraz jest przesyłany do drugiej sieci, która "naprawia" obraz z kodeka w próbie przywrócenia oryginalnego obrazu. Autorzy nazwali tę sieć rekonstrukcyjną CNN (RecCNN). Podobnie jak w przypadku GAN obie sieci są uczone iteracyjnie.

ComCNN Kompaktowe przedstawienie jest przesyłane do standardowego kodeka

RecCNN. Dane wyjściowe ComCNN są skalowane i przesyłane do RecCNN, która spróbuje zgłębić resztę
Wyjścia z kodeka skalują się w górę, a następnie są przesyłane do RecCNN. RecCNN będzie próbować wygenerować obraz, który jest jak najbardziej podobny do oryginału.

Framework do kompresji obrazów end-to-end. Co(.) to algorytm kompresji obrazów. Autorzy zastosowali JPEG, JPEG2000 i BPG.
Co to jest reszty?
Reszta może być postrzegana jako krok postprocessingu mający na celu „ulepszenie” dekodowanego obrazu przez kodek. Posiadając wiele „informacji” o świecie, sieć neuronowa może podejmować decyzje poznawcze dotyczące tego, co poprawić. Ta idea opiera się na , szczegóły można przeczytać .
Funkcje strat
Używane są dwie funkcje strat, ponieważ mamy dwie sieci neuronowe. Pierwsza z nich, ComCNN, oznaczona jest jako L1 i definiuje się następująco:

Funkcja strat dla ComCNN
Wyjaśnienie
To równanie może wydawać się skomplikowane, ale w rzeczywistości jest to standardowy (błąd średniokwadratowy) MSE. ||² oznacza normę wektora, który interpretują.

Równanie 1.1
Cr oznacza wyjścia ComCNN. θ oznacza parametry uczące się ComCNN, XK to wejściowy obraz.

Równanie 1.2
Re() oznacza RecCNN. To równanie po prostu przekazuje wartość równania 1.1 do RecCNN. θ oznacza parametry uczące się RecCNN (daszek oznacza, że parametry są stałe).
Intuicyjna definicja
Równanie 1.0 sprawi, że ComCNN zmieni swoje wagi tak, aby po rekonstrukcji przy użyciu RecCNN finalny obraz był jak najbardziej podobny do obrazu wejściowego. Druga funkcja strat RecCNN definiuje się następująco:

Równanie 2.0
Wyjaśnienie
Znowu funkcja może wydawać się skomplikowana, ale w większości jest to standardowa funkcja strat w sieciach neuronowych (MSE).

Równanie 2.1
Co() oznacza wyjście kodeka, x z daszkiem oznacza wyjście ComCNN. θ2 to parametry uczące się RecCNN, res() to po prostu resztkowe wyjście RecCNN. Należy zauważyć, że RecCNN jest uczony na różnicy między Co() a obrazem wejściowym, a nie na obrazie wejściowym.
Intuicyjna definicja
Równanie 2.0 sprawi, że RecCNN zmieni swoje wagi tak, aby wyjścia były jak najbardziej podobne do obrazu wejściowego.
Schemat uczenia
Modele są szkolone iteracyjnie, podobnie jak Wagi pierwszego modelu są ustalane, podczas gdy wagi drugiego modelu są aktualizowane, następnie wagi drugiego modelu są ustalane, podczas gdy pierwszy model jest trenowany.
Testy
Autorzy porównali swoją metodę z istniejącymi metodami, w tym prostymi kodekami. Ich metoda działa lepiej od innych, zachowując jednocześnie wysoką prędkość na odpowiednim sprzęcie. Ponadto autorzy starali się wykorzystać tylko jedną z dwóch sieci i zauważyli spadek wydajności.

Porównanie indeksu strukturalnej podobieństwa (SSIM). Wysokie wartości wskazują na lepsze podobieństwo z oryginałem. Wynik autorów wyróżniono na pogrubiono.
Podsumowanie
Rozważaliśmy nowy sposób zastosowania głębokiego uczenia do kompresji obrazów, omówiliśmy możliwość wykorzystania sieci neuronowych do zadań poza »ogólnymi«, takich jak klasyfikacja obrazów i przetwarzanie języka. Metoda ta nie tylko spełnia współczesne wymagania, ale również pozwala na znacznie szybsze przetwarzanie obrazów.
Nauka o sieciach neuronowych stała się łatwiejsza, ponieważ specjalnie dla użytkowników Habra przygotowaliśmy kod promocyjny. HABR, który daje dodatkowy rabat 10% do rabatu wskazanego na banerze.
Inne kursy
Rekomendowane artykuły
Źródło: habr.com
