Tutorial sul deployment di Edge per iOS (Core ML)

Cosa creerai

In questo tutorial scaricherai un modello Core ML personalizzato (.mlmodel) esportato. Successivamente, eseguirai un'app per iOS predefinita che utilizza il modello per identificare le immagini di fiori.

immagine dell'app modificata

Obiettivi

In questa procedura dettagliata introduttiva end-to-end, utilizzerai il codice per:

  • Eseguire un modello Core ML preaddestrato in un'app per iOS.

Panoramica

Con il framework Core ML, puoi utilizzare un modello di machine learning addestrato per classificare i dati di input. Il framework Vision funziona con Core ML per applicare modelli di classificazione alle immagini e per pre-elaborare queste immagini per rendere le attività di machine learning più semplici e affidabili.

Prima di iniziare

Scarica un modello Edge generale

  1. Scarica una cartella contenente un modello Core ML preaddestrato. Utilizzerai questo modello in questo tutorial.

  2. Decomprimi il file ZIP scaricato.

  3. Prima di iniziare il tutorial, vai alla directory principale del progetto:

    cd ClassifyingImagesWithVisionAndCoreML
    Eseguirai tutti i seguenti esempi di codice da questa directory.

Addestra ed esporta un modello Edge personalizzato

Prima di continuare, completa la guida rapida ai modelli di dispositivi Edge con le seguenti modifiche:

  • Utilizza il set di dati Flowers fornito oppure il tuo.
  • Nel passaggio Addestra il tuo modello, seleziona l'opzione per il modello Edge.
  • Nel passaggio Esporta il modello, segui le istruzioni dettagliate per esportare un modello Core ML.

Utilizzerai il file model.mlmodel Flower Core ML risultante per eseguire una versione personalizzata dell'app per iOS esistente.

Configura l'app per iOS

L'app demo per iOS richiede diversi strumenti aggiuntivi:

  1. Xcode
  2. Strumenti a riga di comando Xcode

Scarica Xcode

Utilizza il seguente link per scaricare Xcode sulla tua macchina.

Installa strumenti a riga di comando Xcode

Installa gli strumenti a riga di comando Xcode eseguendo questo comando nella riga di comando:

xcode-select --install

Apri il progetto

Apri il progetto con Xcode. Puoi aprire il progetto dalla riga di comando o usando la console di Google Cloud Platform. Per aprire il progetto utilizzando la riga di comando, esegui questo comando:

open ./Vision+ML\ Example.xcodeproj

Esegui l'app originale

Per avviare l'app nel simulatore e visualizzare le annotazioni delle immagini, procedi nel seguente modo:

  1. Avvia l'app selezionando il pulsante riproduci Icona di riproduzione xcode nell'angolo in alto a sinistra della finestra di Xcode.
  2. Fornisci un'immagine di previsione all'app. Puoi fornire un'immagine in due modi:
    • Scattare una foto con la fotocamera del dispositivo oppure
    • aggiungi foto alla raccolta fotografica del dispositivo trascinandole nella finestra del simulatore

L'app mostra le due categorie di classificazione principali in ordine di punteggio di affidabilità che il modello assegna a ciascuna.

Il risultato dovrebbe mostrare annotazioni simili alle seguenti immagini:

Classificazioni utilizzando l'app originale generica: mobili, frutta, piante

Esegui l'app personalizzata

L'app originale utilizza un modello Core ML che classifica le immagini in una delle 1000 classi ImageNet generiche (animali, frutta, mobili, piante e così via), utilizzando il modello MobileNet standard.

Modifica l'app in modo che utilizzi il modello riaddestrato con le seguenti categorie di immagini floreali personalizzate:

  • margherita
  • denti di leone
  • rose
  • girasoli
  • tulipani

Aggiungi i file del modello al progetto

  1. Scarica il modello floreale personalizzato (model.mlmodel Core ML esportato) che ottieni completando la guida rapida sui modelli di dispositivi Edge. I file model.mlmodel e dict.txt dell'esportazione del modello Core ML si troveranno nel percorso di Google Cloud Storage specificato.

  2. Rinomina il modello personalizzato in AutoML.mlmodel.

  3. Elimina il modello esistente dal progetto (MobileNet.mlmodel).

  4. Aggiungi il modello personalizzato al progetto nella cartella Vision+ML Example.

    trascina il modello personalizzato nell'immagine Xcode

  5. Modifica la riga 30 in ImageClassificationViewController. Rimuovi:

    let model = try VNCoreMLModel(for: MobileNet().model)

    Sostituisci questa riga con:

    let model = try VNCoreMLModel(for: AutoML().model)

Esegui l'app del modello personalizzato

Per riavviare l'app nel simulatore, seleziona il pulsante riproduci Icona di riproduzione xcode nell'angolo in alto a sinistra della finestra di Xcode.

Per testare le modifiche, aggiungi file immagine dalla directory flower_photos/ e ottieni previsioni.

I risultati dovrebbero essere simili a questi:

immagine dell'app modificata

Per provare il modello, aggiungi le immagini dei dati di addestramento scaricate in precedenza o scaricale da una ricerca Google da utilizzare per la previsione.

Come funziona?

Ora che l'app è in esecuzione, controlla il codice specifico del framework CoreML e Vision.

Configura Vision con un modello Core ML

Core ML genera automaticamente una classe Swift che consente di accedere facilmente al modello ML.

In questo esempio, Core ML genera automaticamente la classe MobileNet da MobileNetmodel.

  • Ottieni l'istanza del modello con il seguente codice:

    let model = try VNCoreMLModel(for: MobileNet().model)
  • Crea la richiesta Vision con il modello e il gestore del completamento precedenti. Il gestore di completamento gestisce la risposta di previsione dal modello.

  • La console di Google Cloud Platform deve essere aggiornata nel thread principale:

    let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in
    DispatchQueue.main.async {
    guard let results = request.results else {
    self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)"
    return
    }
    

results sarà sempre in VNClassificationObservation, come specificato dal modello Core ML in questo progetto.

let classifications = results as! [VNClassificationObservation]
})

Il gestore di completamento della richiesta Vision indica se la richiesta è andata a buon fine o ha generato un errore. Se l'operazione va a buon fine, la relativa proprietà dei risultati contiene VNClassificationObservation oggetti che descrivono le possibili classificazioni identificate dal modello ML.

  1. Un modello ML elabora le immagini di input in proporzioni fisse, ma le immagini di input possono avere proporzioni arbitrarie, quindi Vision deve ridimensionare o ritagliare l'immagine per adattarla. Per ottenere risultati ottimali, imposta la proprietà imageCropAndScaleOption della richiesta in modo che corrisponda al layout dell'immagine con cui è stato addestrato il modello.

    request.imageCropAndScaleOption = .centerCrop
  2. Crea VisionRequestHandler con l'immagine di input utilizzando il seguente codice:

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. Richiama la funzione perform del gestore passando l'oggetto della richiesta.

    do {
    try handler.perform([self.classificationRequest])
    } catch {

    Questo gestore rileva gli errori generali di elaborazione delle immagini. Il gestore dei completamenti processClassifications(_:error:) di classificationRequest rileva gli errori specifici dell'elaborazione della richiesta.

    print("Failed to perform classification.\n\(error.localizedDescription)")
    }

Passaggio successivo

Hai completato una procedura dettagliata di un'app di classificazione dei fiori per iOS utilizzando un modello Core ML esportato da AutoML Vision Edge. Hai utilizzato un modello Core ML addestrato per testare un'app generale di classificazione delle immagini prima di modificarla e ottenere annotazioni di esempio personalizzate relative ai fiori. Poi hai esaminato il codice specifico Core ML per capire le funzionalità sottostanti.

Le risorse seguenti possono aiutarti a saperne di più sui modelli Core ML e su AutoML Vision Edge: