6. Kompresja obrazu - sieć jednokierunkowa

Transkrypt

6. Kompresja obrazu - sieć jednokierunkowa
6. Kompresja obrazu - sieć
jednokierunkowa
Dzisiejsze zadnie będzie polegało na wykorzystaniu sieci neuronowej jednokierunkowej wielowarstwowej do kompresji obrazu. Będziemy chcieli nauczyć sieć pewnych
wzorcy, a następnie nauczoną siecią kompresować i dekompresować obrazy. Omawiana kompresja jest typem kompresji stratnej. Będziemy chcieli zauważyć jaki ma
wpyw współczynnik kompresji na szybkość uczenia sieci oraz na jakość odtwarzanych
danych.
Sieć realizująca to zadanie to sieć przedstawiona na rysunku 1. Warstwa wejściowa i wyjściowa sieci składa się z tej samej liczby neuronów (n), która odpowiada
rozmiarowi wektora podlegającego kompresji. Warstwa ukryta składa się z q neuronów (q << n) i będzie wektorem skompresowanych danych wejściowych. Warstwa
wejściowa jest tu wektorem wejściowym. Będziemy uczyć sieć wzorcy w taki sposób,
aby na zadany wektor wejściowy wyjście było tym samym wektorem. Wektor stanów warstwy ukrytej będzie jego kompresją i aby go otrzymać należy wygenerować
wyjście z tej wartwy. Aby odtworzyć wzorzec skompresowany należy podać go jako wejście na warstwę ukrytą, a wygenerowane wyjście z sieci będzie odtworzonym
wektorem.
Rysunek 1: Model sieci wykorzystywanej do kompresji.
Kompresji będą podlegały pliki graficzne. Plik jest kolorowy. Do określenia koloru
będziemy wykorzystywać zapis RGB. Obrazek będziemy rozpatrywać trzykrotnie –
ze względu na nasycenie każdej z barw: czerwonej, zielonej i niebieskiej. Jak zatem
skonstuować zbiór uczący? Będzie to przebiegało w kilku krokach:
1. Należy przerobić plik graficzny na plik tekstowy. Plik tekstowy będzie składał się z tylu linii z ilu pikseli składa się obraz. Każda z linii będzie trójką
określającą barwe piksela.
2. Plik graficzny dzielimy na klastry (ramki) 8 × 8 (patrz rysunek 2).
1
3. Tworzymy trzy macierze. Każda z nich rozmiaru liczba wierszy pikseli×liczba
kolumn pikseli.
4. Każda macierz odpowiada jednej z barw RGB. Wypełniamy macierze odpowiednimi wartościami z pliku tekstowego.
5. Klastry, na które podzieliliśmy plik graficzny są teraz podmacierzami każdej z
macierzy barw.
6. Z podmacierzy tworzymy wektory 64 − elementowe. Wektory te utworzą zbiór
uczący.
Rysunek 2: Podział na klastry.
Mając dany zbiór uczący uczymy sieć. Musimy tylko określić liczbę neuronów warstwy ukrytej. Niech liczba ta wynosi 16. Stosunek ilości informacji przed kompresją
do ilości informacji skompresowanej nazywana jest współczynnikiem kompresji.
Zależy nam na tym by miał jak największą wartość. Należy jednak pamiętać, że
pociąga to za sobą straty odtworzonego obrazu i są one tym większe im większy
współczynnik kompresji. Aby uczyć sieć należy zdefiniować błąd uczenia. Przyjmijmy miarę w postaci MSE – błąd średniokwadratowy, liczony zgodnie z wzorem:
M SE =
p X
k X
k
1 X
(l)
(l)
(x − x̂ij )2 ,
np l=1 i=1 j=1 ij
gdzie
• x, x̂ – odpowiednio wartość składowej ramki (klastru) oryginalnej i odtworzonej,
• k – wymiar ramki (klastru),
• p – liczba ramek (klastrów),
• n – wymiar wektora tworzącego ramkę (klaster) n = k 2 .
W przypadku obrazów wartość błędu obliczana jest dla każdej barwy RGB osobno.
Wartość błędu dla całego obrazu obliczana jest następująco:
M SERGB =
(M SER + M ESG + M SEB )
3
Nauczoną sieć wykorzystujemy do kompresji i dekompresji obrazu.
2
Zadanie
Należy zaimplementować sieć neuronową opisaną powyżej, nauczyć ją na podstawie
obrazu, a następnie sprawdzić jak działa jako narzędzie kompresujące i dekompresujące. Testy wykonywać dla obrazu, którego uczyliśmy oraz innych obrazów. Zbadać
wpływ wielkości warstwy ukrytej na straty kompresji.
Uwagi
1. Testując sieć dajemy jej na wejściu obraz i obraz chcemy otrzymać.
2. Program do konwersji obrazu na plik tekstowy jest załączony do zadania. Program do konwersji w drugą stronę należy napisać samodzielnie.
3. Oprócz odtworzonego obrazu należy podawać na wyjściu informacje o błędzie.
3

Podobne dokumenty