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
- 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.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein 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.
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
- Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
-
Bestimmen Sie im Abschnitt Maschinenkonfiguration den Maschinentyp als 8 vCPUs.
- Click the Customize link next in the Machine type section.
- In the Memory section, replace
.30
with8
- Wählen Sie im Bereich Firewall die Option HTTP-Traffic zulassen aus.
- Click the Management, security, disks, networking, sole tenancy link, then click the Networking tab.
- In the Network interfaces section, next to the default row, click Editcreate.
- 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. - Klicken Sie auf Erstellen, um die VM zu erstellen.
SSH into the instance
Next to the instance name, click SSH.
Enter the following command to switch to the root user:
sudo -i
Install the Object Detection API library
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
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
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/
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'
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
Using a web browser, access the static IP address that was assigned when you launched the VM instance.
Enter the username and password that you configured during the application installation process. The default username is
username
, and the default password ispassw0rd
.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.
The object names detected by the model are shown in the application window.
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.
Click Cup. Rectangles display around all detected cups in the image.
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.
Choose one of COCO-trained models from the Tensorflow detection model zoo. (The Outputs column should be Boxes.)
Copy the URL of the model from a link on the Model name column.
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'
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.
- Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
Mehr dazu, wie Sie mit AI Platform Ihr Modell so trainieren, dass es Vorhersagen für Ihr eigenes Dataset trifft
Mehr dazu, wie Sie einen Lerntransfer mithilfe der Object Detection API unter Verwendung Ihres eigenen Datasets durchführen
Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center