summary refs log tree commit diff
path: root/Chapters/chapter3.tex
blob: 86adc23a0f0c90304fc10385ee2a5e89e21dac7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
\chapter{Wyniki sieci}
Wytrenowana sieć potrafi przejechać zarówno cały tor na symulatorze, jak i
podziemny garaż instytutu. Na dodatek sieć trenowana pod symulator uczyła się
 jeździć tylko przeciwnie do ruchu wskazówek zegara. Po ustawieniu modelu w przeciwnym
kierunku, sieć potrafi bezproblemowo przejechać cały tor.

\section{Na co zwraca uwagę}
Aktywność sieci dla obrazków została wygenerowana za pomocą metody
Integrated Gradients\cite{ig}.

Co było oczywiste w przypadku symulatora, sieć zwraca głównie uwagę na miejsca,
gdzie pojawiają się granice drogi \ref{sim_act}. Co ciekawe, reaguje też na ścianę
tworzącą horyzont, ponieważ zmienia wygląd w zależności od odległości i może
pomóc w orientacji (na trasie treningowej).
\begin{figure}
  \centering
  \fbox{
  \scalebox{0.5}{\includegraphics{img/sim_img.png}}
  }
  \caption{Obraz z symulatora}
  \label{sim_img}
\end{figure}
\begin{figure}
  \centering
  \fbox{
  \scalebox{0.5}{\includegraphics{img/sim_img_act.png}}
  }
  \caption{Na co sieć patrzy, symulator}
  \label{sim_act}
\end{figure}
\begin{figure}
  \centering
  \fbox{
  \scalebox{0.5}{\includegraphics{img/real_img.png}}
  }
  \caption{Obraz z nagrania}
  \label{real_img}
\end{figure}
\begin{figure}
  \centering
  \fbox{
    \scalebox{0.5}{\includegraphics{img/real_img_act.png}}
  }
  \caption{Na co sieć patrzy, nagranie}
  \label{real_act}
\end{figure}

Z kolei dla łazika intensywność w najbardziej aktywnym miejscu jest dużo mniejsza \ref{real_act}.
Oznacza to, że nie sugeruje się tylko jednym obszarem z kamery. Najbardziej jednak 
zwraca uwagę na kratkę na podłodze, która mogłaby wystarczyć do nawigacji.

\section{W porównaniu do nagrania}
Na wykresie \ref{plot_ang} widać, że sieć (pomarańczowy kolor) mniej gwałtownie 
zmienia szybkość obrotu niż kierowca (kolor niebieski). Jednak sieć reaguje w podobnych momentach co kierowca na konieczność wykonania skrętu.

\begin{figure}
  \centering
  \fbox{
    \scalebox{0.5}{\includegraphics{img/real_data_ang.png}}
  }
  \caption{Prędkość obrotowa: sieć vs kierowca}
  \label{plot_ang}
\end{figure}

\section{Wpływ architektury}
W przypadku sieci pod symulator, usunięcie niektórych warstw konwolucyjnych
pozwalało modelowi nadal utrzymywać się na torze, natomiast taka sama zredukowana architektura 
nie radziła sobie dobrze w przypadku nagrań z prawdziwego łazika. Z kolei
usunięcie nieliniowości z warstw konwolucyjnych ograniczyło zdolności sieci do takiego stopnia,
że nie potrafiła się utrzymać na wirtualnym torze.

Usunięcie dropoutu bardzo szybko powodowało overfitting i sieć radziła sobie
dobrze tylko na danych uczących. Z kolei dodanie warstw liniowych na końcu nie 
poprawiało, ani nie pogorszało zbytnio wydajności sieci, przynajmniej dla
nagrań z symulatora. Na tej podstawie można wywnioskować, że większość interesujących 
cech obrazu została już znaleziona w ramach warstw konwolucyjnych, więc dla tak prostych danych zwiększenie modelu jest nieefektywne.

Co ciekawe, w przypadku wytrenowanego już modelu do symulatora zredukowanie 
rozdzielczości obrazów dziesięciokrotnie w każdym wymiarze (z rozdzielczości 
320x160 do 32x16),
i zwykłe przeskalowanie w górę przed zewaluowaniem wystarczy, żeby utrzymać się 
na torze.

Ponadto, sieć uczona na obrazie kolorowym działa bezproblemowo, gdy
zredukuje się obraz do skali szarości. Jedyne, co należy wykonać to stworzyć obraz kolorowy, w którym każdy z kanałów RGB będzie powtórzonym obrazem wejściowym.