Laboratorio di intelligenza artificiale 22/23
Codice OPIS: NK73W96F
Abstract
Il corso si propone di aiutare gli studenti ad approfondire alcune tematiche di intelligenza artificiale utilizzando come filo conduttore la visione computazionale (Computer Vision). Una buona parte degli avanzamenti recenti e meno recenti nel campo del Machine Learning sono maturati in questo ambito e questo ci permetterà di costruire e consolidare molti concetti fondamentali e best practices utilizzati largamente nella pratica di chi lavora con dati di ogni genere, non solo immagini.
Gli strumenti metodologici sono principalmente quelli della geometria proiettiva e dell'algebra lineare, mentre quelli tecnologici sono il linguaggio C++, python, pytorch (per le reti neurali) e opencv. Tempo permettendo, potrebbero essere proposte altre tematiche (e.g. programmazione GPU, embedded robot programming,..).
Gli obiettivi formativi principali sono:
Sviluppare la conoscenza teorica e pratica dei fondamenti della Computer Vision;
Sviluppare la capacità di implementare algoritmi fondamentali di Computer Vision in C++ e Python;
Sviluppare le competenze di base per lavorare con dati e con l'apprendimento computazionale;
Metodologia didattica
Il corso tratterà diversi temi di visone computazionale (Computer Vision) e apprendimento automatico (Machine Learning), ma senza la pretesa di richiedere una comprensione approfondita di tutto. Alcuni elementi del programma sono ovviamente fondamentali per comprenderne altri (e.g. il pinhole camera model è necessario per capire la calibrazione della telecamera, o la geometria epipolare), mentre altri potranno essere considerati specialistici.
La prova di esame è composta da una prova di teoria, che potrà essere scritta o orale, a seconda delle condizioni e del numero degli studenti in ciascun appello e dalla presentazione di un progetto di laboratorio basato sui temi trattati nel corso.
Le esercitazioni di laboratorio saranno inizialmente degli esercizi di completamento di codice, in cui scrivere alcune funzioni e testarle con un input e output standard, per poi diventare più aperte man mano che si avanza nel semestre, fino a diventare descrizioni algoritmiche che presentano un problema e danno alcuni suggerimenti, ma lasciano campo libero per l'implementazione. Se il numero degli studenti è molto alto, faremo dei turni. Il docente e i teaching assistants saranno in aula per aiutare tutti nello svolgimento, che avverrà al passo che ciascuno potrà tenere. Non ci saranno votazioni sulle esercitazioni intermedie, ma si potrà discutere insieme gli approcci, ove sia di interesse per la classe. Le soluzioni degli esercizi verranno proposte dopo una o due settimane dall'esercitazione in presenza, per dare a tutti il tempo di terminarla.
Il progetto finale sarà approssimativamente calibrato per impegnare lo studente per un paio di settimane full time, al netto di aver compreso gli elementi delle esercitazioni (altrimenti, partendo da zero, potrebbe richiedere molto di più). Ovviamente questo impegno di tempo non può essere garantito, in quanto il tempo reale di svolgimento dipende anche dalle inclinazioni e capacità dello studente. Il progetto potrà essere discusso con il docente o gli assistenti, che non daranno soluzioni "precotte", ma potranno consigliare sugli approcci.
La valutazione del progetto verrà fatta durante le prove di appello, in presenza. La discussione del progetto non richiede una relazione scritta, o una presentazione formale (power point), ma richiede di mostrare il funzionamento dell’applicazione, o algoritmo, e di discutere il codice sorgente. Se il progetto viene considerato sufficiente, il candidato passerà l'esame, altrimenti potranno essere richieste delle integrazioni, ripresentandolo dopo qualche giorno. In rari casi il candidato potrebbe essere giudicato insufficiente ed essere rimandato ad un appello successivo.
Il progetto finale, oltre a consentire di superare il corso, può essere utilizzato come base di partenza per un progetto di tesi di laurea triennale, a discrezione del docente. Per chi volesse usare il progetto come tesi, sarà necessario dichiararlo in sede di assegnazione del progetto, in modo che il lavoro sia congruo all'impegno richiesto per un lavoro di tesi (3 CFU aggiuntivi ai 6 del corso). Per il resto si seguono le regole della facoltà sulla domanda di laurea e la relazione scritta da presentare.
Modalità d'esame
Il progetto va concordato con il docente almeno 3 settimane prima dell'appello a cui si intende presentarlo. Una volta concordato, lo studente dovrà iscriversi sul seguente form:
TBD
dove si dovrà indicare il link al repository git che dovrà essere aggiornato man mano che il progetto avanza (non con un solo commit alla fine), pena la non ammissione all'esame.
Ovviamente, sarà necessario iscriversi anche all'appello su infostud per poter essere verbalizzati.
Una lista di progetti di esempio può essere trovata su questo documento:
TBD
ma si può anche proporre qualcosa di originale.
Comunicazione con il docente
Lo strumento di informazione frontale principale sono le lezioni e questo sito. In particolare su questo sito troverete i materiali didattici (slides e esercitazioni) che via via verranno trattati in classe.
Per avere un canale di interazione online rapido, utilizzeremo google classroom (cod corso: v6txk6l). In particolare chiedo a chiunque sia interessato a seguire il corso in questo semestre di iscriversi a questo sito il prima possibile, per potervi comunicare rapidamente le modalità di lezione del 21, 23 e 24 febbraio p.v.
Rimane possibile contattare il docente e gli assistenti tramite email. Vi chiedo di utilizzare il tag [AI-Lab-23] (comprese le parentesi quadre) all'inizio dell'oggetto per facilitare il filtraggio delle emails. L'indirizzo email del docente è ciarfuglia@diag.uniroma1.it. Quelli degli assistenti verranno comunicati a lezione.
Risorse
Nel corso del semestre verranno fornite le slides delle lezioni e il codice delle esercitazioni. Oltre a questo, il testo fondamentale che useremo è il Szelinski:
Computer Vision: Algorithms and Applications, 2nd ed.
che può essere recuperato in formato digitale gratuitamente al link fornito qui sopra. Questo testo è molto ampio e propone gli argomenti in modo da privilegiare l'implementazione e l’approfondimento aggiuntivo, piuttosto che essere esaustivo. È uno stile che si adatta bene a questo corso di laboratorio. Oltre a questo, altri testi che possono essere utili, ma che non sono necessari, sono:
Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer, New York, NY.
Glassner, A. (2018). Deep Learning: From Basics to Practice. The Imaginary Institute.
Hartley, R. I. and Zisserman, A. (2004). Multiple View Geometry. Cambridge University Press, Cambridge, UK, 2nd edition.
K. P. Murphy (2022). Probabilistic Machine Learning: An Introduction, MIT Press.
K. P. Murphy (2023). Probabilistic Machine Learning: Advanced Topics, MIT Press.