API SavedModel comuni per attività di immagine

Questa pagina descrive come TF2 SavedModels per le attività relative alle immagini dovrebbe implementare l' API Reusable SavedModel . (Questo sostituisce le firme comuni per le immagini per il formato TF1 Hub ormai deprecato.)

Vettore delle caratteristiche dell'immagine

Riepilogo dell'utilizzo

Un vettore di caratteristiche dell'immagine è un tensore 1D denso che rappresenta un'immagine intera, tipicamente per l'utilizzo da parte di un semplice classificatore feed-forward nel modello di consumo. (In termini di CNN classiche, questo è il valore del collo di bottiglia dopo che l'estensione spaziale è stata raggruppata o appiattita, ma prima che venga eseguita la classificazione; per questo, vedere la classificazione delle immagini di seguito.)

Un SavedModel riutilizzabile per l'estrazione di funzionalità di immagine ha un metodo __call__ sull'oggetto radice che mappa un batch di immagini su un batch di vettori di funzionalità. Può essere usato in questo modo:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
features = obj(images)   # A batch with shape [batch_size, num_features].

A Keras, l'equivalente è

features = hub.KerasLayer("path/to/model")(images)

L'input segue la convenzione generale per l'input delle immagini . La documentazione del modello specifica l'intervallo consentito per height e width dell'ingresso.

L'output è un singolo tensore di dtype float32 e shape [batch_size, num_features] . Il batch_size è lo stesso dell'input. num_features è una costante specifica del modulo indipendente dalla dimensione dell'input.

Dettagli dell'API

L' API Reusable SavedModel fornisce anche un elenco di obj.variables (ad esempio, per l'inizializzazione quando non si carica con entusiasmo).

Un modello che supporta la regolazione fine fornisce un elenco di obj.trainable_variables . Potrebbe essere necessario passare training=True per essere eseguito in modalità training (ad esempio, per l'abbandono). Alcuni modelli consentono argomenti facoltativi per sovrascrivere gli iperparametri (ad esempio, tasso di abbandono; da descrivere nella documentazione del modello). Il modello può anche fornire un elenco di obj.regularization_losses . Per i dettagli, consulta l' API riutilizzabile SavedModel .

In Keras, questo è gestito da hub.KerasLayer : inizializzalo con trainable=True per abilitare la regolazione fine e (nel raro caso in cui si applichi l'override di hparam) con arguments=dict(some_hparam=some_value, ...)) .

Appunti

L'applicazione (o meno) dell'esclusione alle funzionalità di output dovrebbe essere lasciata al consumatore del modello. Lo stesso SavedModel non dovrebbe eseguire l'abbandono sugli output effettivi (anche se utilizza l'abbandono internamente in altri posti).

Esempi

Vengono utilizzati SavedModel riutilizzabili per i vettori di caratteristiche dell'immagine

Classificazione delle immagini

Riepilogo dell'utilizzo

La classificazione delle immagini mappa i pixel di un'immagine in punteggi lineari (logit) per l'appartenenza alle classi di una tassonomia selezionate dall'editore del modulo . Ciò consente ai consumatori modello di trarre conclusioni dalla particolare classificazione appresa dal modulo editore. (Per la classificazione delle immagini con un nuovo set di classi, è comune riutilizzare invece un modello Image Feature Vector con un nuovo classificatore.)

Un SavedModel riutilizzabile per la classificazione delle immagini ha un metodo __call__ sull'oggetto root che mappa un batch di immagini su un batch di logit. Può essere usato in questo modo:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images)   # A batch with shape [batch_size, num_classes].

A Keras, l'equivalente è

logits = hub.KerasLayer("path/to/model")(images)

L'input segue la convenzione generale per l'input delle immagini . La documentazione del modello specifica l'intervallo consentito per height e width dell'ingresso.

Il logits di output è un singolo tensore di dtype float32 e shape [batch_size, num_classes] . Il batch_size è lo stesso dell'input. num_classes è il numero di classi nella classificazione, che è una costante specifica del modello.

Il valore logits[i, c] è un punteggio che prevede l'appartenenza dell'esempio i alla classe con indice c .

Dipende dalla classificazione sottostante se questi punteggi devono essere utilizzati con softmax (per classi mutuamente esclusive), sigmoide (per classi ortogonali) o qualcos'altro. La documentazione del modulo dovrebbe descriverlo e fare riferimento a una definizione degli indici delle classi.

Dettagli dell'API

L' API Reusable SavedModel fornisce anche un elenco di obj.variables (ad esempio, per l'inizializzazione quando non si carica con entusiasmo).

Un modello che supporta la regolazione fine fornisce un elenco di obj.trainable_variables . Potrebbe essere necessario passare training=True per essere eseguito in modalità training (ad esempio, per l'abbandono). Alcuni modelli consentono argomenti facoltativi per sovrascrivere gli iperparametri (ad esempio, tasso di abbandono; da descrivere nella documentazione del modello). Il modello può anche fornire un elenco di obj.regularization_losses . Per i dettagli, consulta l' API riutilizzabile SavedModel .

In Keras, questo è gestito da hub.KerasLayer : inizializzalo con trainable=True per abilitare la regolazione fine e (nel raro caso in cui si applichi l'override di hparam) con arguments=dict(some_hparam=some_value, ...)) .

Ingresso immagine

Questo è comune a tutti i tipi di modelli di immagine.

Un modello che prende un batch di immagini come input le accetta come un tensore 4-D denso di dtype float32 e forma [batch_size, height, width, 3] i cui elementi sono valori di colore RGB di pixel normalizzati nell'intervallo [0, 1] . Questo è ciò che ottieni da tf.image.decode_*() seguito da tf.image.convert_image_dtype(..., tf.float32) .

Il modello accetta qualsiasi batch_size . La documentazione del modello specifica l'intervallo consentito per height e width . L'ultima dimensione è fissata su 3 canali RGB.

Si consiglia ai modelli di utilizzare il layout channels_last (o NHWC ) dei tensori in tutto e di lasciare che sia l'ottimizzatore grafico di TensorFlow a riscrivere in channels_first (o NCHW ) se necessario.