Librerie per il Machine Learning: Core ML
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Università degli Studi di Napoli Federico II Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Tesi di Laurea Triennale Librerie per il Machine Learning: Core ML Relatore Candidato Prof. Vincenzo Moscato Salvatore Capuozzo Matr. N46/2718 Anno Accademico 2017-2018
Indice Premessa introduttiva e ringraziamenti 3 1 Una panoramica sul Machine Learning 4 1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Reti Neurali Articiali . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1 Reti Neurali Feedforward . . . . . . . . . . . . . . . . . . . . . 7 1.2.2 Algoritmo di Backpropagation . . . . . . . . . . . . . . . . . . 9 1.3 Deep Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1 Reti Neurali Convoluzionali . . . . . . . . . . . . . . . . . . . 11 1.4 Applicazioni principali delle reti neurali . . . . . . . . . . . . . . . . . 13 1.4.1 Riconoscimento e rilevamento di oggetti . . . . . . . . . . . . 13 1.4.2 Generazione di didascalie per immagini . . . . . . . . . . . . . 14 1.4.3 Riconoscimento e sintesi vocale . . . . . . . . . . . . . . . . . 15 1.4.4 Traduzione di testi . . . . . . . . . . . . . . . . . . . . . . . . 15 2 Librerie per il Machine Learning e Core ML 16 2.1 Librerie adottate nel Machine Learning . . . . . . . . . . . . . . . . . 16 2.1.1 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1.2 PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1.3 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2 Alcuni modelli signicativi . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.1 Inception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.2 YOLO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2.3 Watson Language Translator . . . . . . . . . . . . . . . . . . . 22 2.3 Una nuova libreria: Core ML . . . . . . . . . . . . . . . . . . . . . . 23 2.3.1 Struttura e vantaggi del framework . . . . . . . . . . . . . . . 23 2.3.2 Uno strumento intuitivo: Create ML . . . . . . . . . . . . . . 25 2.3.3 Ulteriori considerazioni su Core ML . . . . . . . . . . . . . . . 26 1
3 Reti neurali on-device: CoreL8 27 3.1 Approccio allo sviluppo . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.1 Modelli adottati . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2 Funzionalità ed analisi prestazionali . . . . . . . . . . . . . . . . . . . 30 3.2.1 Schermate adottanti YOLO . . . . . . . . . . . . . . . . . . . 30 3.2.2 Schermate adottanti Inception . . . . . . . . . . . . . . . . . . 31 3.2.3 Schermate adottanti Watson Language Translator . . . . . . . 31 3.3 Conclusioni sulle applicazioni di Core ML . . . . . . . . . . . . . . . . 33 2
Premessa introduttiva e ringraziamenti Il campo del Machine Learning, formatosi conseguentemente ai diversi studi mirati nella disciplina dell'Intelligenza Articiale e alla raccolta dei vari metodi di miglio- ramento automatico degli algoritmi, mi ha sempre suscitato un particolare interesse, sia dal punto di vista tecnico, dal momento che sfrutta le potenzialità dei linguaggi di programmazione attuali per emulare o perlomeno imitare il comportamento della nostra mente, sia dal punto di vista sociale, essendo questo un campo di ricerca che sta portando notevole progresso nelle nostre vite, ma anche dibattiti e discussioni di natura etica e losoca. La mia fortuna è quella di vivere in un periodo in cui questo campo ha già piantato le sue radici, ma è ancora in fase di evoluzione per giungere a soluzioni denitive e concrete che portano alle macchine a poter ragionare e migliorarsi autonomamente. Da fervido amante dell'innovazione tecnologica, dei problemi da risolvere, dell'ingegnerizzazione di sistemi e della programmazione, non posso che sentirmi coinvolto quando si parla di Machine Learning. La fortuna di poter frequentare un'università che dia solide basi per arontare ed apprendere i più svariati e moderni campi di studi, tra cui anche questo, assieme a quella di poter partecipare dal vivo ai Worldwide Developers Conference di Apple del 2017 e 2018 grazie a delle borse di studio, mi ha permesso di approfondire meglio questo campo e di conoscere realtà in continua evoluzione che aprano le porte ai suoi approcci. Ovviamente c'è ancora parecchia strada da fare, gli studi non hanno mai ne, specie se si parla di questo nuovo campo in crescita esponenziale. Il mio cammino nora è stato pieno di alti e bassi, ma se ho ancora la forza di proseguire e di puntare alle stelle lo devo soprattutto ai miei genitori, pilastri nei miei momenti di crescita e ripari in quelli di crollo. Se mi è possibile esporre una tesi in ciò che mi ha sempre aascinato, lo devo al prof. Vincenzo Moscato, che si è reso disponibile a coronare questa mia utopia. Inne voglio ringraziare Maria Luisa, che mi ha dato lo sprint nale per poter concludere questo primo percorso, e Gloria, con la quale ho condiviso gioie e dolori del nostro cammino comune. 3
Capitolo 1 Una panoramica sul Machine Learning 1.1 Introduzione L'esponenziale evoluzione informatica, conseguente alla moltitudine di risultati del- le ricerche compiute durante il XX secolo, ha portato allo sviluppo di un insieme di metodi che permettono di fornire ai programmi la capacità dell'apprendimento automatico. Tali metodi fanno parte del campo denominato Machine Learning, una branca dell'Intelligenza Articiale che racchiude tutti gli studi sugli algoritmi in grado di compiere un compito con migliori performance al crescere dell'esperienza. Con il professor Tom M. Mitchell si ha una denizione più rigorosa di tale campo [1], tuttavia, al momento della sua introduzione, non si avevano gli strumenti e l'e- sperienza necessaria per poter sviluppare in maniera pragmatica algoritmi in grado di rendere le macchine "pensanti", così come avrebbe proposto Alan Turing nel suo articolo "Computing Machinery and Intelligence" [2]. Il Machine Learning vede nalmente i suoi frutti negli anni '90 [3], periodo in cui tale campo viene rivalutato in una chiave maggiormente problem-solving, al ne di risolvere problemi di natura pratica, e rinasce come una branca dalle potenzialità innite e dalle soluzioni ecaci, grazie soprattutto alla tecnologia a disposizione e all'avvento dell'Internet. Ciò che rende estremamente innovativo questo campo è che si vuole rendere la mac- china un'entità in grado di compiere ragionamenti induttivi in base all'esperienza, in maniera del tutto analoga a come fa l'uomo stesso. Quindi, basandosi su un training set di dati provenienti da una certa distribuzione di probabilità, la macchina deve essere in grado di arontare problemi nuovi, non 4
conosciuti quindi a priori, costruendo un modello probabilistico dello spazio delle occorrenze. L'analisi computazionale degli algoritmi di apprendimento automatico è uno dei la- vori computi nella teoria dell'apprendimento, un campo di studi che si propone di risolvere con vari approcci, seppur non potendo mai orire certezze in merito ai risultati, sia per la quantità nita di dati per l'addestramento sia per eventuali pro- blemi di undertting ed overtting, dovuti essenzialmente ad una sproporzione tra i parametri richiesti e numero di osservazioni. Con l'avanzare degli studi e con il riconoscimento delle varie sfaccettature dei pro- blemi arontati, si ha una suddivisione del campo del Machine Learning in vari rami che dieriscono per l'approccio alla risoluzione dei problemi arontati, per la tipologia dei dati elaborati e per il compito da svolgere dall'algoritmo. Una classicazione per suddividere le tecniche di Machine Learning è la seguente: • Apprendimento supervisionato: Il modello viene addestrato raccogliendo dati in input, per poi ottenere degli output che permettano di formulare una regola generale per associare correttamente input e output. • Apprendimento non supervisionato: Il modello prende in ingresso degli in- put non etichettati e cerca di generare una struttura comune a questi dati in ingresso. • Apprendimento per rinforzo: Il modello interagisce con un ambiente dinamico e viene noticato o premiato solo nel caso in cui l'obiettivo da portare a termine viene compiuto. In questo campo vi sono numerosissimi approcci, che si basano sia sulla tipologia di strategie adottate, sia sui modelli eettivamente generati. Passando dagli alberi di decisione, gra che permettono l'azione decisionale tramite cammini che portano al- la predizione di una determinata variabile per classicazione, agli algoritmi genetici, algoritmi che emulano il fenomeno della selezione naturale e dell'evoluzione genetica mediante tecniche come mutazione e crossover, dalla programmazione logica indut- tiva, approccio che lega la logica proposizionale all'apprendimento simbolico e che fa ampio uso dell'entailment a partire dalle basi di conoscenza, alle reti bayesiane, rappresentazioni grache delle relazioni di dipendenza tra le variabili di un sistema che forniscono una specica di qualsiasi distribuzione di probabilità congiunta com- pleta. Tuttavia, l'approccio che si trova alla base di numerosissimi modelli generati con librerie apposite, approccio che verrà approfondito in questa tesi, è quello delle reti neurali articiali. 5
1.2 Reti Neurali Articiali Una rete neurale articiale, denita anche con l'acronimo ANN, derivante dal suo nome inglese Articial Neural Network, è un modello computazionale che è in gra- do di riprodurre la struttura del cervello umano ed emularne il suo funzionamento. Difatti anche la terminologia ricalca quella biologica, e abbiamo come unità elabo- rativa di base il "neurone" articiale. I neuroni sono collegati tra loro tramite archi, che ricalcano le sinapsi cerebrali, e co- municano tramite segnali che dipendono dai segnali di input e dal loro peso. Difatti osserviamo che un neurone si attiva quando la somma pesata dei valori in ingresso supera una data soglia. Questi neuroni sono la base di un modello computazionale introdotto inizialmente nel 1943 da Warren McCulloch e Walter Pitts [4]. Figura 1.1: Struttura di un percettrone Nella gura riportata sopra vi è la struttura di base del neurone, come presentata da Rosenblatt, ovvero del classicatore binario alla base di questo modello denomi- nato percettrone [5]. Questo riceve dei numeri dagli archi di input, ciascuno con X peso Wj,i , e la prima operazione eettuata è proprio una somma pesata: aj Wj,i . j Al valore ottenuto viene poi applicata la funzione di attivazione, indicata solitamen- te con la lettera g , e il risultato di questa funzione viene propagato a tutti i neuroni legati al neurone considerato. Questa funzione in origine era una semplice funzione a gradino, sostituita poi dalla funzione sigmoide, anche detta funzione logistica. Figura 1.2: Funzione gradino e funzione sigmoide 6
Il peso degli archi va a modicare la soglia di attivazione delle funzioni. Si tratta evidentemente di una grossa approssimazione del cervello umano, ma serve per vericare le capacità di una rete di elementi più semplici. Le reti neurali con un unico layer sono molto limitate, non permettono l'implementazione neanche di semplici funzioni logiche quali la XOR. Per questo motivo vengono implementante reti neurali multilivello, dette anche Multilayer Perceptrons o MLP. La struttura a singolo livello fornisce una funzione di tipo lineare e non permette di trattare non linearità, mentre la struttura multilivello permette l'implementazione di funzioni non lineari, e addirittura discontinue se si aumenta il numero di livelli. Figura 1.3: Struttura di una rete neurale multilivello La struttura di reti neurali maggiormente utilizzata è quella di tipo ricorrente in cui, oltre a una strategia di feedforward, in cui l'informazione procede in avanti attraverso i livelli neurali, è presente una strategia di feedback che permette ai neuroni di conservare un determinato stato agendo come una memoria della rete neurale. 1.2.1 Reti Neurali Feedforward All'interno di queste strutture neurali, i neuroni ricevono degli stimoli in ingresso che vengono elaborati. L'elaborazione può risultare molto sosticata, ma si può im- maginare banalmente che i singoli ingressi vengano moltiplicati per un determinato valore, ovvero il peso, per poi andare a sommare il risultato di queste moltiplicazio- ni: il neurone attiva la sua uscita solo se questa somma supera una data soglia. Il peso indica l'ecacia sinaptica dell'ingresso e ne quantica l'importanza: un ingres- so importante avrà peso maggiore, mentre un ingresso meno importante avrà peso inferiore. Tuttavia, le reti neurali non adottano percorsi preferenziali in base al confronto tra i pesi dei percorsi, bensì, mediante contribuiti dall'importanza dierente determi- 7
nata dal peso corrispettivo, tutti i neuroni nella rete contribuiscono al collegamento ingresso/uscita. Figura 1.4: Rete neurale pienamente connessa Il collegamento dei neuroni non è casuale: difatti, ciascun neurone si collega a quelli del livello successivo, no a formare una rete complessa ma ben strutturata. I neuroni quindi, come accennato, vengono solitamente posizionati in più livelli, che possono essere di tre tipi: • Livelli di ingresso (Input Layers): Livelli costruiti per ricevere dati provenienti dall'esterno che vengono poi riconosciuti e processati. • Livelli nascosti (Hidden Layers): Livelli che legano il livello di ingresso e quello di uscita e che permettono alla rete neurale di imparare le relazioni complesse elaborate dai dati. • Livelli di uscita (Output Layers): Livelli nali che mostrano il risultato di quanto il programma è riuscito a imparare. Queste reti possono essere anche molto complesse, no ad avere migliaia di neu- roni legati da innumerevoli connessioni. Per costruire una rete neurale multistrato si possono inserire più strati nascosti, tut- tavia all'aumentare degli strati nascosti aumenta pure la complessità della struttura. L'ecacia della generalizzazione di una rete neurale multilivello dipende dalle mo- dalità di addestramento adottate e dall'aver individuato mediante questa un minimo locale buono. 8
1.2.2 Algoritmo di Backpropagation Per l'apprendimento si adotta l'algoritmo noto come algoritmo di Backpropaga- tion, che consiste in pratica nel rimandare a ritroso attraverso la rete neurale errori rispetto ai valori attesi, modicando il peso degli archi in modo da avvicinarsi al va- lore corretto. Quindi si andrà ad osservare il gradiente nella funzione di attivazione. L'algoritmo di retropropagazione dell'errore, come illustrato nel libro Articial In- telligence: A Modern Approach [6], viene costruito così: Figura 1.5: Algoritmo di Backpropagation Partendo da una rete di esempio, se in uscita viene generato un errore, l'errore viene propagato a ritroso modicando i pesi sugli archi. In particolare, il peso sull'ultimo livello wi,j viene aggiornato aggiungendo a se stesso il learning rate α moltiplicato per il valore propagato ai e per la delta ottenuta da g 0 (inj ) e la dierenza tra valore desiderato yj e ottenuto aj , mentre su quelli nascosti il procedimento è analogo, con la sola dierenza che la delta si ottiene con g 0 (ini ) moltiplicato per la sommatoria dei prodotti wi,j ∆ [j] precedenti. Tale algoritmo presenta l'inconveniente di non riuscire ad evitare i minimi locali della funzione, in quanto piccoli scostamenti dal minimo incrementano l'errore, mentre grandi scostamenti portano al minimo globale e alla riduzione dell'errore, per questo si utilizzano metodi come gli algoritmi genetici per ottimizzare questo algoritmo. 9
1.3 Deep Learning Bisogna attendere no al 2006 per poter assisitere all'introduzione del Deep Lear- ning, difatti è quello il periodo in cui Georey Hinton, pioniere del campo delle ANN, nonché coautore del libro che illustra il funzionamento dell'algoritmo di Bac- kpropagation [7], insieme ai suoi colleghi si è approcciato alla costruzione di reti neurali che, rapportate a quelle precedenti, presentavano molti più livelli. Però sol- tanto nel 2009 fu sviluppata una prima reale applicazione di successo nata da questo trend, ovvero il riconoscimento vocale. Possiamo aermare che il Deep Learning è un campo di ricerca proveniente dal Machine Learning che si basa sulla complessità incrementale delle reti neurali articiali di vaste dimensioni. Per essere più precisi, l'apprendimento profondo è denito come una classe di algorit- mi di apprendimento automatico dotati di determinate caratteristiche ora elencate. Difatti questi usano livelli di unità non lineari a cascata per poter svolgere lavori di estrazione di caratteristiche e di trasformazione. Ogni livello prende in ingresso le uscite provenienti dal livello precedente. Gli algoritmi di questo campo possono essere di tipo supervisionato, come per la classicazione, oppure di tipo non super- visionato, come per l'analisi di pattern. Questi ultimi si basano su livelli gerarchici multipli di caratteristiche e rappresentazioni dei dati, difatti le caratteristiche di più alto livello vengono ottenute da quelle di livello inferiore, formando quindi una gerarchia, e inoltre apprendono multipli livelli di rappresentazione corrispondenti a vari livelli di astrazione, no a formare una gerarchia di concetti. La composizione di ciascun livello dipende dal problema da risolvere. Le tecniche di Deep Learning adottano principalmente molteplici livelli nascosti di una ANN, ma anche insiemi di formule proposizionali. Le reti neurali articiali in questo campo hanno almeno 2 livelli nascosti, ma in realtà le applicazioni del Deep Learning alle reti neurali contengono molti più livelli, ad esempio 10 o 20 livelli nascosti. Figura 1.6: Esempio di rete neurale profonda 10
Lo sviluppo del Deep Learning in questo periodo è certamente dipeso dall'au- mento esponenziale dei dati, con la conseguente introduzione dei Big Data, infatti con questo aumento esponenziale dei dati si sono avute crescenti prestazioni dovute al crescere del livello di apprendimento, soprattutto rispetto agli algoritmi già esi- stenti. Inoltre, anche l'aumento delle performance dei computer hanno contribuito al miglioramento dei risultati ottenibili e alla notevole riduzione dei tempi di calcolo. Una conseguenza dell'applicazione degli algoritmi di Deep Learning alle reti neura- li articiali è lo sviluppo di un nuovo modello ben più complesso ma dai risultati strabilianti, ovvero la rete neurale convoluzionale. 1.3.1 Reti Neurali Convoluzionali Una rete neurale convoluzionale, detta anche CNN, acronimo di Convolutional Neu- ral Network, è un particolare tipo di rete neurale articiale feedforward in cui il pattern di connettività tra i neuroni è ispirato dall'organizzazione della corteccia vi- siva dell'occhio umano, in cui i singoli neuroni sono disposti in modo tale da dedicarsi alle varie regioni che compongono complessivamente il campo visivo. Figura 1.7: Esempio di rete neurale convoluzionale Gli strati nascosti all'interno del livello nascosto di tale rete si classicano in varie tipologie, a seconda del ruolo svolto. Questi infatti possono essere: • Strati convoluzionali: Questo è lo strato principale di tale modello. Consiste in un insieme di ltri apprensivi, dal limitato campo di visione ma estesi lungo tutta la supercie dell'input. Qui si hanno le convoluzioni di ciascun ltro lungo le dimensioni della supercie, facendo i prodotti scalari tra gli ingressi del ltro e l'immagine in input, generando quindi una funzione d'attivazione bidimensionale che si attivi qualora la rete riconosca un determinato pattern. • Strati di pooling: In questo strato vi è una decimazione non lineare che par- tiziona l'immagine in input in un insieme di rettangoli non sovrapposti che 11
vengono determinati a seconda della funzione non lineare. Per esempio, con il max pooling si individua per ciascuna regione il massimo di un determinato valore. L'idea dietro a questo strato è quella che la posizione esatta di una caratteristica è meno importante della sua posizione rispetto alle altre, dunque si omettono informazioni superue evitando anche l'overtting. • Strati ReLU: Lo strato di retticazione lineare (Rectied Linear Unit) permet- te di linearizzare la funzione di attivazione bidimensionale e di porre a zero tutti i valori negativi. • Strati completamente connessi: Questo strato, posto generalmente al termine della struttura, permette di eettuare i ragionamenti di alto livello della rete neurale. Si chiama così in quanto i neuroni in questo strato hanno stati tutti completamente connessi al livello precedente. • Strati di perdita: Questo strato specica quanto l'allenamento penalizzi la deviazione tra le previsioni e i valori veri in uscita, quindi si trova sempre al termine della struttura. Figura 1.8: Esempio di max pooling Per la maggior parte dei modelli più recenti, si adotta una versione avanzata delle CNN denominata R-CNN, acronimo che sta per "Region Convolutional Neural Network", ottimizzata appositamente per il problema del rilevamento degli oggetti in un'immagine [8]. In questo caso vi è una ricerca selettiva delle regioni d'interesse, tramite la segmentazione dell'immagine nelle varie regioni in base alla similitudine dei pattern, seguita da un ridimensionamento di queste, così da renderle tutte di dimensioni uguali ed adeguate per la rete neurale convoluzionale. 12
1.4 Applicazioni principali delle reti neurali Abbiamo visto nora quali sono le proprietà principali delle reti neurali articiali, introducendo anche le caratteristiche delle reti neurali convoluzionali, che saranno per diverse volte protagonisti di ciò che verrà mostrato in seguito in questa tesi. Difatti, vi sono innumerevoli implementazioni di soluzioni a problemi vari di natu- ra pratica mediante l'approccio delle reti neurali, data la semplicità con la quale si possono riprodurre funzioni non lineari e particolarmente complesse. Per que- sta ragione, verranno analizzate alcune applicazioni in cui l'approccio illustrato ha riscosso notevoli risultati. 1.4.1 Riconoscimento e rilevamento di oggetti Le CNN risultano particolarmente adatte per il riconoscimento degli oggetti nelle immagini. Esiste un intero campo di studi, ovvero quello che viene denito Com- puter Vision, che si occupa di risolvere i problemi inerenti a tale ambito. Per identicare i contenuti di un'immagine, vengono utilizzate tecniche di riconosci- mento delle caratteristiche delle immagini. Queste sono tecniche provenienti dagli algoritmi di Computer Vision, in cui in fase iniziale di studio dell'immagine si com- prendono parti speciche dell'immagine con determinate caratteristiche ricercate. Queste caratteristiche sono gli elementi necessari ad individuare informazioni più dettagliate contenute nell'immagine. Inoltre, per facilitare il riconoscimento, l'algo- ritmo utilizzato eettua un'analisi strutturale e la segmentazione dell'immagine per comprendere la locazione delle regioni di interesse basandosi sulla disposizione dei colori nello spazio o sulle distribuzioni di intensità di colore in un'immagine. Per confrontare oggetti simili, o perlomeno per capire cosa essi rappresentino, è im- portante che l'algoritmo di Computer Vision eettui esperimenti con dati eterogenei e venga addestrato a dovere mediante le CNN. Tramite apprendimento non super- visionato, questi algoritmi sono addestrati con enormi set di dati etichettati, così da poter individuare con ecacia gli oggetti analizzati in un'immagine. Si ha avuto col tempo un progressivo miglioramento di tali algoritmi, permetten- do di passare dalla classicazione delle immagini (Image Classication), in cui viene semplicemente riconosciuto un oggetto in un'immagine, al rilevamento degli oggetti (Object Detection), in cui i vari oggetti presenti in un'immagine vengono inquadrati, evidenziati e classicati, in genere mediante Faster R-CNN, un tipo di rete neurale convoluzionale che permette di ottenere maggiore accuratezza e velocità delle classiche R-CNN [9]. 13
Figura 1.9: Schermata di un rilevatore di oggetti 1.4.2 Generazione di didascalie per immagini Le potenzialità delle CNN non si fermano qui, difatti grazie a queste è possibile anche superare i limiti del rilevamento di oggetti in maniera individuale. La nostra mente è abituata a contestualizzare ciascun oggetto nell'ambiente che lo circonda, enfatizzandone eventuali legami di posizione, al ne di ottenere una con- sapevolezza spaziale e concreta di ciò che ci circonda. Per esempio, alla visione di una tavola imbandita, diciamo che sono presenti piatti sul tavolo e bicchieri vicino ai suddetti piatti, non ci limitiamo ad osservare gli oggetti singolarmente. Per quanto ci risulti automatico ed estremamente semplice, questa è un'operazione parecchio complessa da compiere per un agente intelligente. La generazione di didascalie per immagini (Image Captioning) è ancora una vol- ta un compito delle CNN, però con il supporto del Natural Language Proces- sing, detto anche NLP, che permette il trattamento automatico delle informazioni in linguaggio naturale mediante analisi lessicale, grammaticale, sintattica e semantica. Figura 1.10: Generazione di didascalie per alcune immagini 14
1.4.3 Riconoscimento e sintesi vocale Come accennato precedentemente, a stretto contatto con le CNN vi possono lavorare anche le tecniche di NLP. Anche se di norma per il riconoscimento e la sintesi vocale vengono utilizzati modelli statistici, come ad esempio il modello di Markov nascosto [10], che è una catena di Markov in cui gli stati non sono osservabili direttamente, esiste anche una strategia che utilizza reti neurali profonde. Queste, rispetto al modello statistico, permettono di riconoscere parole singole e fonemi in maniera eciente e naturale, a discapito tuttavia del fatto che siano meno ecienti per compiti a lungo termine, come traduzioni di testi lunghi, dal momento che presenta una carenza di dipendenze temporali all'interno del modello. Adottan- do invece reti neurali ricorrenti è possibile rimediare a tale difetto. Le reti neurali per questa tipologia di problemi possono essere adottate anche per operazioni di pre-processing per poi fornire i risultati al modello statistico. Le continue ricerche sia sul campo del riconoscimento vocale (Speech Recognition) sia su quello della sintesi vocale (Speech Synthesis), accompagnate dall'ingente quantitativo di dati fornito da grandi aziende come Google [11] ed Apple [12], per- mettono una rapida evoluzione di tali approcci, avvicinandoci sempre più ad una soluzione che rendano gli agenti intelligenti capaci di comprendere ambiguità del linguaggio e di parlare nella maniera più naturale possibile. 1.4.4 Traduzione di testi Inne giungiamo ad uno dei problemi più complessi da arontare per gli algoritmi di Machine Learning, ovvero la traduzione dei testi. Tale problema viene arontato anche in questo caso dalle reti neurali articiali, per questa ragione l'approccio utilizzato per tale problema è detto Neural Machine Translation, che si può estendere anche alle reti neurali profonde con l'adozione di molteplici livelli nascosti nella rete. Le strutture formate da tale approccio risultano più semplici dei modelli statistici, eppure risultano ecienti, dal momento che si ottengono comunque risultati con l'utilizzo di un singolo modello anziché di modelli per il linguaggio, la traduzione e il riordinamento. Con l'adozione di reti neurali convoluzionali, accompagnati da approcci attention-based, si hanno risultati migliori anche per lunghe frasi. Per i notevoli vantaggi oerti, aziende come Google [13], Microsoft [14], Yandex [15] e IBM hanno investito su tale approccio, producendo modelli resi disponibili a tutti mediante servizi in cloud ed API. 15
Capitolo 2 Librerie per il Machine Learning e Core ML 2.1 Librerie adottate nel Machine Learning Finora è stato discusso delle caratteristiche e dei vantaggi delle reti neurali classiche e convoluzionali, nonché delle loro applicazioni pratiche. Adesso invece analizziamo le basi a supporto degli algoritmi dettati da questi approcci. A supporto di un tale campo di studi a così alto livello, bisogna utilizzare un lin- guaggio di programmazione di altrettanto alto livello, che non ci ponga i problemi di basso livello del linguaggio, bensì ci dia le potenzialità per poter costruire soluzioni ai problemi da arontare. Per questa ragione, nel campo del Machine Learning non si adottano linguaggi di programmazione con basi fortemente consolidate ma con caratteristiche di basso livello, come per esempio il C, bensì si adottano linguaggi di alto livello con notevoli livelli di astrazione, come ad esempio Python. Python è un linguaggio di programmazione ad alto livello, object-oriented ed inter- pretato avente origini relativamente recenti, tenendo conto di essere nato nel 1991. Questo gode dei pregi di dinamicità, dovuta per esempio alla tipizzazione dinami- ca, che lo rende comodissimo per la rappresentazione di dati, semplicità, potendo raggiungere livelli di complessità elevati con poche righe di codice, e essibilità, sup- portando vari paradigmi come l'object oriented e la programmazione funzionale. Non è un linguaggio consigliato per chi è alle prime armi in merito alla programma- zione, data la sua non immediata intuitività, ma si rivela uno strumento eccellente per la composizione di algoritmi come quelli di Machine Learning. Difatti, questo linguaggio è fortemente supportato sia da innumerevoli interfacce verso altri lin- guaggi, che quindi lo porta ad essere usufruibile in ogni ambiente, sia da librerie dedicate che permettono lo sviluppo di codice per il Machine Learning. 16
Tali librerie, anche quelle di recente uscita, sono già dei pilastri per chi si vuole aacciare in questo campo, mantengono notevolissimi livelli di adabilità e sono supportati e manutenuti sia da importanti aziende sia dagli utenti stessi, essendo tali librerie open source. Figura 2.1: Interesse nel tempo nelle migliori librerie di ML secondo Google Trends 2.1.1 TensorFlow Il team di ricerca Google Brain, specializzato nella ricerca nel campo del Deep Learning, rilasciò nel 2015 una nuova libreria in Python chiamata TensorFlow [16]. Questa è una libreria open source dotata di funzionalità per calcoli di matrice matematica e di strumenti per lavorare con le reti neurali articiali. TensorFlow utilizza gra di usso dei dati in cui i nodi rappresentano le operazioni matematiche, mentre gli archi dei tensori, ovvero array di dati multidimensionali, che scorrono tra i nodi, da cui l'origine del nome della libreria. A rimedio della sua natura intrinsecamente complessa, il sito di riferimento tensorow.org permette di seguire dei rapidi tutorial per gli utenti alle prime armi che permettono di utilizzare la libreria partendo con dei progetti pronti e che mostrino immediatamente le innite potenzialità oerte. La community di TensorFlow, composta da ben più di 1800 sviluppatori in aggiunta agli ingegneri e ricercatori di Google Brain, ha permesso l'esponenziale crescita di questa libreria, con più di 48000 commit in soli 3 anni. I modelli sviluppati con TensorFlow sono al servizio di innumerevoli aziende di alto prestigio, come Google stessa, eBay, Coca-Cola, NVIDIA, Dropbox e Intel. 2.1.2 PyTorch Nel 2002, una libreria open source di Machine Learning scritta in Lua fece il suo esordio. Questa libreria, una delle prime promosse in questo campo, fu chiama- ta Torch. Si strutturava essenzialmente in strumenti che fornissero la possibilità di generare tensori, così come sono presenti nell'esempio precedente, e reti neurali strutturati in maniera modulare attraverso il pattern Composite. 17
Nel 2016, sulle basi della libreria Torch, il team di ricerca della FAIR, ovvero della Facebook AI Research, rilascia una nuova libreria scritta in Python chiamata Py- Torch [17]. Questa libreria fornisce funzionalità di computazione tramite tensori con accelerazioni in GPU e di costruzione di reti neurali profonde con tecniche di dierenziazione automatica, che permettono calcoli più veloci dei gradienti. In par- ticolare, la tecnica adottata è chiamata Reverse-Mode Auto-Dierentiation: grazie a questa tecnica, è possibile modicare una rete neurale preesistente per ot- tenere comportamenti dierenti senza dover ricostruire da zero il modello di base, come descritto nel sito di riferimento pytorch.org. Rispetto a TensorFlow, PyTorch risulta più semplice da utilizzare, essendo conce- pito appositamente per fornire agli utenti un'esperienza di modellazione essibile e veloce. Anche se risulta meno maturo di TensorFlow, può contare sul supporto di quasi 1000 utenti su GitHub con più di 16000 commit in poco più di 2 anni. 2.1.3 Keras François Chollet, un ingegnere di Google, rilasciò nel 2015 una libreria open source scritta in Python chiamata Keras, con il ne di diondere uno strumento che fos- se allo stesso tempo capace di eettuare sperimentazioni rapide con le reti neurali profonde, ma anche user-friendly, modulare ed estensibile. Tale libreria presenta nu- merosi vantaggi, come elencati nel sito di riferimento keras.io, tra i quali il supporto di TensorFlow, tanto da essere preferita da parecchi utenti. Keras supporta sia reti neurali classiche, sia reti neurali convoluzionali e ricorrenti, con strumenti che permettono facilmente le operazioni degli strati nascosti, come per esempio il pooling. Ore API intuitive, di più alto livello e con maggiore astrazione rispetto a TensorFlow. Ciò nonostante, presenta una notevole essibilità, grazie alla possibilità di integrazione con librerie di più basso livello come TensorFlow. Anche in questo caso vi è una vasta community di circa 250000 utenti contribuenti al progressivo sviluppo di tale libreria. Ed anche per Keras vi è la ducia da parti di importanti aziende, come Netix, Uber e Yelp. Un vantaggio esclusivo di questa libreria è la semplice portabilità verso piattaforme eterogenee, tra le quali il Rasp- berry Pi, la Java Virtual Machine, il Google Cloud e le piattaforme iOS e Android. I modelli in Keras possono essere sviluppati in vari ambienti di backend per il Deep Learning, come quelli di Google e Microsoft, ma anche allenati con varie piattaforme hardware come le GPU di NVIDIA o le TPU di Google. Inne, tali ambienti sono supportati e manutenuti da Google, Microsoft, NVIDIA, Amazon, Uber e Apple. 18
2.2 Alcuni modelli signicativi Una volta dato uno sguardo alle librerie più gettonate per il Machine Learning, si può passare ad alcuni modelli di spicco, sia per la loro utilità sia per la loro ecacia. Difatti, grazie agli studi condotti da appassionati, ricercatori, ingegneri e sviluppatori, dopo poco tempo dal rilascio di tali librerie si aveva già a disposizione un quantitativo ingente di modelli per ogni tipo di utilizzo, dalla classicazione di immagini alla traduzione di testi. 2.2.1 Inception Nel 2014, i ricercatori di Google rivelano al mondo il loro modello denominato Goo- gLeNet, modello vincitore nell'ILSVRC 2014 [18], ovvero la "ImageNet Large Scale Visual Recognition Competition", contest in cui si sdano i migliori algoritmi di rilevamento oggetti e classicazione immagini. Figura 2.2: Struttura interna di GoogLeNet Il segreto della potenza e del successo di tale modello è racchiuso nella volontà di incrementare le qualità prestazionali del modello rendendo più complessi i ltri, ov- vero di fondere le basi delle CNN, i livelli convoluzionali, con quelle delle reti neurali multilivello, i percettroni, in grado di sintetizzare funzioni non lineari. Difatti, ciò è possibile in quanto i percettroni sono matematicamente equivalenti a convoluzioni 1x1. Insieme alla brillante intuizione dei ricercatori, che avevano constatato che alcune zone vuote localizzate in determinate zone del modello avrebbero contribuito all'incremento delle performance, si ha la costruzione dell'architettura di GoogLe- Net, chiamato Inception. Tale nome indica anche la presenza di moduli interni, detti appunto moduli di in- ception, i quali servono per distribuire le convoluzioni lungo ltri paralleli, che per- mettono durante l'addestramento di far scegliere al modello stesso di scegliere la dimensione di convoluzione più appropriata per l'occasione. 19
(a) Modulo di inception base, detto (b) Modulo di inception con riduzio- anche naïve ni dimensionali Nel 2015, in particolare nell'edizione seguente dell'ILSVRC, venne presentato un aggiornamento a tale modello, detto Inception v3, che presentava meno parametri dei modelli concorrenti, grazie ad una fattorizzazione dei livelli di convoluzione, 42 livelli di rete neurale profonda e la normalizzazione degli output [19]. Figura 2.4: Struttura interna di Inception v3 2.2.2 YOLO Joseph Redmon, supportato da Ali Farhadi, Professore Associato del Dipartimento di Computer Science and Engineering dell'Università di Washington, nel 2016 pub- blicò un articolo per il CVPR, ovvero la Conferenza su Computer Vision e Pattern Recognition, in cui espose il suo modello per il rilevamento di oggetti. Gli diede il nome "You Only Look Once", in forma abbreviata YOLO, si basa sulle reti neurali profonde ma si presenta con un approccio dierente dai modelli concorrenti [20]. Innanzitutto, dierentemente da quanto detto in precedenza, questo modello è stato sviluppato mediante un framework open source per le reti neurali in C e CUDA. Ma la dierenza essenziale sta nel fatto che, diversamente dall'approccio standard per il tracciamento di oggetti, ovvero la classicazione, l'approccio adottato è la regressione. Mentre per la classicazione si ricavano output nel campo discreto contrassegnati da etichette, per la regressione si ricavano output nel campo conti- nuo che indicano i valori esatti in uno spazio di possibili valori. In questo caso, 20
l'immagine viene separata in rettangoli delimitanti gli oggetti e probabilità per le classi associative. Una singola rete neurale predice entrambe le cose direttamen- te dalle immagini intere in una singola valutazione. Dal momento che è unica, si possono eettuare delle ottimizzazioni dirette sulla performance. Questo modello è estremamente veloce: può processare immagini in tempo reale a 45 frame al secondo, superando in prestazioni anche i modelli avanzati come quello delle R-CNN. Figura 2.5: Processo di rilevamento degli oggetti in YOLO Il modello si struttura in 24 livelli convoluzionali, seguiti da 2 livelli completa- mente connessi. È ispirato a GoogLeNet, tuttavia, al posto dei moduli di inception, sono presenti livelli di riduzione 1x1 seguiti da livelli convoluzionali 3x3. Figura 2.6: Struttura interna di YOLO Nel 2018, dopo aver presentato il suo modello aggiornato all'edizione successiva del CVPR e all'edizione del 2017 del TED1 , viene rilasciato l'aggiornamento deno- minato YOLOv3, dove il modello risulta più pesante e lievemente meno performante, ma più accurato e capace di riconoscere un numero maggiore di oggetti [21]. 1 TED 2017, "How computers learn to recognize objects instantly": https://www.ted.com/talks/joseph_redmon_how_a_computer_learns_to_recognize_objects_instantly 21
2.2.3 Watson Language Translator IBM ore un servizio sulla sua piattaforma cloud che, mediante REST API, permet- te agli utenti interessati di usufruire della traduzione di testi. Tale servizio è oerto da Watson, un sistema di intelligenza articiale della IBM, sviluppato da un team di ricerca diretto da David Ferrucci, in grado di rispondere a domande poste in lin- guaggio naturale [22]. Il suo nome è un omaggio al primo CEO dell'azienda Thomas J. Watson. Tale sistema nasce dal progetto DeepQA, in cui si adottano tecniche di NLP, Information Retrieval, ragionamento automatico e Machine Learning. Tra i tanti servizi disponibili, reperibili dal sito di riferimento ibm.com/watson, vi è Watson Language Translator2 , servizio che permette sia di adottare un modello già allenato, sia di costruire modelli personalizzati mediante dati di addestramen- to inclusi in le di Translation Memory Exchange, quindi con estensione .tmx. In genere i modelli personalizzati sono utili per domini specici o industrie, e per la generazione di questi si utilizzano due approcci dierenti: • Forced Glossary Customization: in questo caso si utilizza un vocabolario for- zato che traduca specici termini e costrutti nella maniera desiderata, quindi si ha un maggiore controllo sul comportamento di traduzione. • Parallel Corpus Customization: in questo caso vengono include traduzioni ag- giuntive nel modello base, pertanto è possibile adattarsi a determinati domini specici per tradurre nella maniera più appropriata. Figura 2.7: Traduzione con modello base e con tecnica di Parallel Corpus 2 "Language Translator Service by IBM Watson": https://www.youtube.com/watch?v=bYtVaQxJ994 22
2.3 Una nuova libreria: Core ML Durante l'edizione del 2017 della "Worldwide Developers Conference" di Apple (WWDC 2017) tenutasi a San Jose in California venne mostrata una libreria che ha suscitato particolare interesse. Questa venne introdotta col nome Core ML3 . Tale libreria, difatti, permette di importare nei progetti sviluppati in Swift, linguag- gio utilizzato per le applicazioni iOS, modelli allenati in maniera immediata, senza eventuali conoscenze approfondite sul campo delle reti neurali e del Machine Lear- ning in generale. Grazie a questa inattesa libreria, gli sviluppatori da tutto il mondo potevano integra- re i modelli costruiti con librerie per il Machine Learning, proprio come TensorFlow e Keras, all'interno delle loro applicazioni. Questo signicava sia diondere con estre- ma semplicità le potenzialità delle reti neurali anche ai neoti, sia rendere portatili e facilmente usufruibili dei servizi che altrimenti sarebbero stati relegati e connati nei computer dove venivano concepiti. Al momento del rilascio di tale libreria, numerosi modelli di reti neurali erano già stati sviluppati con le librerie prima citate, per questa ragione già si aveva una vasta gamma di scelta di modelli da adottare, inclusi quelli elencati in precedenza. Bisogna precisare però che Core ML non si limita a permettere agli utenti di im- portare modelli per le proprie app, ma è un vero e proprio framework contenente funzionalità di supporto per ulteriori framework e per la conversione di modelli provenienti da altre librerie. 2.3.1 Struttura e vantaggi del framework Core ML si presenta come una libreria dalle basi molto solide: infatti, questa libreria poggia sulle primitive di basso livello di Accelerate, BNNS e del framework dei Metal Performance Shaders. Il primo è la libreria di Swift contenente tutte le funzionalità ad alta ecienza della CPU di computazione di calcoli matematici complessi e di immagini, il secondo è una collezione di funzioni di utilità per le reti neurali e il terzo è una collezione di shader di computazione e graca ottimizzati per sfruttare a pieno le capacità della GPU del dispositivo. Core ML supporta a sua volta librerie con compiti maggiormente specici, ovvero Vision, Natural Language e GameplayKit: il primo è specializzato per l'analisi delle immagini, il secondo per il Natural Language Processing e il terzo per adottare gli alberi di decisione. 3 WWDC 2017, "Introducing Core ML": https://developer.apple.com/videos/play/wwdc2017/703 23
Figura 2.8: Straticazione delle dipendenze delle librerie in Swift Uno dei principali vantaggi di Core ML è quello di adottare modelli non solo semplici da utilizzare, ma anche di dimensioni sucientemente ridotte da poter essere portabili all'interno di una applicazione. Proprio per il fatto che tale libreria è scritta in un linguaggio per lo sviluppo di applicazioni iOS, un altro grande vantaggio che necessitava di essere introdotto è quello di essere ottimizzato per le performance su device, ovvero che minimizza la memoria utilizzata e il consumo di batteria. Inoltre, proprio perché le applicazioni vengono eseguite esclusivamente sui device e non sui computer, vi è una garanzia di protezione della privacy. Inne, c'è da constatare che le applicazioni sviluppate con Core ML sono appositamente server- independent, in quanto i modelli sono inclusi stesso nell'applicazione. La conversione dei modelli già esistenti è stata resa semplice ed accessibile a tutti grazie ai Core ML Tools, un insieme di strumenti in Python che permettono la conversione di modelli da librerie preesistenti come Keras a Core ML. Figura 2.9: Processo di costruzione del modello Core ML Esponiamo un semplice esempio illustrativo. Si ha a disposizione un modello Ke- ras chiamato MNIST.h5, modello che permette il riconoscimento di cifre all'interno di un'immagine. Come per il modello Keras, anche per il modello Core ML l'input 24
dovrà essere un'immagine e l'output una stringa contenente una cifra da 0 a 9. Con poche righe di codice in Python si ha il modello Core ML desiderato: Figura 2.10: Codice per la conversione tramite Core ML Tools Durante il WWDC 2018, esattamente un anno dopo, viene presentato l'ag- giornamento per la libreria Core ML, includendo notevoli novità ed aggiornamenti rilevanti. In questa seconda versione, vi è un notevole incremento in velocità (circa il 30%) e i modelli generati possono essere compressi del 75% grazie alla quantiz- zazione. Inoltre, viene oerto un ulteriore framework che permette di rimediare ad uno dei problemi di Core ML. Questo framework è stato chiamato Create ML4 . 2.3.2 Uno strumento intuitivo: Create ML Create ML è ciò che mancava alla libreria di Core ML: no a quella conferenza, infatti, era possibile convertire modelli provenienti da TensorFlow, PyTorch o Keras con gli strumenti oerti da Core ML, tuttavia non era possibile, senza una conoscen- za approfondita di tali librerie e di come siano strutturate le reti neurali, costruire un modello da zero direttamente in Swift dalla libreria Core ML. Create ML è una novità introdotta nel WWDC 2018 che permette di costruire mo- delli personalizzati mediante il semplice drag-and-drop delle immagini per il training e il testing set, andando a generare modelli del calibro dei classicatori di immagini. Con l'aggiunta di questo framework si ha un nuovo approccio per la generazione dei modelli Core ML, che porta a molti più sviluppatori, anche alle prime armi, a provare le potenzialità delle reti neurali e quindi a diondere maggiormente questo campo. Difatti, questo framework risulta tanto potente quanto semplice: attra- verso l'esecuzione di un paio di righe di codice per l'avvio dell'interfaccia graca di Create ML, è possibile poi proseguire nell'atto di generazione dei modelli attraver- so addestramento, che siano per classicare immagini, testi in linguaggio naturale oppure dati all'interno di tabelle. Inoltre è possibile modicare alcune opzioni di 4 WWDC 2018, "Introducing Create ML": https://developer.apple.com/videos/play/wwdc2018/703 25
addestramento, come le iterazioni, ed osservare i gradi di performance del modello costruito. Figura 2.11: Create ML supporta immagini, testi e dati strutturati come i le .csv 2.3.3 Ulteriori considerazioni su Core ML Core ML si presenta come una libreria di facile utilizzo e conveniente per gli svilup- patori iOS, tuttavia non è esente da difetti. Innanzitutto, Core ML non permette all'utente di costruire da zero con il linguaggio Swift una rete neurale, né di alle- nare i modelli sui dispositivi iOS stessi, tant'è che è principalmente uno strumento di conversione. Anche con l'introduzione di Create ML non si risolve del tutto il primo problema, essendo possibile mediante quest'ultimo generare da zero solo classicatori di immagini. Poi vi è un problema di compromessi: se da un lato è estremamente comodo avere il modello a portata di mano, senza la necessità di una connessione ad un cloud, d'altro canto si ha una notevole pesantezza delle app costruite con i modelli incorporati (si parla per esempio di poco più di 600 MB per l'applicazione che verrà mostrata in seguito). Inne, si può avere una tendenza alla diusione dell'approccio tramite reti neurali senza una reale comprensione delle strutture interne di cui sono composte, con la conseguenza di non saper agire in maniera ecace in presenza di comportamenti indesiderati, errori non riconosciuti o casi particolari non previsti. Ovviamente ciò non sminuisce il notevole lavoro di Apple nel voler diondere tale tecnologia in pieno fermento a quante più persone entusiaste possibile, anzi, questo intento rende la sua libreria un punto di svolta non solo per l'azienda stessa, ma anche per i vari competitor, che potranno e dovranno senz'altro trarre i vantaggi da Core ML, così come Apple deve trarne dalle loro librerie. Con l'introduzione di strumenti intuitivi per la composizione modulare delle reti neurali, Core ML non avrebbe nulla da invidiare alle altre librerie esistenti. 26
Capitolo 3 Reti neurali on-device: CoreL8 3.1 Approccio allo sviluppo L'entusiasmo portato da queste ultime novità ha portato allo scrittore di questa tesi a sperimentare queste innovative funzionalità. Difatti, carico dell'esperienza del primo anno di corso della Apple Developer Academy di Napoli e delle edizioni del 2017 e 2018 della WWDC, ho avuto modo di sviluppare una applicazione iOS che permettesse allo stesso tempo di riconoscere oggetti in tempo reale e di conoscerli in un set variegato di lingue. Così è nato CoreL8. Per realizzarlo, era innanzitutto necessario cercare i modelli giusti e comprenderli a fondo, per poi rivestire i modelli con le varie interfacce che caratterizzano l'app. Distinguiamo tutto ciò che era necessario in base alle funzionalità richieste: • Modello per il rilevamento di oggetti: YOLO • Modello per il riconoscimento di oggetti e la generazione di didascalie per immagini: Inception • Libreria e framework per il riconoscimento e la sintesi vocale: Speech e Natural Language • Modello per la traduzione dei testi: Watson Language Translator Come è possibile osservare, questi modelli servono proprio per risolvere i problemi inerenti alle applicazioni principali delle reti neurali elencati in precedenza, per cui in rete è già facilmente reperibile fonti performanti, anche se provenienti da autori dif- ferenti, che siano di natura open source oppure servizi a sottoscrizione. Analizziamo quindi con maggior dettaglio i modelli adottati. 27
3.1.1 Modelli adottati In precedenza abbiamo descritto vari modelli signicativi presenti e reperibili in rete, e proprio quei modelli rappresentano il punto di partenza dal quale iniziare a progettare. Partendo proprio dal primo modello elencato, è palese riconoscere la soluzione al problema nel modello pensato da Redmon, ovvero YOLO. In questo caso, modelli in Core ML di questa soluzione erano già pronti per l'uso, per cui bastava importare il modello all'interno del progetto e si aveva già una funzionalità potenzialmente pronta. Osservando il procedimento di importazione del progetto, difatti, ci si rende conto dell'estrema semplicità, dovuta sia all'intuitività di Core ML sia alle facilitazioni introdotte nell'ambiente di sviluppo Xcode, tra le quali la generazione automatica in Swift delle classi rappresentanti i modelli importati. Figura 3.1: Conversione del modello in codice Per quanto riguarda il secondo modello, si ha avuto un approccio lievemente dierente. Ovviamente, per il secondo problema si adotta una soluzione che faccia riferimento al modello Inception, date le sue prestazioni e la sua semplice reperi- bilità. Tuttavia, mentre per il modello per il riconoscimento di oggetti è risultato semplice reperire un modello già convertito in rete, per quello per la generazione di didascalie è risultato lievemente più complesso, data la complessità intrinseca del modello originale e del problema da risolvere, che possono facilmente portare ad errori nella conversione. Come compromesso, si è individuato un modello perfor- mante che però necessiti di continua manutenzione e limatura: difatti, si è adottato una coppia di modelli, uno per la codica delle immagini e uno per la sintesi delle didascalie in linguaggio naturale, provenienti da un modello Keras di Inception, che però si possono importare solo con l'ottenimento di un identicativo unico generato al caricamento di tali modelli in Fritz (sito di riferimento: fritz.ai ), una piattaforma che permette di ottimizzare e gestire modelli, seppur permetta anche l'utilizzo oine di tali modelli, prerogativa della libreria di Core ML. 28
Figura 3.2: Interfaccia di gestione del modello in Fritz Per il terzo problema da arontare, l'adozione di modelli esterni non risultava necessario: ricordiamo infatti che Core ML supporta anche la libreria di Natural Language, ed inoltre nelle librerie di base di Swift sono già presenti funzionalità per gestire la sintesi vocale, per cui le potenzialità per risolvere tale problema erano già sedimentate e solide. Considerando che tra le funzionalità della libreria chiamata AVFoundation vi è una classe denominata AVSpeechSynthesizer, si intuisce che la questione della sintesi vocale risulta già risolta. Per quanto riguarda il riconoscitore, si utilizza un ulteriore framework di Swift chiamato Speech, contenente funzionali- tà per la conversione dal parlato allo scritto (Speech-To-Text). Inne, per quanto riguarda l'ultimo problema, si deve adottare quello che risulterà poi essere il modello più complesso di tutti. Difatti, parliamo di una delle applica- zione più complesse portate a termine nora nel mondo delle reti neurali profonde. Tradurre un testo di un dato linguaggio in un linguaggio desiderato implica non soltanto l'ingentissima mole di dati del training set dovuta al numero di parole per lingua e al numero di lingue, ma anche una intelligenza tale da comprendere in maniera corretta la semantica di un testo, trovare i costruttilessicali equivalenti nel linguaggio desiderato e fare il tutto in un tempo ragionevole. Al momento dello sviluppo dell'applicazione, non esistevano modelli open source che potessero rimediare al problema della traduzione, tuttavia, come detto in preceden- za, IBM ore la possibilità agli iscritti alla piattaforma online di usufruire dei suoi servizi, tra cui quello perfetto per questa situazione: Watson Language Translator. Una volta sottoscritto al servizio ed individuato una API in Swift per usufruire di tale servizio, l'implementazione è risultata molto più semplice della ricerca. 29
Puoi anche leggere