Mit der MediaPipe-Objekterkennungsaufgabe können Sie das Vorhandensein und die Position mehrerer Objektklassen in Bildern oder Videos erkennen. So kann ein Objekterkennungssystem beispielsweise Hunde in einem Bild finden. Bei dieser Aufgabe werden Bilddaten mit einem Modell für maschinelles Lernen verarbeitet. Es werden statische Daten oder ein kontinuierlicher Videostream als Eingabe akzeptiert und eine Liste der Erkennungsergebnisse ausgegeben. Jedes Erkennungsergebnis stellt ein Objekt dar, das im Bild oder Video zu sehen ist.
Jetzt starten
Folgen Sie einer dieser Implementierungsanleitungen für die Plattform, an der Sie arbeiten, um diese Aufgabe zu erledigen:
- Android – Codebeispiel – Anleitung
- Python – Codebeispiel – Anleitung
- Web – Codebeispiel – Anleitung
- iOS – Codebeispiel – Anleitung
In diesen plattformspezifischen Anleitungen wird eine grundlegende Implementierung dieser Aufgabe beschrieben, 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: Dazu gehören Bilddrehung, Größenänderung, Normalisierung und Farbraumkonvertierung.
- Labelzuordnungs-Locale: Legen Sie die Sprache fest, die für Anzeigenamen verwendet wird.
- Grenzwert für die Bewertung: Ergebnisse nach Bewertungen filtern.
- Top-K-Erkennung: Hiermit können Sie die Ergebnisse der Zahlenerkennung filtern.
- Label-Zulassungs- und -Ausschlussliste: Geben Sie die erkannten Kategorien an.
Aufgabeneingaben | Aufgabenausgaben |
---|---|
Die Object Detector API akzeptiert einen der folgenden Datentypen als Eingabe:
|
Die Object Detection API gibt für erkannte Objekte die folgenden Ergebnisse aus:
|
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 |
display_names |
Legt die Sprache der Labels fest, die für die Anzeigenamen verwendet werden, die in den Metadaten des Modells der Aufgabe angegeben sind, sofern verfügbar. Der Standardwert ist en für Englisch. Mit der TensorFlow Lite Metadata Writer API können Sie den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen.
|
Gebietscode | de |
max_results |
Legt die optionale maximale Anzahl der Ergebnisse mit der höchsten Punktzahl fest, die zurückgegeben werden sollen. | Beliebige positive Zahlen | -1 (alle Ergebnisse werden zurückgegeben) |
score_threshold |
Legt den Schwellenwert für die Vorhersagebewertung fest, der den in den Modellmetadaten angegebenen Wert (falls vorhanden) überschreibt. Ergebnisse unter diesem Wert werden abgelehnt. | Beliebiger Float | Nicht festgelegt |
category_allowlist |
Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn die Liste nicht leer ist, werden Erkennungsergebnisse herausgefiltert, deren Kategoriename nicht in dieser Liste enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert.
Diese Option schließt category_denylist aus. Die Verwendung beider Optionen führt zu einem Fehler. |
Beliebige Strings | Nicht festgelegt |
category_denylist |
Hiermit wird eine optionale Liste der nicht zulässigen Kategorienamen festgelegt. Wenn der String nicht leer ist, werden Erkennungsergebnisse herausgefiltert, deren Kategoriename in diesem String enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option schließt category_allowlist aus. Die Verwendung beider Optionen führt zu einem Fehler. |
Beliebige Strings | Nicht festgelegt |
Modelle
Für die Object Detection API muss ein Objekterkennungsmodell heruntergeladen und im Projektverzeichnis gespeichert werden. Wenn Sie noch kein Modell haben, beginnen Sie mit dem standardmäßigen empfohlenen Modell. Bei den anderen in diesem Abschnitt vorgestellten Modellen müssen Sie Kompromisse zwischen Latenz und Genauigkeit eingehen.
EfficientDet-Lite0-Modell (empfohlen)
Das EfficientDet-Lite0-Modell verwendet ein EfficientNet-Lite0-Backbone mit einer Eingabegröße von 320 × 320 Pixeln und einem BiFPN-Feature-Netzwerk. Das Modell wurde mit dem COCO-Dataset trainiert, einem umfangreichen Dataset für die Objekterkennung mit 1,5 Millionen Objektinstanzen und 80 Objektlabels. Vollständige Liste der unterstützten Labels EfficientDet-Lite0 ist als int8, float16 oder float32 verfügbar. Dieses Modell wird empfohlen, da es eine gute Balance zwischen Latenz und Genauigkeit bietet. Sie ist für viele Anwendungsfälle sowohl genau als auch effizient.
Modellname | Eingabeform | Quantisierungstyp | Versionen |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 × 320 | int8 | Neueste |
EfficientDet-Lite0 (float 16) | 320 × 320 | float 16 | Neueste |
EfficientDet-Lite0 (float 32) | 320 × 320 | Keine (float32) | Neueste |
EfficientDet-Lite2-Modell
Das EfficientDet-Lite2-Modell verwendet ein EfficientNet-Lite2-Backbone mit einer Eingabegröße von 448 × 448 Pixeln und einem BiFPN-Feature-Netzwerk. Das Modell wurde mit dem COCO-Dataset trainiert, einem umfangreichen Dataset für die Objekterkennung mit 1,5 Millionen Objektinstanzen und 80 Objektlabels. Vollständige Liste der unterstützten Labels EfficientDet-Lite2 ist als int8-, float16- oder float32-Modell verfügbar. Dieses Modell ist im Allgemeinen genauer als EfficientDet-Lite0, aber auch langsamer und speicherintensiver. Dieses Modell eignet sich für Anwendungsfälle, bei denen die Genauigkeit vor Geschwindigkeit und Größe steht.
Modellname | Eingabeform | Quantisierungstyp | Versionen |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 × 448 | int8 | Neueste |
EfficientDet-Lite2 (Float 16) | 448 × 448 | float 16 | Neueste |
EfficientDet-Lite2 (float 32) | 448 × 448 | Keine (float32) | Neueste |
SSD MobileNetV2-Modell
Das SSD MobileNetV2-Modell verwendet ein 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 für die Objekterkennung mit 1,5 Millionen Objektinstanzen und 80 Objektlabels. Vollständige Liste der unterstützten Labels SSD MobileNetV2 ist als int8- und als Float32-Modell verfügbar. Dieses Modell ist schneller und leichter als EfficientDet-Lite0, aber im Allgemeinen auch weniger genau. Dieses Modell eignet sich für Anwendungsfälle, bei denen ein schnelles, schlankes Modell benötigt wird, bei dem jedoch etwas Genauigkeit geopfert wird.
Modellname | Eingabeform | Quantisierungstyp | Versionen |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | Neueste |
SSDMobileNet-V2 (Float 32) | 256 x 256 | Keine (float32) | Neueste |
Modellanforderungen und Metadaten
In diesem Abschnitt werden die Anforderungen für benutzerdefinierte Modelle beschrieben, falls Sie ein Modell für diese Aufgabe erstellen möchten. Benutzerdefinierte Modelle müssen im TensorFlow Lite-Format vorliegen und metadata enthalten, die die Betriebsparameter des Modells beschreiben.
Designanforderungen
Eingabe | Form | Beschreibung |
---|---|---|
Eingabebild | Float32-Tensor mit der Form [1, Höhe, Breite, 3] | Das normalisierte Eingabebild. |
Ausgabe | Form | Beschreibung |
---|---|---|
detection_boxes |
Float32-Tensor mit der Form [1, num_boxes, 4] | Begrenzungsrahmen des jeweiligen erkannten Objekts. |
detection_classes |
Float32-Tensor mit der Form [1, num_boxes] | Indizes der Klassennamen für jedes erkannte Objekt. |
detection_scores |
Float32-Tensor mit der Form [1, num_boxes] | Vorhersagewerte für jedes erkannte Objekt. |
num_boxes |
Float32-Tensor der Größe 1 | Die Anzahl der erkannten Boxen. |
Metadatenanforderungen
Parameter | Beschreibung | Beschreibung |
---|---|---|
input_norm_mean |
Der Mittelwert, der bei der Normalisierung des Eingabetensors verwendet wird. | Das normalisierte Eingabebild. |
input_norm_std |
Die Feldnorm, die bei der Normalisierung des Eingabetensors verwendet wird. | Begrenzungsrahmen des jeweiligen erkannten Objekts. |
label_file_paths |
Die Pfade zu den Dateien mit den Kategorietensorlabels. Wenn das Modell keine Labelsdateien hat, übergeben Sie eine leere Liste. | Indizes der Klassennamen für jedes erkannte Objekt. |
score_calibration_md |
Informationen zum Vorgang zur Bewertungskalibrierung im Klassifizierungstensor. Dieser Parameter ist nicht erforderlich, wenn für das Modell keine Bewertungskalibrierung verwendet wird. |
Vorhersagewerte für jedes erkannte Objekt. |
num_boxes |
Float32-Tensor der Größe 1 | Die Anzahl der erkannten Boxen. |
Benchmarks für Aufgaben
Hier sind die Aufgaben-Benchmarks für die oben genannten vortrainierten Modelle. Das Latenzergebnis ist die durchschnittliche Latenz auf Pixel 6 mit CPU / GPU.
Modellname | CPU-Latenz | GPU-Latenz |
---|---|---|
EfficientDet-Lite0-Float32-Modell | 61,30 ms | 27,83 ms |
EfficientDet-Lite0-float16-Modell | 53,97 ms | 27,97 ms |
EfficientDet-Lite0 int8-Modell | 29,31 ms | - |
EfficientDet-Lite2-Float32-Modell | 197,98 ms | 41,15 ms |
EfficientDet-Lite2-float16-Modell | 198,77 ms | 47,31 ms |
EfficientDet-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 |