Eine Frage haben? Verbinden Sie sich mit der Community im TensorFlow Forum Visit Forum

Gemeinsame Signaturen für Bilder

Diese Seite beschreibt allgemeine Signaturen, die von Modulen im TF1 Hub-Format für bildbezogene Aufgaben implementiert werden sollten. ( Informationen zum TF2 SavedModel-Format finden Sie in der analogen SavedModel-API .)

Einige Module können für mehr als eine Aufgabe verwendet werden (z. B. neigen Bildklassifizierungsmodule dazu, unterwegs eine Merkmalsextraktion durchzuführen). Daher stellt jedes Modul (1) benannte Signaturen für alle vom Herausgeber erwarteten Aufgaben und (2) eine Standardsignaturausgabe output = m(images) für die angegebene primäre Aufgabe bereit.

Bildmerkmalsvektor

Nutzungsübersicht

Ein Bildmerkmalsvektor ist ein dichter 1-D-Tensor, der ein Gesamtbild darstellt, typischerweise zur Klassifizierung durch das Verbrauchermodell. (Im Gegensatz zu den Zwischenaktivierungen von CNNs bietet es keine räumliche Aufteilung. Im Gegensatz zur Bildklassifizierung wird die vom Herausgebermodell erlernte Klassifizierung verworfen.)

Ein Modul zur Extraktion von Bildmerkmalen verfügt über eine Standardsignatur, die einen Stapel von Bildern einem Stapel von Merkmalsvektoren zuordnet. Es kann wie folgt verwendet werden:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

Es definiert auch die entsprechende benannte Signatur.

Signaturspezifikation

Die benannte Signatur zum Extrahieren von Bildmerkmalsvektoren wird als aufgerufen

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

Die Eingabe folgt der allgemeinen Konvention für die Eingabe von Bildern .

Das Ausgabewörterbuch enthält eine "default" -Ausgabe von dtype float32 und shape [batch_size, num_features] . Die batch_size ist dieselbe wie in der Eingabe, jedoch zum Zeitpunkt der Diagrammkonstruktion nicht bekannt. num_features ist eine bekannte modulspezifische Konstante, die von der Eingabegröße unabhängig ist.

Diese Merkmalsvektoren sollen für die Klassifizierung mit einem einfachen Feed-Forward-Klassifizierer verwendet werden können (wie die gepoolten Merkmale aus der obersten Faltungsschicht in einem typischen CNN für die Bildklassifizierung).

Das Anwenden von Dropouts auf die Ausgabefunktionen (oder nicht) sollte dem Modulkonsumenten überlassen bleiben. Das Modul selbst sollte keine Aussetzer an den tatsächlichen Ausgängen ausführen (selbst wenn es an anderen Stellen intern Aussetzer verwendet).

Das Ausgabewörterbuch kann weitere Ausgaben bereitstellen, beispielsweise die Aktivierung versteckter Ebenen innerhalb des Moduls. Ihre Schlüssel und Werte sind modulabhängig. Es wird empfohlen, architekturabhängigen Schlüsseln einen Architekturnamen "InceptionV3/Mixed_5c" (z. B. um zu vermeiden, dass die Zwischenschicht "InceptionV3/Mixed_5c" mit der obersten Faltungsschicht "InceptionV2/Mixed_5c" ).

Bildklassifizierung

Nutzungsübersicht

Die Bildklassifizierung ordnet die Pixel eines Bildes linearen Bewertungen (Logits) zu, um Mitglied in den Klassen einer Taxonomie zu werden, die vom Modulverleger ausgewählt wurde . Auf diese Weise können Verbraucher Schlussfolgerungen aus der vom Klassifizierungsmodul erlernten Klassifizierung ziehen und nicht nur aus den zugrunde liegenden Merkmalen (vgl. Image Feature Vector ).

Ein Modul zum Extrahieren von Bildfunktionen verfügt über eine Standardsignatur, die einen Stapel von Bildern einem Stapel von Protokollen zuordnet. Es kann wie folgt verwendet werden:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

Es definiert auch die entsprechende benannte Signatur.

Signaturspezifikation

Die benannte Signatur zum Extrahieren von Bildmerkmalsvektoren wird als aufgerufen

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

Die Eingabe folgt der allgemeinen Konvention für die Eingabe von Bildern .

Das Ausgabewörterbuch enthält eine "default" -Ausgabe vom Typ float32 und shape [batch_size, num_classes] . Die batch_size ist dieselbe wie in der Eingabe, jedoch zum Zeitpunkt der Diagrammkonstruktion nicht bekannt. num_classes ist die Anzahl der Klassen in der Klassifizierung. num_classes ist eine bekannte Konstante, die von der Eingabegröße unabhängig ist.

Das Auswerten der outputs["default"][i, c] ergibt eine Bewertung, die die Zugehörigkeit von Beispiel i in der Klasse mit dem Index c vorhersagt.

Es hängt von der zugrunde liegenden Klassifizierung ab, ob diese Scores mit Softmax (für sich gegenseitig ausschließende Klassen), Sigmoid (für orthogonale Klassen) oder etwas anderem verwendet werden sollen. Die Moduldokumentation sollte dies beschreiben und sich auf eine Definition der Klassenindizes beziehen.

Das Ausgabewörterbuch kann weitere Ausgaben bereitstellen, beispielsweise die Aktivierung versteckter Ebenen innerhalb des Moduls. Ihre Schlüssel und Werte sind modulabhängig. Es wird empfohlen, architekturabhängigen Schlüsseln einen Architekturnamen "InceptionV3/Mixed_5c" (z. B. um zu vermeiden, dass die Zwischenschicht "InceptionV3/Mixed_5c" mit der obersten Faltungsschicht "InceptionV2/Mixed_5c" ).

Bildeingabe

Dies gilt für alle Arten von Bildmodulen und Bildsignaturen.

Eine Signatur, die einen Stapel von Bildern als Eingabe verwendet, akzeptiert sie als dichten 4-D-Tensor vom Typ float32 und Form [batch_size, height, width, 3] deren Elemente RGB-Farbwerte von Pixeln sind, die auf den Bereich [0, 1] normalisiert sind. . Dies erhalten Sie von tf.image.decode_*() gefolgt von tf.image.convert_image_dtype(..., tf.float32) .

Ein Modul mit genau einer (oder einer Haupteingabe) von Bildern verwendet für diese Eingabe den Namen "images" .

Das Modul akzeptiert jede batch_size und setzt entsprechend die erste Dimension von TensorInfo.tensor_shape auf "unbekannt". Die letzte Dimension ist auf die Anzahl 3 der RGB-Kanäle festgelegt. Die Abmessungen für height und width sind auf die erwartete Größe der Eingabebilder festgelegt. (Zukünftige Arbeiten können diese Einschränkung für vollständig gefaltete Module aufheben.)

Verbraucher des Moduls sollten die Form nicht direkt überprüfen, sondern die Größeninformationen durch Aufrufen von hub.get_expected_image_size () für das Modul oder die Modulspezifikation erhalten. Von ihnen wird erwartet, dass sie die Größe der Eingabebilder entsprechend ändern (normalerweise vor / während des Stapelns).

Der Einfachheit halber verwenden TF-Hub-Module das channels_last (oder NHWC ) Layout von NHWC und überlassen es dem Graph Optimizer von TensorFlow, bei Bedarf in channels_first (oder NCHW ) umzuschreiben. Dies geschieht standardmäßig seit TensorFlow Version 1.7.