Laboratorio di intelligenza artificiale 21/22

Codice OPIS: AECBK87C

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 Learining 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:

  1. Sviluppare la conoscenza teorica e pratica dei fondamenti della Computer Vision;

  2. Sviluppare la capacità di implementare algoritmi fondamentali di Computer Vision in C++ e Python;

  3. 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 apprendimetno 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. In generale possiamo considerare tutti i temi del programma come proposte di apprendimento, che ciascuno approfondirà in base al proprio interesse.

Questo vuol dire che non è necessario studiare per superare il corso? Ovviamente no, ma che la conoscenza specifica non verrà testata direttamente all'esame. La prova di esame è la presentazione di un progetto di laboratorio basato sui temi trattati nel corso e va da se che per poterlo realizzare, sarà necessario capire qualche cosa degli argomenti presentati. Quindi il grado di competenza che viene richiesto è una "working knowledge", piuttosto che una conoscenza precisa di ogni argomento. Il modo migliore per acquisirla è chiaramente lavorare sulle esercitazioni in laboratorio e su applicazioni aggiuntive che potranno essere proposte a chi volesse approfondire ulteriormente.

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. Le esercitazioni di laboratorio saranno proposte in presenza, salvo condizioni pandemiche che non lo permettano. 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, possibilmente in presenza (anche qui aspettiamo che l'Ateneo ci dia indicazioni per questo semestre). 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 progetto di tesi di laurea triennale. In questo caso 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 2 settimane prima dell'appello a cui si intende presentarlo. Una volta concordato, lo studente dovrà iscriversi sul seguente form:

https://forms.gle/vd2U3Mv4hrqfV2LLA

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:

https://docs.google.com/spreadsheets/d/11o67fdWC3eId3uhqpQsCEwrwgGkcrQXKMPQpfQc1Drg/edit?usp=sharing

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: lnrb36d). 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 22 e 25 febbraio p.v.

Rimane possibile contattare il docente e gli assistenti tramite email. Vi chiedo di utilizzare il tag [AI-Lab] (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: