fix paths in raports

This commit is contained in:
Adam Osiowy 2021-04-02 22:47:20 +02:00
parent 84e47b1c96
commit db402d3d71
5 changed files with 39 additions and 39 deletions

View File

@ -13,9 +13,9 @@
- w projekcie wykorzystane zostały drzewa decyzyjne jako metoda uczenia - w projekcie wykorzystane zostały drzewa decyzyjne jako metoda uczenia
- projekt podzielony jest na 4 pliki - projekt podzielony jest na 4 pliki
- plik tworzenie_danych_AO.py jest odpowiedzialny za wydobycie z każdego zdjęcia własności i zapis ich do pliku - plik tworzenie_danych_AO.py jest odpowiedzialny za wydobycie z każdego zdjęcia własności i zapis ich do pliku
![4](resources/screenShots/adamo4.png) ![4](../screenShots/adamo4.png)
- w pliku uczenie_adamO.py znajdują się funkcje odpowiedzialne za uczenie i testowanie modelu - w pliku uczenie_adamO.py znajdują się funkcje odpowiedzialne za uczenie i testowanie modelu
![5](resources/screenShots/adamo5.png) ![5](../screenShots/adamo5.png)
- plik parametry_zdjec.h5 zawiera własności wszystkich zdjęć wykorzystanych w projekcie - plik parametry_zdjec.h5 zawiera własności wszystkich zdjęć wykorzystanych w projekcie
- plik etykiety.h5 zawiera odpowiedni typ każdego ze zdjęć (glass,paper,plastic,metal) - plik etykiety.h5 zawiera odpowiedni typ każdego ze zdjęć (glass,paper,plastic,metal)
@ -31,31 +31,31 @@ histogram = wyznaczHistogram(zdj)
``` ```
- wybrane własności to: - wybrane własności to:
1. Histogram kolorów okreslający rozkład jasności pixeli w każdej komórce na zdjęciu w skali szarości 1. Histogram kolorów okreslający rozkład jasności pixeli w każdej komórce na zdjęciu w skali szarości
![6](resources/screenShots/adamo6.png) ![6](../screenShots/adamo6.png)
zdjęcie jest przekształcane do przestrzeni barw hsv zdjęcie jest przekształcane do przestrzeni barw hsv
po czym wyliczany jest histogram podając do funkcji zdjęcie, kanały (hsv), maskę, podział zdjęcia na 512 przedziałów (8x8x8), zakres każdego kanału po czym wyliczany jest histogram podając do funkcji zdjęcie, kanały (hsv), maskę, podział zdjęcia na 512 przedziałów (8x8x8), zakres każdego kanału
2. Momenty obrazu (Hu Moments) określające kształt obiektu na zdjęciu 2. Momenty obrazu (Hu Moments) określające kształt obiektu na zdjęciu
![8](resources/screenShots/adamo8.png) ![8](../screenShots/adamo8.png)
są średnią ważoną intensywności pikseli obrazu. są średnią ważoną intensywności pikseli obrazu.
Są liczone ze wzoru: Są liczone ze wzoru:
![10](resources/screenShots/adamo10.png) ![10](../screenShots/adamo10.png)
gdzie I(x,y) to intensywność pixela w danym punkcie gdzie I(x,y) to intensywność pixela w danym punkcie
*Momenty surowe* - informują o intensywności pikseli i ich położeniu na obrazie *Momenty surowe* - informują o intensywności pikseli i ich położeniu na obrazie
*Momenty centralne* - otrzymujemy po odjęciu od momentów surowych środka ciężkości danego kształtu *Momenty centralne* - otrzymujemy po odjęciu od momentów surowych środka ciężkości danego kształtu
![11](resources/screenShots/adamo11.png) ![11](../screenShots/adamo11.png)
momenty te są niezmienne w wyliczaniu to znaczy że jeśli kształt jest ten sam to nie ważne jest jego położenie na zdjęciu momenty te są niezmienne w wyliczaniu to znaczy że jeśli kształt jest ten sam to nie ważne jest jego położenie na zdjęciu
*Momenty Hu* - to zbiór 7 liczb obliczonych na podstawie momentów centralnych. *Momenty Hu* - to zbiór 7 liczb obliczonych na podstawie momentów centralnych.
Pierwsze 6 momentów są niezmienne dla translacji, skali i rotacji. Pierwsze 6 momentów są niezmienne dla translacji, skali i rotacji.
Podczas gdy znak siódmej liczby zmienia się wraz z odbiciem kształu (względem osi). Podczas gdy znak siódmej liczby zmienia się wraz z odbiciem kształu (względem osi).
![12](resources/screenShots/adamo12.png) ![12](../screenShots/adamo12.png)
3. Tekstura Haralicka określająca nasycenie ilości pixeli w skali szarości 3. Tekstura Haralicka określająca nasycenie ilości pixeli w skali szarości
![7](resources/screenShots/adamo7.png) ![7](../screenShots/adamo7.png)
"Haralick zasugerował zastosowanie macierzy współwystępowania poziomu szarości (GLCM). "Haralick zasugerował zastosowanie macierzy współwystępowania poziomu szarości (GLCM).
Ta metoda opiera się na połączonych rozkładach prawdopodobieństwa par pikseli. Ta metoda opiera się na połączonych rozkładach prawdopodobieństwa par pikseli.
GLCM pokazuje, jak często każdy poziom szarości występuje w pikselach umieszczonych w ustalonym położeniu GLCM pokazuje, jak często każdy poziom szarości występuje w pikselach umieszczonych w ustalonym położeniu
geometrycznym względem siebie, w zależności od poziomu szarości." geometrycznym względem siebie, w zależności od poziomu szarości."
![13](resources/screenShots/adamo13.png) ![13](../screenShots/adamo13.png)
- własności sa zapisywane jako macierze, ustawiane w szereg jako wiersz i zapisywane do pliku z danymi .h5 - własności sa zapisywane jako macierze, ustawiane w szereg jako wiersz i zapisywane do pliku z danymi .h5
``` ```
@ -78,7 +78,7 @@ estymator domyślnie korzysta ze strategii opierającej się o indeks Giniego
'indeks Giniego jest to miara która określa jak często losowo wybrany element zostanie błędnie zidentyfikowany' 'indeks Giniego jest to miara która określa jak często losowo wybrany element zostanie błędnie zidentyfikowany'
``` ```
indeks jest obliczany ze wzoru: indeks jest obliczany ze wzoru:
![9](resources/screenShots/adamo9.png) ![9](../screenShots/adamo9.png)
[przykład](https://www.geeksforgeeks.org/decision-tree-introduction-example/) [przykład](https://www.geeksforgeeks.org/decision-tree-introduction-example/)
- estymator rozpoczyna uczenie korzystając ze zbiorów treningowych - estymator rozpoczyna uczenie korzystając ze zbiorów treningowych
``` ```
@ -103,11 +103,11 @@ rfc = adamO.rozpocznijUczenie()
``` ```
rodzaj = adamO.przewidz(smiec, rfc) rodzaj = adamO.przewidz(smiec, rfc)
``` ```
![3](resources/screenShots/adamo3.png) ![3](../screenShots/adamo3.png)
- Zdjęcia posegregowanych śmieci umieszczane są w odpowiednich folderach: - Zdjęcia posegregowanych śmieci umieszczane są w odpowiednich folderach:
![1](resources/screenShots/adamo1.png) ![1](../screenShots/adamo1.png)
- Na koniec wyświetlane są losowo wybrane zdjęcia śmieci z kontenerów wraz z informacją o typie ustalonym przez estymator - Na koniec wyświetlane są losowo wybrane zdjęcia śmieci z kontenerów wraz z informacją o typie ustalonym przez estymator
![2](resources/screenShots/adamo2.png) ![2](../screenShots/adamo2.png)
1. górny napis to typ zwrócony przez estymator 1. górny napis to typ zwrócony przez estymator
2. drugi napis to wartości prawpopodobieństwa z jakim estymator ocenił typ 2. drugi napis to wartości prawpopodobieństwa z jakim estymator ocenił typ
3. trzeci napis to nazwa zdjęcia 3. trzeci napis to nazwa zdjęcia

View File

@ -8,13 +8,13 @@
## 1. Ogólne działanie: ## 1. Ogólne działanie:
![gif](resources/screenShots/gifProjektu.gif) ![gif](../screenShots/gifProjektu.gif)
--- ---
## 2. Struktura katalogów: ## 2. Struktura katalogów:
![katalogi](resources/screenShots/strukturaKatalogu.png) ![katalogi](../screenShots/strukturaKatalogu.png)
**Resources**: **Resources**:
@ -24,18 +24,18 @@
**Pliki**: **Pliki**:
**[game.py](game.py)** - plik zawierający całą funkcjonalność projektu: **[game.py](../../src/game.py)** - plik zawierający całą funkcjonalność projektu:
- główna pętla programu, - główna pętla programu,
- tworzenie planszy, - tworzenie planszy,
- tworzenie i usytuowanie obiektów z katalogu [modeli](modele.py), - tworzenie i usytuowanie obiektów z katalogu [modeli](../../src/modele.py),
- generowanie tekstowej interpretacji zebranej wiedzy - generowanie tekstowej interpretacji zebranej wiedzy
**[main.py](main.py)** - klasa odpowiedzialna za uruchomienie programu **[main.py](../../src/main.py)** - klasa odpowiedzialna za uruchomienie programu
**[modele.py](modele.py)** - zawiera klasy aplikacji **[modele.py](../../src/modele.py)** - zawiera klasy aplikacji
**[requirements.txt](requirements.txt)** - posiada biblioteki niezbędne do uruchomienia programu, które instalujemy za pomocą poniższego polecenia: **[requirements.txt](../../requirements.txt)** - posiada biblioteki niezbędne do uruchomienia programu, które instalujemy za pomocą poniższego polecenia:
``` ```
pip install -r requirements.txt pip install -r requirements.txt
@ -46,23 +46,23 @@ pip install -r requirements.txt
## 3. Opis funkcjonalności programu: ## 3. Opis funkcjonalności programu:
* śmieciarka porusza się w losowy sposób po planszy 15 x 15 (koloruje na niebiesko przebytą trasę) * śmieciarka porusza się w losowy sposób po planszy 15 x 15 (koloruje na niebiesko przebytą trasę)
![ruch śmieciarki](resources/screenShots/randMove.png) ![ruch śmieciarki](../screenShots/randMove.png)
* domy generowane są losowo na mapie z pominięciem kolizji z innymi obiektami * domy generowane są losowo na mapie z pominięciem kolizji z innymi obiektami
![generowanie_domów](resources/screenShots/wspolrzedneDomow.png) ![generowanie_domów](../screenShots/wspolrzedneDomow.png)
* pozycja wysypiska, przeszkody (jeziorko) i kontenerów jest statyczna * pozycja wysypiska, przeszkody (jeziorko) i kontenerów jest statyczna
![statyczna_pozycja](resources/screenShots/statycznaPozycja.png) ![statyczna_pozycja](../screenShots/statycznaPozycja.png)
* w kontenerach przechowywane będą posegregowane, odpowiednio według kategorii, zdjęcia śmieci * w kontenerach przechowywane będą posegregowane, odpowiednio według kategorii, zdjęcia śmieci
* zdjęcia śmieci będą przydzielane w sposób losowy do każdego z domów na planszy * zdjęcia śmieci będą przydzielane w sposób losowy do każdego z domów na planszy
![losowanie_śmieci](resources/screenShots/wyborSmieci.png) ![losowanie_śmieci](../screenShots/wyborSmieci.png)
* śmieciarka zbiera śmieci po najechaniu na pozycję danego domu * śmieciarka zbiera śmieci po najechaniu na pozycję danego domu
* po każdym uruchomieniu programu tworzona jest struktura katalogów dla posegregowanych śmieci * po każdym uruchomieniu programu tworzona jest struktura katalogów dla posegregowanych śmieci
![tworzenie_struktury](resources/screenShots/tworzenieStrukturyKatalogow.png) ![tworzenie_struktury](../screenShots/tworzenieStrukturyKatalogow.png)
* śmieciarka sprawdza w każdym ruchu czy nie dojdzie do kolizji z innym obiektem lub nie wyjedzie poza planszę * śmieciarka sprawdza w każdym ruchu czy nie dojdzie do kolizji z innym obiektem lub nie wyjedzie poza planszę
![sprawdzanie_kolizcji](resources/screenShots/sprawdzanieKolizji.png) ![sprawdzanie_kolizcji](../screenShots/sprawdzanieKolizji.png)
* po prawej stronie wypisywane są aktualne, najważniejsze informacje * po prawej stronie wypisywane są aktualne, najważniejsze informacje
![wiedza](resources/screenShots/wiedzaPoPrawejStronie.png) ![wiedza](../screenShots/wiedzaPoPrawejStronie.png)
* każdy obiekt na planszy posiada atrybuty odpowiedzalne za * każdy obiekt na planszy posiada atrybuty odpowiedzalne za
przechowywanie wiedzy o danym obiekcie np.: obiekt śmieciarka przechowuje informacje o odwiedzonych domach przechowywanie wiedzy o danym obiekcie np.: obiekt śmieciarka przechowuje informacje o odwiedzonych domach
![atrybuty](resources/screenShots/atrybutySmieciarki.png) ![atrybuty](../screenShots/atrybutySmieciarki.png)

View File

@ -10,7 +10,7 @@
## 1. Model: ## 1. Model:
![model](resources/screenShots/kacper1.png) ![model](../screenShots/kacper1.png)
- Powyższa funkcja tworzy sekwencyjny model sieci neuronowej - Powyższa funkcja tworzy sekwencyjny model sieci neuronowej
- Składa się on z warstw - Składa się on z warstw
@ -25,7 +25,7 @@
## 2. Uczenie modelu: ## 2. Uczenie modelu:
![uczenie](resources/screenShots/kacper2.png) ![uczenie](../screenShots/kacper2.png)
- Model uczy się na 1599 zdjęciach śmieci podzielonych na 4 kategorie - Model uczy się na 1599 zdjęciach śmieci podzielonych na 4 kategorie
- Wszystkie zdjęcia mają rozmiar 299x299 pikseli - Wszystkie zdjęcia mają rozmiar 299x299 pikseli
@ -36,7 +36,7 @@
## 2. Przewidywanie: ## 2. Przewidywanie:
![przewidywanie](resources/screenShots/kacper3.png) ![przewidywanie](../screenShots/kacper3.png)
- Obrazki są zamieniane na macierze - Obrazki są zamieniane na macierze
- Prediction zawiera rozkład prawdopodobieństwa obrazka na kategorie - Prediction zawiera rozkład prawdopodobieństwa obrazka na kategorie
@ -46,7 +46,7 @@
## 2. Integracja w projekcie: ## 2. Integracja w projekcie:
![integracja](resources/screenShots/kacper4.png) ![integracja](../screenShots/kacper4.png)
- Podczas wizyty śmieciarki w domu wykonywana jest funkcja przewidzenia kategorii na każdym ze śmieci w danym domu - Podczas wizyty śmieciarki w domu wykonywana jest funkcja przewidzenia kategorii na każdym ze śmieci w danym domu
- Zależnie od wyniku przewidywania śmieć jest umieszczany na odpowiedniej liście śmieci w śmieciarce - Zależnie od wyniku przewidywania śmieć jest umieszczany na odpowiedniej liście śmieci w śmieciarce

View File

@ -37,9 +37,9 @@ class Net(nn.Module): # klasa Net dziedziczaca po klasie bazowej nn.Module
- conv1, conv2 warstwy konwolucyjna, rozmiar filtra 5×5, posiadające 3 kanały wejściowe (RGB) i kanały wyjściowe dla następnych warstw - conv1, conv2 warstwy konwolucyjna, rozmiar filtra 5×5, posiadające 3 kanały wejściowe (RGB) i kanały wyjściowe dla następnych warstw
- pool - operacja `max-poolingu` - wyciaganie najwazniejszej informacji z zadanego obszaru obrazu - pool - operacja `max-poolingu` - wyciaganie najwazniejszej informacji z zadanego obszaru obrazu
![model](resources/screenShots/maxpool.png) ![model](../screenShots/maxpool.png)
- fc1, fc2, fc3 - warstwy liniowe - `full connection layers` - w odróznieniu od warstw konwolucyjnych, każdy neuron dostaje input o neuronie z poprzedniej warstwy. W warstwie konwolucyjnej neurony wiedzą tylko o określonych neuronach z poprzedniego layera - fc1, fc2, fc3 - warstwy liniowe - `full connection layers` - w odróznieniu od warstw konwolucyjnych, każdy neuron dostaje input o neuronie z poprzedniej warstwy. W warstwie konwolucyjnej neurony wiedzą tylko o określonych neuronach z poprzedniego layera
![model](resources/screenShots/fc.png) ![model](../screenShots/fc.png)
- metoda `forward` - metoda forward określa cały przepływ(flow) inputu przez warstwy aż do outputu. W pierwszej części tensor danej wejściowej(tensor zdjęcia) przepuszczany jest przez dwie warstwy konwolucyjne i wykonywana jest na nim wcześniej wspomniana operacja `max-poolingu`. W następnej części wypłaszczamy x, wszystkie wymiary przechowujace dane obrazu 16 kanalow o rozmiarach 71×71 rozciągamy jako jeden długi wektor. Na koniec przepuszczamy tensor przez warstwy liniowe i zwracamy output. - metoda `forward` - metoda forward określa cały przepływ(flow) inputu przez warstwy aż do outputu. W pierwszej części tensor danej wejściowej(tensor zdjęcia) przepuszczany jest przez dwie warstwy konwolucyjne i wykonywana jest na nim wcześniej wspomniana operacja `max-poolingu`. W następnej części wypłaszczamy x, wszystkie wymiary przechowujace dane obrazu 16 kanalow o rozmiarach 71×71 rozciągamy jako jeden długi wektor. Na koniec przepuszczamy tensor przez warstwy liniowe i zwracamy output.
## 3. Trening: ## 3. Trening:

View File

@ -8,7 +8,7 @@
## 1. Ogólne działanie: ## 1. Ogólne działanie:
![gif](resources/screenShots/route-planning.gif) ![gif](../screenShots/route-planning.gif)
- Śmieciarka zaczyna ruch z pozycji (10, 10), po czym odwiedza wszystkie domy, - Śmieciarka zaczyna ruch z pozycji (10, 10), po czym odwiedza wszystkie domy,
których współrzędne zostały wylosowane, następnie jedzie na wysypisko do najbliższego kontenera, których współrzędne zostały wylosowane, następnie jedzie na wysypisko do najbliższego kontenera,
@ -20,7 +20,7 @@ po czym wybiera następny najbliższy nieodwiedzony kontener.
## 2. Pętla główna strategii przeszukiwania: ## 2. Pętla główna strategii przeszukiwania:
![petla](resources/screenShots/petlaGlowna.png) ![petla](../screenShots/petlaGlowna.png)
- w pętli głównej wykorzystujemy przeszukiwanie grafu (graphsearch) - w pętli głównej wykorzystujemy przeszukiwanie grafu (graphsearch)
- tworzymy kolejkę priorytetową, po czym dodajemy do niej bieżący węzeł - tworzymy kolejkę priorytetową, po czym dodajemy do niej bieżący węzeł
@ -36,7 +36,7 @@ po czym wybiera następny najbliższy nieodwiedzony kontener.
## 3. Funkcja następnika: ## 3. Funkcja następnika:
![succ](resources/screenShots/funkcjaNastepnika.png) ![succ](../screenShots/funkcjaNastepnika.png)
gdzie sąsiedzi to: gdzie sąsiedzi to:
``` ```
@ -51,7 +51,7 @@ sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
## 4. Przyjęta heurystyka: ## 4. Przyjęta heurystyka:
![heurystyka](resources/screenShots/heurystyka.png) ![heurystyka](../screenShots/heurystyka.png)
- Heurystyka to suma odległości Manhattan - Heurystyka to suma odległości Manhattan
@ -59,7 +59,7 @@ sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
## 5. Koszt wjechania na pole ## 5. Koszt wjechania na pole
![stepcost](resources/screenShots/stepcost.png) ![stepcost](../screenShots/stepcost.png)
- Koszt wjechania na pole, na którym jest dom wynosi 3 - Koszt wjechania na pole, na którym jest dom wynosi 3
- Koszt wjechania na pole, które jest wysypiskiem wynosi 2 - Koszt wjechania na pole, które jest wysypiskiem wynosi 2