Aufgabenübersicht zur Objekterkennung

Eine Katze und ein Hund, die mit Begrenzungsrahmen hervorgehoben und korrekt beschriftet sind

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 testen!

Jetzt starten

Folgen Sie einer dieser Implementierungsanleitungen für die Plattform, an der Sie arbeiten, um diese Aufgabe zu erledigen:

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:
  • Standbilder
  • Decodierte Videoframes
  • Live-Videofeed
Die Object Detection API gibt für erkannte Objekte die folgenden Ergebnisse aus:
  • Objektkategorie
  • Wahrscheinlichkeitsbewertung
  • Begrenzungsrahmenkoordinaten

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.

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