Febbraio 2019

Volume 34 Numero 2

Il presente articolo è stato tradotto automaticamente.

[Machine Learning]

Apprendimento automatico sul bordo: integrazione di Azure Machine Learning e Azure IoT Edge

Dal modo Ted | Febbraio 2019

Viene definito il bordo come una piattaforma che non sia nel cloud di calcolo. E può variare da Azure Stack (un cluster di computer che funge da mini-Azure), a un server gateway potenti, a un dispositivo più piccolo, ad esempio un sensore o un dispositivo Raspberry Pi. Frigoriferi anche e altre Appliance hanno sufficiente capacità di elaborazione al giorno d'oggi da prendere in considerazione dispositivi perimetrali. La richiesta di verifica viene illustrato come applicare l'intelligenza artificiale (AI) e machine learning (ML) per i dati che non è possibile renderlo nel cloud, che sia dovuto a sovranità dei dati, privacy, della larghezza di banda o altri problemi.

James McCaffrey ha un ottimo articolo, ovvero "Machine Learning con i dispositivi IoT sul bordo" (msdn.com/magazine/mt847186), nel numero di luglio 2018 di MSDN Magazine nel training di Machine Learning i modelli e l'utilizzo di Microsoft Embedded Learning libreria (ELL ) per distribuire un modello ottimizzato in dispositivi perimetrali di piccole dimensioni. In questo articolo, l'obiettivo è enterprise strumenti e servizi per il training del modello, gestire e distribuire in un contenitore con Azure Machine Learning. Con Azure IoT Edge, si apprenderà come configurare una pipeline di dati che usano il modello e come distribuirla nel dispositivo edge. Verrà illustrato un esempio in cui il servizio visione artificiale personalizzato utilizzabile per il training di un modello che viene distribuito con Azure IoT Edge. Le iterazioni del modello possono essere registrate con Azure Machine Learning.

Scenario di neve Leopardato

Il Trust Leopardato Snow (snowleopard.org) è dedicato a "comprendere meglio il minacciate leopardato neve e per proteggere il team cat in collaborazione con le community che condividono il habitat." Ciò avviene configurando fotocamere tra 200 miglia quadrato per tenere traccia che per snow sono nell'area. Vengono distribuite le fotocamere e quindi vengono raccolti i dati tra la camera e dopo un determinato periodo di tempo. Questi fotocamere sono attivati dal movimento, che può produrre alcuni sorprese, ad esempio i tempo gli anni fa quando i ricercatori sviluppato un rullino solo per trovare le foto di un albero influenzando al vento.

Con fotocamere digitali, è possibile acquisire altre immagini, ma anche in questo caso solo il 5% delle immagini contengono per neve. Potrebbero richiedere ricercatore umana più di 200 ore per vagliare le immagini per identificare quelle contenenti per neve. Un uso molto migliore di tempo del ricercatore eseguire il training di un algoritmo di Machine Learning per identificare per neve.

Algoritmi di Machine Learning vengono denominati "informazioni", anziché essere programmati in modo esplicito. Ad esempio, se si crea un'app per prevedere il prezzo di una casa in base a fattori quali il numero di camere da letto, metri quadrati e altri fattori, è impossibile in modo esplicito programmarlo aggiungendo regole o cercandolo in alcuni database che contiene già la risposta. Se l'utente immette il numero di camere da letto tra due e quattro e della casa ha un determinato metri quadrati, viene restituito un determinato prezzo.

Invece di risposta di programmazione, è possibile usare un'equazione molto semplice, ad esempio:

y = w1 * x1 + w2 * x2 + b

In questo esempio x1 è il numero di camere da letto e x2 metri quadrati. Basati sui dati in cui è presente il prezzo di vendita ultimo di un numero di case, è possibile "eseguirne il training" individuando w1, S2 e b più appropriato per i dati. Dopo il training, il modello di Machine Learning è statico, se è necessario assegnargli lo stesso input due volte, risponderà con lo stesso output ogni ora. Tuttavia, è possibile continuare a evolversi dell'algoritmo, eseguirne il training sui nuovi dati, quindi aggiornare l'algoritmo, che è essenzialmente l'individuazione di nuovi valori per s1, S2 e b.

Apprendimento avanzato è un subset di Machine Learning. Invece di un'equazione lineare semplice come quello appena descritto, usiamo reti neurali artificiali o reti neurali profonde (Dnn) costituiti da più neuroni o nodi tra molti livelli. L'obiettivo consiste nel simulare il modo di che lavorare cervello con le domande. Ogni neurone esegue un calcolo basato su dati, quali parti delle immagini, e se il risultato soddisfa una determinata soglia, viene attivato il neurone.

Questo input viene quindi inserito nel livello successivo. Si supponga, ad esempio, avevamo un'immagine di un numero scritto a mano e sono disponibili due neuroni. Il primo neurone analizza la metà superiore dell'immagine e il secondo aspetto nella parte inferiore della metà. Se il primo neurone viene rilevato un cerchio, viene attivato. In basso vede una linea verticale, verrà attivata. Per il numero di otto, attiverà il neurone di prima, ma non il secondo. Tuttavia, per il numero di nove, attiverà il neurone di primo e il secondo attiverà anche. È quindi possibile sfruttare tali informazioni e concludere che vale il numero di nove.

Componenti di Azure

Prima di continuare, è importante essere a conoscenza dei componenti di stack di Azure e di Machine Learning. tra cui:

Servizio visione artificiale personalizzato: Questo servizio fa parte della piattaforma di servizi cognitivi ed è possibile facilmente eseguire il training di un modello di intelligenza artificiale caricando immagini e tag manualmente. Il modello può essere esportato in molte piattaforme, ad esempio iOS (CoreML), TensorFlow o ONNX: e salvato nel formato .pb, basato su Protocol Buffers o protobufs. Protobufs sono descritti da Google come relativo "meccanismo indipendente dal linguaggio, indipendente dalla piattaforma, estendibile per la serializzazione di dati strutturati, ovvero considerare XML, ma più piccolo, più semplice e veloce" (developers.google.com/protocol-buffers).

Azure Machine Learning: Questo servizio è una piattaforma di analisi scientifica dei dati end-to-end come un servizio cloud che è possibile usare per sviluppare e distribuire modelli di Machine Learning. Usa il servizio di Azure Machine Learning, è possibile tenere traccia dei modelli quando si compilano, eseguire il training, distribuzione e gestirli, tutto a vasta scala offerti dal cloud.

Hub IoT di Azure e IoT Edge: IoT Hub di Azure consente di connettere, monitorare e controllare miliardi di asset di Internet delle cose (IoT). Azure IoT Edge è una piattaforma gestita in remoto da un IoT Hub. Consente l'analisi dei dati nei dispositivi anziché nel cloud tramite lo spostamento di parti del carico di lavoro e il bordo. I dispositivi possono dedicare meno tempo all'invio di messaggi al cloud e che possa agire in modo autonomo e rapidamente alle modifiche.

Utilizzo di questi componenti il Trust Leopardato Snow possibile distribuire 30 fotocamere attivato il movimento, ognuna collegata a PC relativamente poco costoso. Si userà Azure IoT Edge per distribuire il modello di neve leopardato a un PC che simula uno dei dispositivi.

Classificazione delle immagini sul bordo

A questo punto è possibile usare i passaggi coinvolti nel provisioning delle risorse di Azure necessarie e per la compilazione della soluzione. Forniremo altri dettagli sulle quali viene eseguito il provisioning e ciò che avviene nel codice nella sezione seguente. Per iniziare, occorre:

• Una sottoscrizione di Azure. Non hai uno? Creare un account gratuito presso azure.microsoft.com/free.

• Visual Studio Code (code.visualstudio.com).

• VM di Linux Ubuntu 16.04 x64 da usare come dispositivo IoT Edge.

• Le risorse di azure, tra cui un'area di lavoro di Azure Machine Learning, un IoT Hub di Azure e un account CustomVision.ai.

Esempio di distribuzione modello • alla aka.ms/visedge.

Creazione di un'area di lavoro di Azure Machine Learning crea anche un account di archiviazione e il registro contenitori di Azure, che è possibile usare per archiviare le immagini Docker per la distribuzione nei dispositivi IoT Edge. Iniziare scaricando e installando gli strumenti di Visual Studio Code per intelligenza artificiale da (aka.ms/vscodetoolsforai). Dopo l'installazione, fare clic sul simbolo di Azure a sinistra sulla barra delle attività Visual Studio Code.

Ora installare il SDK di Azure Machine Learning aprendo il riquadro comandi usando Ctrl + MAIUSC + P e digitare "Installa SDK di Azure Machine Learning". Nella finestra del terminale integrata, specificare l'interprete Python da usare o premere INVIO per usare l'interprete Python predefinito.

Successivamente, creare un'area di lavoro di Azure Machine Learning facendo clic sull'icona Azure nella barra delle attività di Visual Studio Code. Azure: Viene visualizzato nella barra laterale di Machine Learning e quindi fare clic sulla sottoscrizione di Azure e selezionare Crea area di lavoro. Nell'elenco visualizzato, selezionare un gruppo di risorse esistente dall'elenco oppure crearne uno nuovo usando la procedura guidata nel riquadro comandi. In questo esempio, utilizziamo "iot-fotocamera-group".

Nel campo, digitare un nome univoco e non crittografato per la nuova area di lavoro. Premere INVIO e la nuova area di lavoro verrà creata. Viene visualizzato nell'albero sotto il nome della sottoscrizione.

Creare un IoT Hub, aprire Visual Studio Code e facendo clic sul pulsante delle estensioni nel riquadro di sinistra (Ctrl + MAIUSC + X). Cercare "Azure IoT Toolkit" e installare l'estensione. È necessario un computer Linux da usare come dispositivo edge. È possibile usare una macchina virtuale sul PC, in Azure o altrove, è possibile accedere.

Per iniziare, fare clic sul pulsante Esplora sulla barra attività sulla sinistra e individuare la voce "Dispositivi dell'Hub IoT di Azure". Fare clic su "Ulteriori azioni" (tre punti) e selezionare "Crea l'IoT Hub".

A questo punto scegliere una sottoscrizione, quindi scegliere il gruppo di risorse ("iot-fotocamera-group") precedenti o crearne uno nuovo. Successivamente, scegliere un'area e scegliere un piano tariffario. È possibile usare il livello F1 gratuito, ma se un livello F1 dell'IoT Hub esiste già, allora sarà necessario creare un livello S1. Infine, specificare un nome, ad esempio "-fotocamera dall'hub iot." nell'IoT Hub

È possibile registrare un dispositivo IoT Edge tramite l'aggiunta di una voce all'hub IoT. Ciò genererà una stringa di connessione immesso nel dispositivo IoT Edge (in questo caso, la VM Linux) in modo che può connettersi all'hub IoT.

A tale scopo, prima di tutto fare clic sul menu "Altre azioni" (tre punti) in "Dispositivi dell'Hub IoT di Azure" e scegliere "Dispositivo IoT Edge crea". Non fare clic su "Crea dispositivo". Quindi immettere un nome per il dispositivo perimetrale, ad esempio fotocamera-pc-01. Infine, copiare il valore di connectionString per la voce che appena creata. È necessario specificare per dispositivo edge.

In futuro, è possibile fare clic su "Dispositivi dell'Hub IoT di Azure" e quindi "selezionare l'IoT Hub". Sarà necessario accedere ad Azure, scegliere la sottoscrizione che è stato effettuato il provisioning in IoT Hub e quindi selezionare l'IoT Hub, ma è possibile visualizzare tutte le stringhe di connessione associate con i dispositivi.

Configurazione di dispositivo IoT Edge

Il modo più semplice per simulare un dispositivo perimetrale è usare una macchina virtuale preconfigurata (aka.ms/edgevm). Quando viene avviata la macchina virtuale, viene installato il runtime di Azure IoT Edge più recenti e le dipendenze. Dopo il provisioning della macchina virtuale, accedere al suo interno ed eseguire questo comando nella riga di comando con la stringa di connessione per il dispositivo che è registrato con IoT Edge (la stringa di connessione è il valore di connectionString copiata in precedenza):

/etc/iotedge/configedge.sh "<your_iothub_edge_connection_string>"

Se si desidera configurare la propria macchina virtuale Ubuntu 16.04 x64 come il dispositivo perimetrale, controllare le informazioni: aka.ms/edgevm.

Soluzione di classificazione di immagini

A questo punto è possibile compilare la soluzione di classificazione di immagini. Clonare l'esempio di Git (aka.ms/visedge). Si userà il PC di Linux x64 come computer di bordo. Procedere come descritto di seguito:

• Aggiornare il file con estensione env con i valori per il registro contenitori e assicurarsi che il motore Docker possa accedervi.

• Deployment.template.json rinominarlo in deployment.template.RPI.json.

• Deployment.template.test amd64.json rinominarlo in deployment.template.json.

• Creare l'intera soluzione facendo clic deployment.template.json il file e selezionando Build IoT Edge soluzione (ciò può richiedere un po' di tempo, in particolare, di compilazione numpy e cuscino).

• Distribuire la soluzione in un dispositivo, facendovi config/deployment.json, selezione di Crea distribuzione per dispositivo di IoT Edge e scegliere il dispositivo di destinazione.

• Monitorare i messaggi inviati al Cloud facendo clic su un dispositivo dall'estensione di Visual Studio Code IoT Edge e la selezione di Start Monitoring D2C Message.

Per x64 versione della soluzione, questi passaggi distribuire due moduli:

Acquisizione con fotocamera: Questo consente di acquisire il flusso video da una fotocamera USB e invia i frame per il modulo di classificazione di immagini. Il risultato viene inviato a edgeHub, che possono inoltrare come messaggio all'IoT Hub.

Visione artificiale personalizzato: Questo servizio Web viene eseguito in locale tramite HTTP e accetta un'immagine e classificato. È stata creata tramite il sito Web di visione artificiale personalizzato (customvision.ai). Il modello nella soluzione classifica se un'immagine contenente un apple o una banana.

Il modulo di acquisizione della fotocamera può inviare messaggi a di edgeHub usando il SDK di Azure IoT Edge. È possibile creare moduli personalizzati come contenitori Docker e usare il SDK per comunicare con edgeHub.

Per il servizio visione artificiale personalizzato è possibile usare il modello esistente nella soluzione oppure è possibile passare a customvision.ai e il training di un modello personalizzato. Per creare il classificatore leopardato neve, caricare le immagini di neve per il servizio visione artificiale personalizzato. È anche possibile caricare le immagini di altri animali che può risultare in habitat leopardato neve. È sufficiente contrassegnare le immagini e fare clic sul pulsante di training per il training del modello. I file di modello e l'etichetta vengono esportati come file con estensione txt e .pb, rispettivamente, che è possibile usare per sostituire quello presente nella soluzione.

Servizio visione artificiale personalizzato Usa il trasferimento dell'apprendimento, che utilizza una rete neurale profonda esistente e consente di estrarre le funzionalità da un'immagine. Quindi esegue il training di un classificatore sui dati (in questo caso, le immagini che è stato caricato e i tag assegnate dall'utente).

Per illustrare trasferimento induttivo, si supponga che si desidera eseguire il training di un cane analisi bomba, ovvero un Shepherd tedesco, ad esempio. Se si adotta un Shepherd tedesco 2 anni, non conosca bomb. Questa classe dispone di "infrastruttura" per rilevare bomb, con la potente assimilata smell. È possibile avviare il Shepherd tedesco di training presenta lo sniffing una bomba ed impartendogli che si tratta di una bomba, quindi assegnargli smell un'altra, ad esempio quella di un fiore e dire che non si tratta di una bomba. Ripetere questo passaggio per vari tipi di bomb e altri odori e dopo alcuni mesi e un numero elevato di reazioni, manualmente di disporre un cane analisi bomba. Training di Shepherd tedesco non è difficile. La parte difficile è necessario che un Shepherd tedesco.

Reti neurali profonde, ad esempio 50 ResNet, concepimento v3, YOLO e VGG sono essenzialmente Shepherds tedesco. Si sta complessi modelli di intelligenza artificiale che accettano un'immagine ed estrarre le funzionalità da quest'ultimo, modo che un Shepherd tedesco estrae segnali da un odore. Proprio come il numero di camere da letto e di metri quadrati di una casa sono funzionalità che possono essere usate per prevedere un prezzo, le funzionalità estratte vengono inviate a un classificatore. Questo classificatore è quello che devi eseguire il training, che eseguirà quindi la stima di fatto un leopardato snow sia nell'immagine o meno. La funzione di classificazione può essere un semplice test di regressione logistica, supportare Support vector machine o qualsiasi altro classificatore. La bellezza di transfer learning è l'estrazione di funzioni con la rete neurale profonda, con conseguente utili funzionalità che può essere usata per classificare le immagini in modo molto accurato.

Figura 1 fornisce il codice per acquisire un'immagine e stimare quali sono le novità usando il modello di intelligenza artificiale.

Figura 1 codice di stima

from urllib.request import urlopen

import tensorflow as tf

from PIL import Image
import numpy as np
# import scipy
# from scipy import misc
import sys
import os  

filename = 'model.pb'
labels_filename = 'labels.txt'

network_input_size = 227
mean_values_b_g_r = (0,0,0)

size = (256, 256)
output_layer = 'loss:0'
input_node = 'Placeholder:0'

graph_def = tf.GraphDef()
labels = []

def initialize():
  print('Loading model...',end=''),
  with tf.gfile.FastGFile(filename, 'rb') as f:
    graph_def.ParseFromString(f.read())
    tf.import_graph_def(graph_def, name='')
  print('Success!')
  print('Loading labels...', end='')
  with open(labels_filename, 'rt') as lf:
    for l in lf:
      l = l[:-1]
      labels.append(l)
  print(len(labels), 'found. Success!')
  
def crop_center(img,cropx,cropy):
  y,x,z = img.shape
  startx = x//2-(cropx//2)
  starty = y//2-(cropy//2)
  print('crop_center: ', x, 'x', y, 'to', cropx, 'x', cropy)
  return img[starty:starty+cropy,startx:startx+cropx]

def predict_url(imageUrl):
  print('Predicting from url: ',imageUrl)
  with urlopen(imageUrl) as testImage:
    # image = scipy.misc.imread(testImage)
    image = Image.open(testImage)
    return predict_image(image)

def predict_image(image):
  print('Predicting image')
  tf.reset_default_graph()
  tf.import_graph_def(graph_def, name='')
  
  with tf.Session() as sess:
    prob_tensor = sess.graph.get_tensor_by_name(output_layer)

    # w = image.shape[0]
    # h = image.shape[1]
    w, h = image.size
    print('Image size',w,'x',h)

    # scaling
    if w > h:
      new_size = (int((float(size[1]) / h) * w), size[1], 3)
    else:
      new_size = (size[0], int((float(size[0]) / w) * h), 3)

    # resize
    if  not (new_size[0] == w and new_size[0] == h):
      print('Resizing to', new_size[0],'x',new_size[1])
      #augmented_image = scipy.misc.imresize(image, new_size)
      augmented_image = np.asarray(image.resize((new_size[0], new_size[1])))
    else:
      augmented_image = np.asarray(image)

    # crop center
    try:
      augmented_image = crop_center(augmented_image, network_input_size, 
        network_input_size)
    except:
      return 'error: crop_center'

    augmented_image = augmented_image.astype(float)

    # RGB -> BGR
    red, green, blue = tf.split(axis=2, num_or_size_splits=3, value=augmented_image)

    image_normalized = tf.concat(axis=2, values=[
      blue - mean_values_b_g_r[0],
      green - mean_values_b_g_r[1],
      red - mean_values_b_g_r[2],
    ])

    image_normalized = image_normalized.eval()
    image_normalized = np.expand_dims(image_normalized, axis=0)

    predictions, = sess.run(prob_tensor, {input_node: image_normalized})

    result = []
    idx = 0
    for p in predictions:
      truncated_probablity = np.float64(round(p,8))
      if (truncated_probablity > 1e-8):
        result.append({'Tag': labels[idx], 'Probability': truncated_probablity })
      idx += 1
    print('Results: ', str(result))
    return result

Azure Machine Learning

Visione artificiale personalizzato è possibile usare per creare il modello di intelligenza artificiale, ma cosa accade se si desidera eseguire il training di più modelli o collaborare con un team di data Scientist? Riproducono dello sviluppo software, soprattutto per quanto riguarda il codice sorgente, non è presenti nel flusso di lavoro di analisi scientifica dei dati. Azure Machine Learning offre tutto ciò con la preparazione dei dati, sperimentazione, Gestione modelli e operazionalizzazione.

Per questo esempio, se si sta eseguendo diverse esperimenti con visione artificiale personalizzato, è possibile registrare il modello .pb e altri file in modo che è possibile tenerne traccia. Di seguito è riportato il codice:

from azureml.core.model import Model
model = Model.register(model_path = "custom-vision-model/",
                       model_name = "model.pb",
                       tags = {"area": "vision", "type": "classification", 
                         "version": "1.0"},
                       description = "Snow leopard classification model",
                       workspace = ws)

Se si desidera vedere tutti i modelli registrati, immettere questo codice:

models = Model.list(workspace=ws)
for m in models:
  print("Name:", m.name,"\tVersion:", m.version, "\tDescription:", 
  m.description, m.tags)

Se si desidera eseguire il training di modelli personalizzati, consultare gli esempi di notebook di Azure Machine Learning (github.com/Azure/MachineLearningNotebooks). È possibile eseguire il training del modello, registrarlo e creare immagini Docker con il modello. Le immagini Docker possono essere distribuite nel cloud in un'istanza di contenitore di Azure o Azure Kubernetes Service. Un'API REST viene esposta nel contenitore da chiamare quando assegnare punteggi ai dati. L'immagine Docker contiene anche Azure IoT Edge SDK, che verrà broker dei messaggi con l'agente di IoT Edge in esecuzione nel dispositivo edge. Ciò consente di creare il contenitore e distribuirlo al cloud o edge.

Conclusioni

Esistono molti componenti quando si compila una soluzione aziendale, a partire da visione artificiale personalizzato per il training del modello, Azure Machine Learning per gestire il modello (e per il training di altri tipi di modello) e Azure IoT Edge per distribuire i modelli. Configurazione di questi servizi richiederà alcuni imparare di tempo, ma si saranno sfruttare i vantaggi di training con facilità nuovi modelli e loro aggiornamento nei dispositivi perimetrali più.


Ted Wa è un senior program manager sull'uso dei team di Azure Machine Learning per accelerare l'intelligenza artificiale nel cloud e il bordo in hardware specializzato. È stato il dottorato dal versity Uni of Michigan in "controllo ortografico per specialisti," esegue l'analisi di un sistema di computer-aided diagnosi per una stima malignancy su toracica CT.

Emmanuel Bertrand è un senior program manager del team di Azure IoT Edge, in cui aiuta consentono di semplificare la distribuzione dei moduli di IoT tramite Azure Marketplace. Le regole BER trand è unito a Microsoft come una cliente e l'esperienza utente esperto e prima che fosse digitalizzata i processi di diverse aziende industriale usando strumenti tradi ti.

Si ringraziano i seguenti esperti tecnici per la revisione dell'articolo: Rakesh Kelkar, Chipalo Street


Discutere di questo articolo nel forum di MSDN Magazine