Introduzione

Da almeno un paio d'anni sono disponibili in rete vari servizi di Machine Learning (Amazon, Google, IBM, Microsoft ecc...). Dopo averne osservati diversi, mi sembra di poterli classificare:

  • Per specificità del compito:
    • rivolti a un compito specifico (riconoscimento del parlato, dei testi, delle immagini eccetera);
    • generali, per programmatori o ricercatori (spesso tramite soluzioni IaaS/PaaS, più di rado FaaS).
  • Per competenza richiesta:
    • è necessaria una profonda conoscenza dell'argomento (indipendentemente dall'essere o meno un sistema gestito);
    • può bastare una competenza di base.

AWS Rekognition è un servizio specifico per il riconoscimento delle immagini.

Sulla sua summenzionata homepage, si legge che:

Amazon Rekognition semplifica l'aggiunta di funzionalità di analisi di immagini e video alle applicazioni. È sufficiente fornire un'immagine o un video all'API Rekognition e il servizio può identificare oggetti, persone, testo, scene e attività, oltre che rilevare eventuali contenuti non appropriati. Amazon Rekognition offre inoltre analisi facciale ad elevate precisione su immagini e video. È possibile rilevare, analizzare e confrontare volti per diversi casi d'uso, ad esempio verifica degli utenti, conteggio delle persone e pubblica sicurezza.

Cani e falsi negativi

Rekognition può essere utilizzato sia tramite API che, per delle prove veloci - quantomeno per le immagini - attraverso una semplice interfaccia web che permette rapidamente di farsi un'idea del suo funzionamento.

Per testarne subito la sua qualità, ho pensato di utilizzare un'immagine che ritenevo sia difficile che simpatica: il ritratto di un cane realizzato da sd_casting, un fotografo che seguo su Instagram.

15803399_404323613242727_2792188634613153792_n

Chiedendo a Rekognition di classificare questa immagine, il suo risultato è davvero molto buono:

Animal 88.1 %
Canine 88.1 %
Dog 88.1 %
Mammal 88.1 %
Pet 88.1 %
Pointer 88.1 %

Riconosce con la stessa confidenza tutti i primi risultati e si spinge persino a indicare “pointer” 😃.

Nel JSON di uscita, c'è una proprietà importante:

{
    "Labels": [
        {
            "Name": "Animal",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Canine",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Dog",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Mammal",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Pet",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Pointer",
            "Confidence": 88.14775848388672
        },
        {
            "Name": "Dirt Road",
            "Confidence": 73.05170440673828
        },
        {
            "Name": "Gravel",
            "Confidence": 73.05170440673828
        },
        {
            "Name": "Road",
            "Confidence": 73.05170440673828
        },
        {
            "Name": "Rock",
            "Confidence": 61.93537902832031
        }
    ],
    "OrientationCorrection": "ROTATE_0"
}

Come potete notare, con OrientationCorrection prende anche in considerazione l'orientamento dell'immagine.

Ho quindi pensato di vedere come si sarebbe comportato capovolgendo l'immagine e convertendola in una scala di grigi.

152709077729283317

Il risultato è inferiore ma ancora molto buono.

Animal 74.4 %
Canine 74.4 %
Dalmatian 74.4 %
Dog 74.4 %
Mammal 74.4 %
Pet 74.4 %

Lo scorso anno, la classificazione in questo caso era di “Dirt Road”, quindi credo anche grazie a OrientationCorrection (che ora vale ROTATE_180) il servizio è comunque in grado di etichettare correttamente il soggetto.

I multipli di un angolo retto però sono banali: vediamo come si comporta con una rotazione intermedia. In questo caso, ho usato un software che riempie con del nero le aree scoperte dalla rotazione, creando una specie di cornice.

dog45

Diamond 95.5 %
Gemstone 95.5 %
Jewelry 95.5 %
Ornament 95.5 %
Triangle 76 %
Hole 70.3 %

Rekognition è estremamente sicuro (95.5%!) che si tratti di un diamante. 😃 La cornice/artefatto con una struttura interna di pietre ha completamente mimetizzato il cane che tutti noi siamo in grado di continuare a riconoscere e, inoltre, non è più in grado di identificare la rotazione: OrientationCorrection ora vale ROTATE_0.

Infine, ho pensato di aiutarlo levando la “cornice”.

dog45clean

Con una certa sorpresa, ho osservato che il risultato era a questo punto il peggiore possibile: No labels found (!).

Conclusioni

Pur essendo presenti in letteratura diversi approcci per trattare l'invarianza alle rotazioni e, in generale, altre trasformazioni algebriche - si veda per esempio questa raccolta di link su Stack Overflow - probabilmente i progettisti di AWS hanno cercato un buon compromesso tra rapidità, costi e prestazioni per un uso di massa ma comunque molto potente e versatile: per rendersene conto, basta leggere la grande quantità di manipolazioni che le API rendono disponibili, facendo di Rekognition comunque un servizio eccellente.

Questo articolo è nato come spunto dalla lezione su IoT e Machine Learning che, con Alberto Bert, ho tenuto il 24 giugno 2018 all'interno del progetto “Talenti per l'Impresa”, finanziato dalla Fondazione CRT.

Possiamo certamente affermare che non esista ancora un'intelligenza artificiale generica - quantomeno tra quelle disponibili - ma ci sono società che sono pronte a dare una mano… 😃

--

Foto di copertina “Woman with hair over face lying down on cracked desert floor” di Oscar Keys su Unsplash