====== Strojové učení -- klasifikace znaků ====== Tato úloha je věnována **klasifikaci znaků**. Termín odevzdání úlohy je v [[https://cw.felk.cvut.cz/upload/|Upload Systému]]. Odevzdává se do upload systému. Hodnocení viz [[.:hodnoceni|hodnoceni]]. Předpokládá se, že studenti požadované metody sami implementují a **nebudou využívat již hotových řešení**. Nezapomeňte vyřešit také úlohu [[..:strojove_uceni_vyber/|výběr optimálního klasifikátoru]] (úloha nenavazuje na klasifikaci znaků). **Poděkování**: Některá data poskytnuta laskavostí firmy [[http://www.eyedea.cz|Eyedea Recognition]]. Jiná data z nejrůznějších veřejných zdrojů. ===== Problém ===== Úkolem je navrhnout a naprogramovat klasifikátory/rozpoznávače znaků (metodu **//k//-nejbližších sousedů** a **naivní bayesovský klasifikátor**). Vstupem je malý šedotónový obraz jednoho ručně napsaného znaku - písmeno nebo číslice - výstupem je rozhodnutí o třídě, tedy rozpoznání znaku na obrazu. K dispozici máte trénovací data, soubor obrazů s informací o správné klasifikaci. Je dobré si uvědomit, že to je obvykle vše, co vám dá zákazník k dispozici. Poté, co připravíte kód, zákazník, kterého v tomto případě představuje cvičící, přinese testovací data, na kterých vaši práci ohodnotí. Doporučujeme odsimulovat rozdělením dat, která máte k dispozici, na trénovací a testovací množinu. Váš výsledný kód bude v rámci AE ozkoušen na nových datech. ===== Data ===== Obrazy jsou ve formátu png v jednom adresáři, kde je i soubor ''truth.dsv'' ([[https://en.wikipedia.org/wiki/Delimiter-separated_values|dsv format]]). Jména souborů nemají s obsahem nic společného. Soubor truth.dsv má na každém řádku ''jmeno_souboru.png:znak'', např. ''img_3124.png:A''. Oddělovačem je znak '':'', který se v názvu souboru nevyskytuje. Jména souborů obsahují pouze písmena, číslice a znak podtržítko. * {{ :courses:b3b33kui:cviceni:strojove_uceni:train_1000_10.zip |}} 10x10 obrazy, 20 tříd, 50 vzorů pro každou. * {{ :courses:b3b33kui:cviceni:strojove_uceni:train_1000_28.zip |}} 28x28 obrazy, 10 tříd, 100 vzorů pro každou * {{ :courses:b3b33kui:cviceni:strojove_uceni:train_700_28.zip |}} 28x28 obrazy, 10 tříd, různé počty vzorů pro třídy (**počet kanálů obrázků v datasetu byl opraven**) ===== Specifikace ===== Naprogramujte ''classifier.py'', který bude spouštěn s parametry, viz help níže >> python3.8 classifier.py -h usage: classifier.py [-h] (-k K | -b) [-o filepath] train_path test_path Learn and classify image data. positional arguments: train_path path to the training data directory test_path path to the testing data directory optional arguments: -h, --help show this help message and exit -k K run k-NN classifier (if k is 0 the code may decide about proper K by itself -b run Naive Bayes classifier -o filepath path (including the filename) of the output .dsv file with the results Tedy např. python3 classifier.py -k 3 -o classification.dsv ./train_data ./test_data spustí 3-NN klasifikátor. Výsledkem klasifikátoru je soubor ''classification.dsv'' stejného formátu jako ''truth.dsv''. ===== Struktura řešení ===== Pokud si nejste jistí, jak úlohu vyřešit, nabízíme následující tipy. Vaše řešení bude patrně zahrnovat následující dílčí kroky: * [[.:argparse|Zpracování argumentů na příkazové řádce]] * [[.:listdir|Procházení obsahu adresáře]] * [[.:readcsv|Načtení .dsv souboru]] * [[.:image|Načtení .png obrázku ve formě čísleného vektoru]] * [[.:dist|Vzdálenost dvou obrázků]] * Pro práci s obrazovými daty silně doporučujeme [[https://numpy.org/doc/stable/reference/generated/numpy.array.html|numpy.array]] (viz příklad použití [[.:dist|Vzdálenost dvou obrázků]]). **Tím můžete předejít problémům s časovou neefektivitou řešení** (AE kontroluje zda kód neběží příliš dlouho). Pokud byste chtěli využít jiné knihovny, nezapomeňte vše včas otestovat v Brute, zda není vaše knihovna příliš exotická, příp. se zeptejte cvičícího. Můžete zvážit i následující: * Je vhodné mít rozumně navržený průchod data, zvažte použítí generátoru. Příklad pro úlohu [[https://cw.fel.cvut.cz/b201/courses/b4b33rph/cviceni/spam/krok2|spam-ham]] * Pro analýzu výsledku se vám bude hodit výpočet [[https://cw.fel.cvut.cz/b201/courses/b4b33rph/cviceni/spam/krok3|matice záměn]] (confusion matrix) nebo alespoň výpočet počtu klasifikačních chyb. ===== Příklady použití ===== {{:courses:be5b33kui:labs:machine_learning:02_03_04_obr5.png?800|Příklad automatické lokalizace textu v obrazech. Více informací na [[http://cmp.felk.cvut.cz/~zimmerk/lpd/index.html|http://cmp.felk.cvut.cz/~zimmerk/lpd/index.html]].}} Obr. 3: //Příklad automatické lokalizace textu v obrazech. Více informací na [[http://cmp.felk.cvut.cz/~zimmerk/lpd/index.html|http://cmp.felk.cvut.cz/~zimmerk/lpd/index.html]].// {{:courses:be5b33kui:labs:machine_learning:02_03_04_obr6.png?800|Příklad komerční aplikace na rozpoznávání registračních značek ve videu. Demonstrační videa lze nalézt na adrese http://cmp.felk.cvut.cz/cmp/courses/X33KUI/Videos/RP_recognition/ a viděli jste také demonstraci algoritmu během prvního, demonstračního, cvičení.}} Obr. 4: //Příklad komerční aplikace na rozpoznávání registračních značek ve videu. Demonstrační videa lze nalézt na adrese [[http://cmp.felk.cvut.cz/cmp/courses/X33KUI/Videos/RP_recognition|http://cmp.felk.cvut.cz/cmp/courses/X33KUI/Videos/RP_recognition]].// ====== Relevantní zdroje ====== Christopher M. Bishop. //Pattern Recognition and Machine Learning.// Springer Science+Bussiness Media, New York, NY, 2006. T.M. Cover and P.E. Hart. Nearest neighbor pattern classification. //IEEE Transactions on Information Theory,// 13(1):21–27, January 1967. Richard O. Duda, Peter E. Hart, and David G. Stork. //Pattern classification.// Wiley Interscience Publication. John Wiley, New York, 2nd edition, 2001. Vojtěch Franc and Václav Hlaváč. //Statistical pattern recognition toolbox for Matlab.// Research Report CTU–CMP–2004–08, Center for Machine Perception, K13133 FEE. Czech Technical University, Prague, Czech Republic, June 2004. http://cmp.felk.cvut.cz/cmp/software/stprtool/index.html. Michail I. Schlesinger and Václav Hlaváč. //Ten Lectures on Statistical and Structural Pattern Recognition.// Kluwer Academic Publishers, Dordrecht, The Netherlands, 2002.