PiRO — Projekt 3 (deep learning)


Projekt 3 – deep learning

Mamy dane zdjęcia lotnicze przedstawiające drogi, lasy, domy, itp.
Celem projektu jest opracowanie klasyfikatora (bazującego na deep learningu) który dla każdego punktu obrazka wejściowego powie czy należy on do drogi czy nie.
Obrazy wejściowe to kolorowe zdjęcia lotnicze/satelitarne.

Należy:

  1. Nauczyć klasyfikator.
  2. Napisać funkcję w pythonie3 (wszystkie programy będą uruchamiane tylko i wyłącznie w pythonie w wersji 3):
    def roads(image)
    Funkcja analizuje kolorowy obraz wejściowy (3d tablica numpy o wymiarach [height,width,3] ) i zwraca 2d tablicę o wymiarach [height,width]. Wartość różna od zera oznacza, że dany punkt jest sklasyfikowany jako droga.

    Tablica wejściowa ma typ np.uint8 (wartości 0-255), a kolejność kanałów to BGR (a nie RGB!!). Obrazek wejściowy będzie wczytany przy pomocy OpenCV: image = cv2.imread(path).
    Jeśli podczas testowania swojego rozwiązania będzie używana inna funkcja do wczytania obrazu proszę się upewnić, że wartości (i typ danych) jest z odpowiedniego zakresu (0-255), oraz z odpowiednią kolejnością kanałów (najprawdopodobniej będzie konieczna konwersja RGB -> BGR).

Funkcja roads nie musi ograniczać się tylko i wyłącznie do odpytania sieci neuronowej o klasę każdego punktu, ale może m.in.:

  • dokonywać jakiegoś preprocessingu (normalizacja, konwersja do innej przestrzeni barw, itp. — wykorzystanie wiedzy dziedzinowej),
  • sposób użycia sieci może być różny (np. sieć odpytywana o klasę tylko środkowego piksela jakiegoś niewielkiego okna; sieć dla danego okna może zwracać klasę więcej niż jednego piksela, itp.)
  • na etapie postprocessingu może przetwarzać wyniki zwrócone przez sieć (agregować wyniki cząstkowe, wygładzać, itp.)

Liczyć będzie się jakość rozwiązania oraz opis.

Jeśli ktoś będzie szukał inspiracji w artykułach/internecie to proponuje szukać haseł typu: Semantic Segmentation + Deep Learning.
Uwaga! W projekcie nie chodzi o “bezmyślne” wykorzystanie jednej ze znanych architektur (w szczególności jej implementacji) i jedynie nauczenie sieci na odpowiednich danych.

Zbiory danych

Zdjęcia uczące:
https://www.cs.toronto.edu/~vmnih/data/mass_roads/train/sat/index.html
Etykiety:
https://www.cs.toronto.edu/~vmnih/data/mass_roads/train/map/index.html

Do nauki proszę wykorzystywać tylko obrazki ze zbioru uczącego i walidującego.
Proszę nie wykorzystywać obrazków ze zbioru testującego.

Wszystkie zbiory są dostępne ze strony: https://www.cs.toronto.edu/~vmnih/data/

Zaliczenie projektu

Projekt powinien być wykonany w zespole maksymalnie dwuosobowym.

Należy przysłać mailem 2 (dwa) pliki .zip:

  1. nazwisko1_nrindeksu1_nazwisko2_nrindeksu2.zip – zawierający gotowy klasyfikator
  2. nazwisko1_nrindeksu1_nazwisko2_nrindeksu2_train.zip – zawierający pliki z kodem służącym do stworzenia i uczenia sieci

Projekt oceniany będzie na podstawie:

  1. Otrzymanych wyników
  2. Sprawozdania (opisu wstępnego przetwarzania danych, architektury użytej sieci, sposobu jej uczenia, opisu użytego postprocessingu, prezentacji wyników działania, itd.)
  3. Termin: 17 czerwca

Wymagania dotyczące przysyłanego programu

1. Gotowy klasyfikator

Proszę źródła każdego projektu przysłać w postaci archiwum zip o nazwie nazwisko1_nrindeksu1_nazwisko2_nrindeksu2.zip (bez znaków diakrytycznych) zawierającego następujące, wymagane pliki:

  1. autorzy.txt (dla każdego autora po jednej linijce tekstu zawierającą imię, nazwisko oraz nr indeksu (oddzielonych spacją); kodowanie znaków: UTF-8; można też nie używać znaków diakrytycznych)
  2. roads.py (program zawierający wymaganą funkcję roads)
  3. dodatkowe wymagane pliki (np. zapisana nauczona sieć)

Pliki autorzy.txt oraz roads.py muszą znajdować się bezpośrednio w archiwum zip (a nie w jakimś podkatalogu).

Proszę upewnić się czy przysłany plik spełnia powyższe wymagania.
Programy będą sprawdzane na komputerze w laboratorium 1.6.21 i mogą wykorzystywać biblioteki tam dostępne. Proszę się upewnić, że tam działa zaliczany program.

2. Kod tworzący i uczący klasyfikator

Proszę również podesłać archiwum zip o nazwie nazwisko1_nrindeksu1_nazwisko2_nrindeksu2_train.zip zawierający kod służący do stworzenia i uczenia sieci (proszę nie przysyłać żadnych danych itp.)