Mit der MediaPipe-Aufgabe „Image Embedder“ können Sie eine numerische Darstellung eines Bildes erstellen, die für verschiedene ML-basierte Bildaufgaben nützlich ist. Diese Funktion wird häufig verwendet, um die Ähnlichkeit zweier Bilder mithilfe mathematischer Vergleichstechniken wie der Kosinusähnlichkeit zu vergleichen. Bei dieser Aufgabe werden Bilddaten mit einem ML-Modell als statische Daten oder als kontinuierlicher Stream verarbeitet. Die Ausgabe ist eine numerische Darstellung der Bilddaten als Liste von hochdimensionalen Feature-Vektoren, auch Einbettungsvektoren genannt, entweder in Gleitkomma- oder Quantisierungsform.
Jetzt starten
Folgen Sie einer dieser Implementierungsanleitungen für Ihre Zielplattform, um diese Aufgabe zu verwenden. In diesen plattformspezifischen Anleitungen wird eine grundlegende Implementierung dieser Aufgabe mit einem empfohlenen Modell veranschaulicht. Außerdem finden Sie Codebeispiele mit den empfohlenen Konfigurationsoptionen:
- Android – Codebeispiel – Anleitung
- Python – Codebeispiel – Anleitung
- Web – Codebeispiel – Anleitung
Taskdetails
In diesem Abschnitt werden die Funktionen, Eingaben, Ausgaben und Konfigurationsoptionen dieser Aufgabe beschrieben.
Funktionen
- Eingabebildverarbeitung: Die Verarbeitung umfasst Bilddrehung, Größenänderung, Normalisierung und Farbraumkonvertierung.
- Eingebetteter Bereich: Die Einbettung erfolgt in einem Bereich des Bildes anstelle des gesamten Bildes.
- Berechnung der Ähnlichkeit von Einbettungen: Integrierte Dienstfunktion zum Berechnen der Kosinus-Ähnlichkeit zwischen zwei Merkmalsvektoren
- Quantisierung: Unterstützt die Skalarquantisierung für die Feature-Vektoren.
Aufgabeneingaben | Aufgabenausgaben |
---|---|
Die Eingabe kann einen der folgenden Datentypen haben:
|
Der Bild-Embedder gibt eine Liste von Einbettungen aus, die Folgendes enthält:
|
Konfigurationsoptionen
Für diese Aufgabe gibt es die folgenden Konfigurationsoptionen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
running_mode |
Legt den Ausführungsmodus für die Aufgabe fest. Es gibt drei Modi: IMAGE: Der Modus für Eingaben mit einem einzelnen Bild. VIDEO: Der Modus für decodierte Frames eines Videos. LIVE_STREAM: Der Modus für einen Livestream von Eingabedaten, z. B. von einer Kamera. In diesem Modus muss resultListener aufgerufen werden, um einen Listener für den asynchronen Empfang von Ergebnissen einzurichten. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
l2_normalize |
Gibt an, ob der zurückgegebene Feature-Vektor mit der L2-Norm normalisiert werden soll. Verwenden Sie diese Option nur, wenn das Modell noch keine native TFLite-Operation vom Typ „L2_NORMALIZATION“ enthält. In den meisten Fällen ist das bereits der Fall und die L2-Normalisierung wird durch TFLite-Inferenz erreicht, sodass diese Option nicht erforderlich ist. | Boolean |
False |
quantize |
Gibt an, ob die zurückgegebene Einbettung über die Skalarquantisierung in Bytes quantisiert werden soll. Für Einbettungen wird implizit davon ausgegangen, dass sie normiert sind. Daher hat jede Dimension garantiert einen Wert im Bereich [−1,0; 1,0]. Verwenden Sie die Option „l2_normalize“, wenn dies nicht der Fall ist. | Boolean |
False |
result_callback |
Legt fest, dass der Ergebnisempfänger die Einbettungsergebnisse asynchron empfängt, wenn sich der Bild-Embedder im Livestream-Modus befindet. Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist. |
– | Nicht festgelegt |
Modelle
Für den Bild-Embedder muss ein Bild-Embedding-Modell heruntergeladen und in Ihrem Projektverzeichnis gespeichert werden. Beginnen Sie mit dem standardmäßigen, empfohlenen Modell für Ihre Zielplattform, wenn Sie mit dieser Aufgabe beginnen. Bei den anderen verfügbaren Modellen müssen in der Regel Kompromisse zwischen Leistung, Genauigkeit, Auflösung und Ressourcenanforderungen eingegangen werden. In einigen Fällen sind auch zusätzliche Funktionen verfügbar.
MobileNetV3-Modell
Diese Modellfamilie verwendet eine MobileNet V3-Architektur und wurde mit ImageNet-Daten trainiert. Dieses Modell verwendet einen Multiplikator von 0,75 für die Tiefe (Anzahl der Funktionen) in den Convolutional-Schichten, um den Kompromiss zwischen Genauigkeit und Latenz zu optimieren. Darüber hinaus ist MobileNet V3 in zwei verschiedenen Größen verfügbar: klein und groß, um das Netzwerk an Anwendungsfälle mit wenigen oder vielen Ressourcen anzupassen.
Modellname | Eingabeform | Quantisierungstyp | Versionen |
---|---|---|---|
MobileNet-V3 (klein) | 224 x 224 | Keine (float32) | Neueste |
MobileNet-V3 (large) | 224 x 224 | Keine (float32) | Neueste |
Benchmarks für Aufgaben
Hier sind die Aufgaben-Benchmarks für die gesamte Pipeline, die auf den oben genannten vorab trainierten Modellen basieren. Das Latenzergebnis ist die durchschnittliche Latenz auf Pixel 6 mit CPU / GPU.
Modellname | CPU-Latenz | GPU-Latenz |
---|---|---|
MobileNet-V3 (klein) | 3,94 ms | 7,83 ms |
MobileNet-V3 (large) | 9,75 ms | 9,08 ms |