1. domača naloga: skupine iz slik
V tej domači nalogi boste izbrane slike razvrstili v skupine.
Zberite nabor 50 slik v
jpg
alipng
formatu (s prav temi končnicami). Tematiko si lahko izberete po želji. Pomembno je, da vaš nabor slik tvori zanimiv in ne prelahek razvrščevalni problem.Implementiranje branje direktorija slik v vektorje števil (funkcija
read_data
). Za pretvorbo slik v vektor števil uporabite nevronsko mrežo SqueezeNet 1.1. Pri tem si pomagajte s knjižnjico Torch in že zgrajeno mrežo; izhod, ki ga potrebujete, jeoutput[0]
s povezave.Implementirajte razdaljo med vektorji, ki temelji na kosinusni podobnosti (funkcija
cosine_dist
).Implementirajte postopek razvrščanja v skupine na podlagi medoidov (k-medoids clustering), ki razdalje med slikami (oziroma vektorji) meri s prej implementirano razdaljo. Pozor, k-medoids clustering NI k-means clustering (sta si pa zelo podobna, le da tukaj iščemo medoid skupine). Postopek implementirajte v funkciji
k_medoids
.Razvijte računanje silhuete (funkciji
silhouette
insilhouette_average
).Postopek razvrščanja z medoidi je lahko odvisen od začetnega izbora, zato razvrščevanje s
k_medoids
poženite s 100 naključno izbranimi inicializacijami oziroma začetnim izborom medoidov. Izmed 100 razvrstitev izberite (in nato poročajte) najboljšo. Pazite na ponovljivost (uporabite primerno inicializiran generator naključnih števil). Izberite najprimernejše število skupin (vsaj 3).Pripravite kodo, ki izriše najboljšo razvrstitev. Za vsako skupino naj izriše pripadajoče slike urejene po silhueti. Vrednost silhuete tudi označite. Za primer poglejte
cluster_primer.jpg
.
Vse opisano združite v skripti naloga1.py
. Skripta naj sprejme dva argumenta: število skupin in direktorij slik. Ob zagonu naj ustvari datoteke cluster_i.jpg
kot opisano v točki (7). Skripta naj se za 50 slik izvede prej kot v treh minutah. Primer uporabe skripte: python naloga1.py 5 /home/marko/slike
Začnite s podano predlogo naloga1.py
. Vaša koda mora podpirati Python 3.8 in delovati s testi test_naloga1.py
. Za podrobnejšo specifikacijo funkcij sledite komentarjem in kodi testov in predloge. Testi zagotavljajo le enoten vhod/izhod; pravilnost rešitev zagotovite sami. Vse dejansko poganjanje kode zberite pod if __name__ == "__main__":
.
Srž naloge morate razviti sami. Za pretvorbo slik v vektorje uporabite torch
. Za računanje z vektorji uporabite numpy
, za izris pa matplotlib
.
Oddaja. Oddajte poročilo (ena stran, .pdf), izvorno kodo (v eni datoteki, naloga1.py
), ter uporabljene slike (v .zip datoteki). Poročilo naj vsebuje (v istem vrstem redu):
Rezultate ravrščanja. Vse skupine predstavljene z elementi urejenimi po silhuetah. Primer vsebine:
cluster_primer.jpg
.Komentar razultatov. V enem odstavku komentirajte rezultate.
Utemeljitev števila skupin. V enem odstavku utemeljite izbor števila skupin.
- 23. februar 2022, 23:31
- 23. februar 2022, 23:31
- 23. februar 2022, 23:33