if you want to make it a bit more challenging, remove most of the training examples from 1-2 classes, leave just 0-10 from each

Basic task: classification network

Train and evaluate the network;

"Large" homework: Siamese networks + one-shot classification

One-shot klasifikace pomocí siamské sítě.

Cílem DU je sestavit, natrénovat a otestovat siamskou síť pro potřeby one-shot klasifikace (klasifikace na základě jediného známého příkladu pro některé třídy). One-shot klasifikace je důležitá zejména v situacích, kdy se počet tříd může dynamicky měnit a není možné pro každou změnu přetrénovávat celý model (například vizuální identifikace aktuálních zaměstnanců velké korporace). Pro tyto případy je možné použít nějakou variantu siamských sítí (viz. https://en.wikipedia.org/wiki/Siamese_neural_network), které se zaměřují na binární klasifikaci páru objektů (jsou/nejsou reprezentanty stejné třídy).

V DU budete vycházet z Fashion-MNIST datasetu (https://github.com/zalandoresearch/fashion-mnist), nebo MNIST datasetu - nechám na vašem uvážení, který pro potřeby testování obohatíme o několik nových tříd. Váš úkol bude postupně:

Jako základ pro vytvoření modelu siamské sítě můžete použít síť vytvořenou pro "malý" úkol. Minimální očekávaná přesnost modelu na validačních datech je cca 90%. Obohacení Fashion-MNIST datasetu proveďte dle vlastního uvážení. Zvolte ale alespoň 10 nových tříd, které jsou disjunktní s původními Fashion-MNIST datasetem: třídy buď rozšiřují doménu módy (hodinky, čepice,...), nebo se týkají jiné ucelené domény (například druhy nábytku). Z každé třídy vyberte alespoň 10 reprezentantů a převeďte je do Fashion-MNIST formátu (greyscale, 28x28). Využít můžete například podmnožinu ImageNet datasetu. Z každé třídy pak vyberte jednoho reprezentanta (known class member), vůči kterému budete ostatní data testovat (tj. neprovádíte přetrénování sítě pro nové třídy, pouze zkoumáte vzdálenosti mezi známými reprezentanty a novými daty).

Při testování porovnejte zvlášť přesnost klasifikace na původních testovacích příkladech, tak i nově vytvořených třídách (nicméně, každý testovací objekt porovnáváte s reprezentanty všech tříd, tj. provádíte klasifikaci alespoň do 20 tříd). Zobrazte také nějakou variantu confusion matrix (například jako heatmapu). Očekává se rozumná performance jak na původních, tak rozšířených datech (rozumnost je definována překonáním jednoduchého baselinu implementovaného vyučujícím). Preferovaný způsob odevzdání je (komentovaný) python notebook a zip archiv obsahující rozšiřující objekty datasetu.

Možné rozšíření:

Task 1: construct siamese network

Task 2: k-shot classification on existing labels

Task 3: one-shot (k-shot) classification for newly introduced classes