Mit der Aufgabe „MediaPipe-Objektdetektor“ können Sie das Vorhandensein und den Standort mehrerer Klassen von Objekten in Bildern oder Videos erkennen. Ein Objektdetektor kann beispielsweise Hunde in einem Bild finden. Bei dieser Aufgabe werden Bilddaten mit einem Modell für maschinelles Lernen (ML) verarbeitet, das statische Daten oder einen kontinuierlichen Videostream als Eingabe akzeptiert und eine Liste mit Erkennungsergebnissen ausgibt. Jedes Erkennungsergebnis stellt ein Objekt dar, das im Bild oder Video erscheint.
Jetzt starten
Beginnen Sie mit dieser Aufgabe. Folgen Sie dazu einer der folgenden Implementierungsleitfäden für die Plattform, an der Sie gerade arbeiten:
- Android – Codebeispiel – Leitfaden
- Python – Codebeispiel – Anleitung
- Web – Codebeispiel – Leitfaden
- iOS – Codebeispiel – Leitfaden
Diese plattformspezifischen Leitfäden führen Sie durch eine grundlegende Implementierung dieser Aufgabe, einschließlich eines empfohlenen Modells und eines Codebeispiels mit empfohlenen Konfigurationsoptionen.
Taskdetails
In diesem Abschnitt werden die Funktionen, Eingaben und Ausgaben dieser Aufgabe beschrieben.
Funktionen
- Eingabebildverarbeitung: Die Verarbeitung umfasst Bilddrehung, Größenanpassung, Normalisierung und Farbraumkonvertierung.
- Gebietsschema für Labelkarte: die Sprache für Anzeigenamen festlegen
- Punktzahl-Schwellenwert: Filtern Sie Ergebnisse basierend auf den Vorhersagewerten.
- Top-K-Erkennung: Filtern Sie die Ergebnisse der Nummernerkennung.
- Zulassungs- und Sperrliste für Labels: Geben Sie die erkannten Kategorien an.
Aufgabeneingaben | Aufgabenausgaben |
---|---|
Die Object Detector API akzeptiert Eingaben mit einem der folgenden Datentypen:
|
Die Object Detector API gibt für erkannte Objekte die folgenden Ergebnisse aus:
|
Konfigurationsoptionen
Diese Aufgabe hat die folgenden Konfigurationsoptionen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
running_mode |
Legt den Ausführungsmodus für die Task fest. Es gibt drei Modi: IMAGE: Der Modus für Einzelbildeingaben. VIDEO: Der Modus für decodierte Frames eines Videos. LIVE_STREAM: Der Modus für einen Livestream der Eingabedaten, z. B. von einer Kamera. In diesem Modus muss resultListener aufgerufen werden, um einen Listener einzurichten, der die Ergebnisse asynchron empfängt. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
Legt die Sprache von Labels fest, die für Anzeigenamen bereitgestellt werden, die in den Metadaten des Aufgabenmodells angegeben sind, sofern verfügbar. Der Standardwert für Englisch ist en . Mit der TensorFlow Lite Metadata Writer API können Sie den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen.
|
Sprachcode | en |
max_results |
Legt die optionale maximale Anzahl der Ergebnisse mit den besten Bewertungen fest, die zurückgegeben werden sollen. | Beliebige positive Zahlen | -1 (alle Ergebnisse werden zurückgegeben) |
score_threshold |
Legt den Schwellenwert für den Vorhersagewert fest, der den in den Modellmetadaten angegebenen Grenzwert überschreibt (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. | Beliebige Gleitkommazahl | Nicht festgelegt |
category_allowlist |
Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, werden Erkennungsergebnisse herausgefiltert, deren Kategoriename nicht in diesem Satz enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert.
Diese Option und category_denylist schließen sich gegenseitig aus und die Verwendung beider Werte führt zu einem Fehler. |
Beliebige Strings | Nicht festgelegt |
category_denylist |
Legt die optionale Liste der nicht zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, werden Erkennungsergebnisse herausgefiltert, deren Kategoriename in diesem Satz enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option und category_allowlist schließen sich gegenseitig aus und die Verwendung beider Optionen führt zu einem Fehler. |
Beliebige Strings | Nicht festgelegt |
Modelle
Für die Object Detector API muss ein Objekterkennungsmodell heruntergeladen und in Ihrem Projektverzeichnis gespeichert werden. Wenn Sie noch kein Modell haben, beginnen Sie mit dem empfohlenen Standardmodell. Bei den anderen in diesem Abschnitt vorgestellten Modellen werden Kompromisse zwischen Latenz und Genauigkeit gemacht.
EffizienteDet-Lite0-Modell (empfohlen)
Das EffizienteDet-Lite0-Modell verwendet einen EffizienteNet-Lite0-Backbone mit einer Eingabegröße von 320 x 320 und einem BiFPN-Feature-Netzwerk. Das Modell wurde mit dem COCO-Dataset trainiert, einem umfangreichen Dataset zur Objekterkennung, das 1,5 Millionen Objektinstanzen und 80 Objektlabels enthält. Hier finden Sie eine vollständige Liste der unterstützten Labels. EffizienteDet-Lite0 ist als int8-, FLOAT16- oder FLOAT32-Datei verfügbar. Dieses Modell wird empfohlen, da es ein Gleichgewicht zwischen Latenz und Genauigkeit erzielt. Sie ist genau und leicht genug für viele Anwendungsfälle.
Modellname | Form eingeben | Quantisierungstyp | Versionen |
---|---|---|---|
EffizienteDet-Lite0 (int8) | 320 x 320 | int8 | Neueste |
EffizienteDet-Lite0 (Gleitkommazahl 16) | 320 x 320 | Gleitkommazahl 16 | Neueste |
EffizienteDet-Lite0 (Gleitkommazahl 32) | 320 x 320 | Keine (float32) | Neueste |
EffizienteDet-Lite2-Modell
Das EffizienteDet-Lite2-Modell verwendet einen EffizienteNet-Lite2-Backbone mit einer Eingabegröße von 448 x 448 und einem BiFPN-Feature-Netzwerk. Das Modell wurde mit dem COCO-Dataset trainiert, einem umfangreichen Dataset zur Objekterkennung, das 1,5 Millionen Objektinstanzen und 80 Objektlabels enthält. Hier finden Sie eine vollständige Liste der unterstützten Labels. EffizienteDet-Lite2-Modell ist als int8-, FLOAT16- oder FLOAT32-Modell verfügbar. Dieses Modell ist in der Regel genauer als EffizienteDet-Lite0, ist aber auch langsamer und speicherintensiver. Dieses Modell eignet sich für Anwendungsfälle, bei denen die Genauigkeit eine höhere Priorität als Geschwindigkeit und Größe hat.
Modellname | Form eingeben | Quantisierungstyp | Versionen |
---|---|---|---|
EffizienteDet-Lite2 (int8) | 448 x 448 | int8 | Neueste |
EffizienteDet-Lite2 (Gleitkommazahl 16) | 448 x 448 | Gleitkommazahl 16 | Neueste |
EffizienteDet-Lite2 (Gleitkommazahl 32) | 448 x 448 | Keine (float32) | Neueste |
SSD MobileNetV2-Modell
Das SSD MobileNetV2-Modell verwendet einen MobileNetV2-Backbone mit einer Eingabegröße von 256 × 256 und ein SSD-Feature-Netzwerk. Das Modell wurde mit dem COCO-Dataset trainiert, einem umfangreichen Dataset zur Objekterkennung, das 1,5 Millionen Objektinstanzen und 80 Objektlabels enthält. Hier finden Sie eine vollständige Liste der unterstützten Labels. SSD MobileNetV2 ist als Int8- und Gleitkommazahl 32-Modell verfügbar. Dieses Modell ist schneller und leichter als EffizienteDet-Lite0, aber auch im Allgemeinen weniger genau. Dieses Modell eignet sich für Anwendungsfälle, die ein schnelles, leichtes Modell erfordern, das eine gewisse Genauigkeit vernachlässigt.
Modellname | Form eingeben | Quantisierungstyp | Versionen |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | Neueste |
SSDMobileNet-V2 (Gleitkommazahl 32) | 256 x 256 | Keine (float32) | Neueste |
Modellanforderungen und Metadaten
In diesem Abschnitt werden die Anforderungen an benutzerdefinierte Modelle beschrieben, wenn Sie ein Modell für diese Aufgabe erstellen möchten. Benutzerdefinierte Modelle müssen im TensorFlow Lite-Format vorliegen und Metadaten enthalten, die die Betriebsparameter des Modells beschreiben.
Designanforderungen
Eingabe | Form | Beschreibung |
---|---|---|
Eingabebild | Float32-Tensor der Form[1, Höhe, Breite, 3] | Das normalisierte Eingabebild. |
Ausgabe | Form | Beschreibung |
---|---|---|
detection_boxes |
Float32-Tensor der Form [1, num_boxes, 4] | Position des Felds für jedes erkannte Objekt. |
detection_classes |
Float32-Tensor der Form [1, num_boxes] | Indexe der Klassennamen für jedes erkannte Objekt. |
detection_scores |
Tensor 32 der Form [1, num_boxes] | Vorhersagewerte für jedes erkannte Objekt. |
num_boxes |
Float32-Tensor der Größe 1 | Die Anzahl der erkannten Boxen. |
Anforderungen an Metadaten
Parameter | Beschreibung | Beschreibung |
---|---|---|
input_norm_mean |
Der in der Eingabetensor-Normalisierung verwendete Mittelwert. | Das normalisierte Eingabebild. |
input_norm_std |
Die in der Normalisierung des Eingabetensors verwendete Feldnorm. | Position des Felds für jedes erkannte Objekt. |
label_file_paths |
Die Pfade zu den Tensorlabel-Dateien der Kategorie. Wenn das Modell keine Labeldateien hat, übergeben Sie eine leere Liste. | Indexe der Klassennamen für jedes erkannte Objekt. |
score_calibration_md |
Informationen zum Kalibrierungsvorgang für den Wert im Klassifizierungstensor. Dieser Parameter ist nicht erforderlich, wenn das Modell keine Kalibrierung für die Punktzahl verwendet. |
Vorhersagewerte für jedes erkannte Objekt. |
num_boxes |
Float32-Tensor der Größe 1 | Die Anzahl der erkannten Boxen. |
Aufgaben-Benchmarks
Hier sind die Aufgaben-Benchmarks für die oben genannten vortrainierten Modelle. Das Latenzergebnis ist die durchschnittliche Latenz von Pixel 6 mit CPU / GPU.
Modellname | CPU-Latenz | GPU-Latenz |
---|---|---|
EffizienteDet-Lite0-FLOAT32-Modell | 61,30 ms | 27,83 ms |
EffizienteDet-Lite0-FLOAT16-Modell | 53,97 ms | 27,97 ms |
EffizienteDet-Lite0-Int8-Modell | 29,31 ms | - |
EffizienteDet-Lite2-FLOAT32-Modell | 197,98 ms | 41,15 ms |
EffizienteDet-Lite2-FLOAT16-Modell | 198,77 ms | 47,31 ms |
EffizienteDet-Lite2-Int8-Modell | 70,91 ms | - |
SSD MobileNetV2-FLOAT32-Modell | 36,30 ms | 24,01 ms |
SSD MobileNetV2-FLOAT16-Modell | 37,35 ms | 28,16 ms |