Informatyka Medyczna

  1. Wstep do biblioteki scikit-learn
    Sciagnij plik a nastepnie uruchom w tym samym katalogu: jupyter notebook
    Wersja HTML cwiczen.

  2. Wstep do biblioteki scikit-image
    Sciagnij plik z cwiczeniami, wypakuj go, a nastepnie uruchom w wypakowanym katalogu: jupyter notebook

  3. k-krotna walidacja
    Sciagnij plik a nastepnie uruchom w tym samym katalogu: jupyter notebook
    Wersja HTML.

Projekt – rozpoznawanie lisci

Celem projektu jest opracowanie metody i napisanie programu rozpoznajacego liscie na obrazkach.
Projekty mozna wykonywac w grupach dwuosobowych.

Przykladowe dane 20 gatunków, kazdy po 40 przykladowych obrazów mozna sciagnac tutaj (dane ok 24MB). Pelna baza dostepna jest pod adresem http://leafsnap.com/dataset/), ale mozna ograniczyc sie do zaproponowanego podzbioru.

Etap I: Ekstrakcja cech z obrazów.

  • Co nalezy zrobic:
    Prosze napisac program w pythonie który dla kazdego obrazka z bazy wyliczy wybrane cechy widocznego na nim liscia oraz zapisze te cechy wraz z nazwa klasy w pliku wyjsciowym. Format pliku dowolny, wazne aby umiec go potem poprawnie wczytac i wykorzystac.

    Do przetwarzania obrazu nalezy wykorzystac biblioteke scikit-image (skimage) lub ewentualnie OpenCV.
    Do zapisania pliku z wyliczonymi cechami mozna (ale nie trzeba!) uzyc funkcji numpy.savetxt lub numpy.savez.

    Program o nazwie [nazwisko1]_[nazwisko2]_extract_features.py powinien przyjmowac dwa argumenty:

    1. sciezke do katalogu z baza obrazków,
    2. nazwe pliku do którego nalezy zapisac nazwe klasy oraz wyliczone cechy dla wszystkich obrazków ze wskazanej bazy.

    Program bedzie uruchomiony nastepujaco:
    python3 Kowalski_Malinowski_extract_features.py sciezka/do/bazy/np./leafsnap-subset1 plik_z_wyliczonymi_cechami

  • Prosze przyslac maila:

    • Tytul: [IM] Etap 1
    • Tresc:
      imie1 nazwisko1 indeks1
      imie2 nazwisko2 indeks2
    • Zalaczniki:

      1. plik z programem: [nazwisko1]_[nazwisko2]_extract_features.py
      2. krótki opis programu w formacie pdf ([nazwisko1]_[nazwisko2]_extract_features.pdf) mówiacy:

        • jak program wykrywa lisc w calym obrazku (jakie sa kolejne kroki przetwarzania obrazu),
        • jakie cechy wylicza i w jaki sposób to robi,
        • uzasadnienie (moze byc intuicyjne) dlaczego takie cechy zostaly wybrane.
  • Termin: do 18 maja

Etap II: Wybór i uczenie klasyfikatorów.

  • Co nalezy zrobic:
    Uzywajac cech wygenerowanych programem z I etapu prosze starac sie nauczyc jak najlepszy klasyfikator rozpoznajacy liscie. W tym celu nalezy przeprowadzic eksperymenty obliczeniowe i zbadac wplyw konkretnych parametrów algorytmów oraz uzycie konkretnych cech/atrybutów na otrzymywane wyniki.

    1. Eksperymenty obliczeniowe
      Celem zadania jest nie tylko proste nauczenie dowolnych klasyfikatorów (proszę nie ograniczać się do przetestowania tylko jednego) na dostepnych danych, ale przede wszystkim wybór odpowiedniego algorytmu, próba dopasowania jego parametrów oraz wybór korzystnych cech wyliczonych wczesniej z obrazu. Dlatego nalezy przetestowac rózne metody i parametry, a nastepnie wybrac najlepsze rozwiazanie. Przeprowadzone eksperymenty nalezy opisac w raporcie.
      Prosze napisac kod w pythonie3 (z wykorzystaniem sklearn) do przeprowadzania eksperymentów – kod nalezy równiez dostarczyc.

      Do wyboru cech mozna wykorzystac: http://scikit-learn.org/stable/modules/feature_selection.html
      Do szukania odpowiednich parametrów mozna wykorzystac: http://scikit-learn.org/stable/modules/grid_search.html

    2. Program klasyfikujacy
      Nalezy równiez napisac program do klasyfikacji lisci (gatunki z udostepnionej bazy). Powinien on najpierw z obrazka wyliczyc potrzebne atrybuty (wykorzystujac [nazwisko1]_[nazwisko2]_extract_features.py z I etapu) a nastepnie wykorzystac najlepszy znaleziony klasyfikator.

      Program bedzie uruchomiony z jednym parametrem: sciezka do katalogu z obrazkami (pliki *.jpg), np.:
      python3 Kowalski_Malinowski_classify.py sciezka/do/katalogu
      Program na wyjsciu powinien dla kazdego pliku w podanym katalogu wypisac jeden wiersz z nazwa pliku oraz przewidzianym gatunkiem (oddzielone spacja), np.:

          ab.jpg celtis_occidentalis
          cdefg.jpg betula_alleghaniensis
          hijk.jpg populus_grandidentata

      Przyklad jak mozna zapisac/odczytac nauczony klasyfikator mozna znalezc tutaj: http://scikit-learn.org/stable/modules/model_persistence.html

      1
      2
      3
      4
      5
      6
      
          klasyfikator = ...
          klasyfikator.fit(...)
          from sklearn.externals import joblib
          joblib.dump(klasyfikator, 'plik_z_klasyfikatorem.pkl') 
          ...
          odczytany_klasyfikator = joblib.load('plik_z_klasyfikatorem.pkl')
  • Prosze przyslac maila:

    • Tytul: [IM] Etap 2
    • Tresc:
      imie1 nazwisko1 indeks1
      imie2 nazwisko2 indeks2
    • Zalaczniki:

      1. Raport ([nazwisko1]_[nazwisko2]_experiments.pdf) opisujacy eksperymenty i pokazujacy wyniki, m.in.:

        • jakosc przetestowanych klasyfikatorów w zaleznosci od jego parametrów i wybranych cech,
        • jaki dokladnie klasyfikator okazal sie najlepszy
      2. Kody zródlowe z przeprowadzonych eksperymentów ([nazwisko1]_[nazwisko2]_experiments.py/zip)
      3. Nauczony klasyfikator wraz z programem [nazwisko1]_[nazwisko2]_classify.py
  • Termin: do 17 czerwca