Objekterkennungsanwendung mit TensorFlow erstellen

In dieser Anleitung wird beschrieben, wie Sie eine Objekterkennungsanwendung installieren und ausführen. In dieser Anwendung kommen TensorFlow und andere öffentliche API-Bibliotheken zum Einsatz, um mehrere Objekte in einem hochgeladenen Bild zu erkennen.

Ziele

Dies ist eine einfache Anleitung, die Sie mit TensorFlow-Anwendungen vertraut machen soll. Wenn Sie fertig sind, sollten Sie Folgendes können:

  • eine virtuelle Maschine (VM) mit Compute Engine erstellen
  • die Object Detection API-Bibliothek installieren
  • eine Webanwendung zur Objekterkennung installieren und starten
  • die Webanwendung mit hochgeladenen Bildern testen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Compute Engine
  • Nichtflüchtiger Speicher

Die geschätzten Kosten zum Ausführen dieser Anleitung (sofern Sie jede Ressource einen ganzen Tag lang nutzen) betragen laut Preisrechner ca. 1,36 $.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

TensorFlow-Architektur im Überblick

Die Objekterkennungsanwendung verwendet die folgenden Komponenten:

  • TensorFlow. Eine Open-Source-Bibliothek für maschinelles Lernen, die von Entwicklern und Technikern der Google-Organisation für Maschinenintelligenz entwickelt wurde. TensorFlow wird zur Verteilung der Trainings-Workloads auf mehreren Computern ausgeführt.

  • Object Detection API. Ein Open-Source-Framework, das auf TensorFlow basiert und das Erstellen, Trainieren und Bereitstellen von Objekterkennungsmodellen erleichtert.

  • Vortrainierte Objekterkennungsmodelle. Die Object Detection API bietet vortrainierte Objekterkennungsmodelle für Nutzer, die Inferenzjobs ausführen. Die Nutzer müssen die Modelle nicht von Grund auf neu trainieren.

Lokale Implementierung

Das folgende Diagramm zeigt die Implementierung dieser Anleitung. Die Webanwendung wird in einer auf Compute Engine ausgeführten VM-Instanz bereitgestellt.

Architektur einer Instanz, die auf Compute Engine ausgeführt wird

Wenn vom Client ein Bild an die Anwendung hochgeladen wird, führt die Anwendung den Inferenzjob lokal aus. Das vortrainierte Modell gibt die Labels der erkannten Objekte und die Bildkoordinaten der entsprechenden Objekte zurück. Anhand dieser Werte erzeugt die Anwendung neue Bilder, die mit Rechtecken um die erkannten Objekte herum aufgefüllt werden. Für jede Objektkategorie werden separate Bilder generiert, die es dem Client ermöglichen, zwischen ausgewählten Objekten zu unterscheiden.

Remoteimplementierung

Sie können das vortrainierte Modell auf AI Platform bereitstellen, um einen API-Dienst für die Inferenz verfügbar zu machen. In diesem Fall sendet die Webanwendung eine API-Anfrage zum Erkennen von Objekten im hochgeladenen Bild, statt den Inferenzjob lokal auszuführen.

Mit TensorFlow können Sie wählen, auf welcher Plattform Inferenzjobs je nach Ihren Geschäftsanforderungen ausgeführt werden. Diese Flexibilität zeigt die Vorteile von Google Cloud Platform und TensorFlow als eine offene Plattform für maschinelles Lernen.

Vortrainierte Modelle

Mit der Object Detection API können Sie fünf vortrainierte Modelle verwenden. Sie werden mit dem COCO-Dataset angelernt und können allgemeine Objekte in 80 Kategorien erkennen.

Die Spalte COCO mAP zeigt den Genauigkeitsindex des Modells an. Je höher die Zahl, desto besser ist die Genauigkeit. Mit zunehmender Geschwindigkeit nimmt die Genauigkeit ab.

Modellname Geschwindigkeit COCO mAP
ssd_mobilenet_v1_coco herunterladen Schnell 21
ssd_inception_v2_coco herunterladen Schnell 24
rfcn_resnet101_coco herunterladen Mittel 30
faster_rcnn_resnet101_coco herunterladen Mittel 32
faster_rcnn_inception_resnet_v2_atrous_coco herunterladen Langsam 37

VM-Instanzen starten

  1. Öffnen Sie in der Cloud Console die Seite VM-Instanzen.

    Zu „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.
  3. Geben Sie für Maschinentyp den Wert 8 vCPUs.
  4. Click the Customize link next in the Machine type section.
  5. In the Memory section, replace 30 with 8 an.
  6. Wählen Sie im Bereich Firewall die Option HTTP-Traffic zulassen aus.
  7. Click the Management, security, disks, networking, sole tenancy link, then click the Networking tab.
  8. In the Network interfaces section, next to the default row, click Edit.
  9. Select Create IP address from the External IP drop-down list to assign a static IP address. In the Name field, enter staticip,and then click Reserve.
  10. Klicken Sie auf Erstellen, um die Instanz anzulegen.

SSH into the instance

  1. Next to the instance name, click SSH.

  2. Enter the following command to switch to the root user:

    sudo -i
    

Install the Object Detection API library

  1. Install the prerequisite packages.

    apt-get update
    apt-get install -y protobuf-compiler python3-pil python3-lxml python3-pip python3-dev git
    pip3 install -U pip
    python3 -m pip install Flask==1.1.1 WTForms==2.2.1 Flask_WTF==0.14.2 Werkzeug==0.16.0 tensorflow==2.0.0
  2. Install the Object Detection API library.

    cd /opt
    git clone https://github.com/tensorflow/models
    cd models/research
    protoc object_detection/protos/*.proto --python_out=.

Install and launch the web application

  1. Install the application.

    cd $HOME
    git clone https://github.com/GoogleCloudPlatform/tensorflow-object-detection-example
    cp -a tensorflow-object-detection-example/object_detection_app_p3 /opt/
    chmod u+x /opt/object_detection_app_p3/app.py
    cp /opt/object_detection_app_p3/object-detection.service /etc/systemd/system/
    
  2. The application provides a simple user authentication mechanism. You can change the username and password by modifying the /opt/object_detection_app_p3/decorator.py file.

    USERNAME = 'username'
    PASSWORD = 'passw0rd'
  3. Launch the application.

    systemctl daemon-reload
    systemctl enable object-detection
    systemctl start object-detection
    systemctl status object-detection
    

    The last command outputs the application status, as in the following example:

    ● object-detection.service - Object Detection API Demo
       Loaded: loaded (/etc/systemd/system/object-detection.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2020-07-02 23:55:17 UTC; 38s ago
     Main PID: 17136 (python3)
        Tasks: 29 (limit: 4915)
       CGroup: /system.slice/object-detection.service
               └─17136 python3 /opt/object_detection_app_p3/app.py
    
    Jul 02 23:55:32 od-test app.py[17136]: 2020-07-02 23:55:32.930129: I tensorflow/core/platform/cpu_feature_guard.cc:142] You
    Jul 02 23:55:32 od-test app.py[17136]: 2020-07-02 23:55:32.936310: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94
    Jul 02 23:55:32 od-test app.py[17136]: 2020-07-02 23:55:32.937050: I tensorflow/compiler/xla/service/service.cc:168] XLA se
    Jul 02 23:55:32 od-test app.py[17136]: 2020-07-02 23:55:32.937078: I tensorflow/compiler/xla/service/service.cc:175]   Stre
    Jul 02 23:55:40 od-test app.py[17136]:  * Serving Flask app "app" (lazy loading)
    Jul 02 23:55:40 od-test app.py[17136]:  * Environment: production
    Jul 02 23:55:40 od-test app.py[17136]:    WARNING: This is a development server. Do not use it in a production deployment.
    Jul 02 23:55:40 od-test app.py[17136]:    Use a production WSGI server instead.
    Jul 02 23:55:40 od-test app.py[17136]:  * Debug mode: off
    Jul 02 23:55:40 od-test app.py[17136]:  * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
    

    The application loads the model binary immediately after launch. It will take a minute to start serving requests from clients. You'll see the message Running on http://0.0.0.0:80/ (Press CTRL+C to quit) when it's ready.

Test the web application

  1. Using a web browser, access the static IP address that was assigned when you launched the VM instance.

  2. Enter the username and password that you configured during the application installation process. The default username is username, and the default password is passw0rd.

  3. Upload an image file with a JPEG, JPG, or PNG extension. The application shows the result of the object detection inference. Depending on the size of the image, it might take up to 30 seconds to upload the image.

    Uploaded image with objects detected by the API.

    The object names detected by the model are shown in the application window.

  4. Click an object name to display rectangles surrounding the corresponding objects in the image. The rectangle thickness increases with object identification confidence. In the preceding image, a fork, cup, dining table, person, and knife, are detected.

  5. Click Cup. Rectangles display around all detected cups in the image.

  6. Click Original to see the original image.

Test this model's accuracy by uploading images that contain different types of objects.

Change the inference model

The application can use pretrained models. They have different characteristics in terms of accuracy and speed.

  1. Choose one of COCO-trained models from the Tensorflow detection model zoo. (The Outputs column should be Boxes.)

  2. Copy the URL of the model from a link on the Model name column.

  3. Open /opt/object_detection_app_p3/app.py and replace the URL in the following line with the URL that you copied:

    MODEL_URL = 'http://download.tensorflow.org/models/object_detection/faster_rcnn_resnet50_coco_2018_01_28.tar.gz'
  4. Restart the application:

    systemctl restart object-detection
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte