Dies ist Ichi Lab von RHEMS Giken.
Diesmal mit der Objekterkennungs-API von TensorFlow Erkennen Sie das Objekt, das Sie erkennen möchten Ich habe es endlich auf einem Android-Gerät versucht.
Viele hilfreiche Seiten haben mir geholfen, Trotzdem gab es so viele Dinge, die ich nicht mit nur ein oder zwei Seiten lösen konnte.
In diesem Artikel werde ich die Teile aufgreifen, über die ich gestolpert bin, und sie beschreiben. Ich hoffe, dass die Anzahl der Menschen mit ähnlichen Schwierigkeiten so weit wie möglich reduziert wird.
TensorFlow 1.15
MacBook Pro OS : Catalina 10.15 CPU : Intel Core i5 2.3GHz Memory : 8GB 2133MHz
MacBook Pro OS : Catalina 10.15 CPU : Intel Core i7 3.5GHz Memory : 16GB 2133MHz
Ich habe unterwegs aus irgendeinem Grund von 1 auf 2 gewechselt.
Grundsätzlich ist es wie in der folgenden Formel geschrieben.
TensorFlow Object Detection - Installation
Rufen Sie mit dem folgenden Befehl die neueste Quelle der Objekterkennungs-API ab.
$ git clone --depth 1 https://github.com/tensorflow/models.git
Wo PYTHONPATH eingestellt werden soll, wird in pwd
erklärt, aber wenn es vollständig beschrieben ist, ist es wie folgt.
(Es gibt einige Container, deren Stammverzeichnis "tf" anstelle von "tensorflow" lautet. Überprüfen Sie dies.)
$ export PYTHONPATH=$PYTHONPATH:/tensorflow/models/research:/tensorflow/models/research/slim
Wenn Sie Docker verwenden, um es in einem Container auszuführen, gibt es verschiedene Typen, wie auf der offiziellen Seite unten gezeigt. Seien Sie vorsichtig, wenn Sie "neueste" (neueste Version) verwenden.
Denn ab November 2019 zum Zeitpunkt des Schreibens ist ** Object Detection API Dies liegt daran, dass TensorFlow 2.0 ** nicht unterstützt wird.
Ebenso ist es bei der Installation mit dem Befehl pip
wichtig, die Version von TensorFlow zu überprüfen.
Wenn Sie dies überprüfen möchten, können Sie den folgenden Befehl eingeben.
$ pip list | grep tensor
tensorboard 1.15.0
tensorflow 1.15.0rc3
tensorflow-estimator 1.15.1
Wenn Sie die Version von 2.0 auf 1.X ändern möchten, führen Sie den folgenden Befehl aus. (In diesem Beispiel auf 1,15 geändert)
$ pip install tensorflow==1.15.0rc3
Übrigens ist der Unterschied zwischen dieser Version ziemlich wichtig, also werde ich es hinzufügen, Der offizielle TensorFlow hat ein Skript vorbereitet, das automatisch konvertiert wird, selbst wenn die Version 2.0 ist. Es wird jedoch als "außer für Beiträge" (ohne Beiträge) beschrieben.
Migrate your TensorFlow 1 code to TensorFlow 2
Wenn Sie die Objekterkennungs-API model_builder_test.py
in TensorFlow 2.0 ausführen,
Es wird wie folgt fehlschlagen.
AttributeError: module 'tensorflow' has no attribute 'contrib'
Sie stecken mit einem Fehler bei Contrib fest. Dies bedeutet, dass derzeit keine automatischen Konvertierungsskripte verwendet werden können.
Haben Sie model_builder_test.py
übrigens sicher ausgeführt und es wurde als OK angezeigt?
model_builder_test.py
führt im Verzeichnis models / research
Folgendes aus:
$ python object_detection/builders/model_builder_test.py
Bei Erfolg wird OK wie unten gezeigt angezeigt. (Weil es lang ist, werden einige Teile weggelassen)
Running tests under Python 3.6.8: /usr/local/bin/python
[ RUN ] ModelBuilderTest.test_create_faster_rcnn_model_from_config_with_example_miner
...
[ RUN ] ModelBuilderTest.test_unknown_ssd_feature_extractor
[ OK ] ModelBuilderTest.test_unknown_ssd_feature_extractor
----------------------------------------------------------------------
Ran 16 tests in 0.313s
Übrigens, mit Ausnahme von TensorFlow </ b> hatte ich keine Wirkung, auch wenn mir die Version egal war Ich denke, Sie können die neueste installieren. Das ist alles für den Aufbau der Umwelt.
Erstellen Sie Lehrerdaten, um die Objekte zu erkennen, die Sie erkennen möchten. Um Lehrerdaten zu erstellen, müssen Sie viele Bilder vorbereiten, die Sie erkennen möchten.
Wenn Sie Schwierigkeiten haben, selbst zu sammeln, gibt es auch ein praktisches Tool namens "google-images-download" Wenn Sie interessiert sind, überprüfen Sie es bitte und verwenden Sie es.
Lassen Sie uns nun die Lehrerdaten erklären. Die Lehrerdaten werden im von TensorFlow empfohlenen TFRecord-Format </ b> erstellt. TFRecord ist eine einfache Form zum Speichern einer Reihe von Binärdatensätzen. Die Daten werden serialisiert (als Array-Daten gespeichert) und können kontinuierlich gelesen werden. Es gibt ungefähr zwei Möglichkeiten, Daten im TFRecord-Format zu erstellen.
Anmerkungen sind sogenannte Tagging. Während der Anzeige von Fotos und Videos ist es eine Aufgabe zu lehren, "dieser Teil ist das". Ich habe dafür ein Tool von Microsoft namens VoTT </ b> verwendet. VoTT
Wie Sie sehen können, ist es ein Werkzeug, das verschiedene schwierige Punkte zu verwenden hat, aber Dies wird in dieser Hinsicht empfohlen, da der Aufwand für die Konvertierung in das TFRecord-Format entfällt.
Mit der von TensorFlow bereitgestellten Bibliothek kann aus einem Bild eine Datei im TFRecord-Format generiert werden. Mit dem TFRecord, der im folgenden offiziellen Tutorial generiert wurde, Der von VoTT erzeugte TFRecord hatte leicht unterschiedliche Elementnamen und konnte nicht zusammen gemischt und trainiert werden. Verwendung von TFRecords und tf.Example
Dieses Dokument wird nützlicher sein. using_your_own_dataset.md
Die Geschichte hier wird lang sein, deshalb habe ich sie in einem anderen Artikel zusammengefasst. Schauen Sie also bitte nach, wenn Sie möchten. Hinweise zum Erstellen von TFRecord-Dateien zur Objekterkennung
Die Erklärung hier basiert auf der Annahme, dass alle Verzeichnisse auf "Modellen / Forschung" basieren.
Sobald Sie die Datei im TFRecord-Format bereit haben, können Sie mit dem Lernen beginnen. Hier lernen wir Ihr eigenes Original basierend auf dem vorhandenen Lernmodell "Transferlernen". Wir werden mit der Methode zur Erstellung eines individuelleren Lernmodells fortfahren. Beim Transferlernen werden Gewichte verwendet, die im Voraus aus umfangreichen Daten gelernt wurden. Es wird erwartet, dass auch mit einer kleinen Menge von Trainingsdaten eine ausreichende Leistung erzielt werden kann.
Laden Sie zunächst das trainierte Modell für das Transferlernen herunter. Dieses Mal konnte ich es nicht in anderen japanischen Artikeln finden. Fahren wir mit dem neuen "MobileNet v3" fort.
Das trainierte Modell kann von der folgenden Seite heruntergeladen werden.
Tensorflow detection model zoo
Laden Sie in diesem Fall den Namen "ssd_mobilenet_v3_large_coco" herunter.
Bitte beachten Sie, dass dieses Modell nur mit den neuesten Quellen funktioniert, die Mitte Oktober 2019 aktualisiert wurden.
Platzieren Sie das heruntergeladene Modell im Verzeichnis object_detection
.
Wenn Sie es mit einem Befehl ausführen möchten, gehen Sie wie folgt vor:
$ wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v3_large_coco_2019_08_14.tar.gz
$ tar zxvf ssd_mobilenet_v3_large_coco_2019_08_14.tar.gz
Die Dateistruktur des Trainingsmodells ist grundsätzlich wie folgt.
Bearbeiten Sie zu Beginn des Übertragungslernens den Inhalt der Datei "pipeline.config" und verwenden Sie sie.
Dieser Abschnitt beschreibt das vorbereitete TFRecord-Dateiverzeichnis. Die TFRecord-Datei enthält separate Verzeichnisse für die Schulung (Lehrer) und die Überprüfung. Im Allgemeinen beträgt das Verhältnis Training: Validierung 8: 2, dh 80% der Daten sind für Training und die restlichen 20% für Validierung. (Aus dem Buch "Praktisches maschinelles Lernen mit Scicit-Learn und TensorFlow" P30) Natürlich ist es möglich zu lernen, auch wenn Sie es nicht richtig teilen. Unten ist die Verzeichnisstruktur. (Zug steht für Training, val steht für Validierung)
Die TFRecord-Dateinamen sollten mit Seriennummern anstelle von separaten Nummern vereinheitlicht werden. Zum Beispiel nennen wir es hier wie folgt.
Wie die Datei hier benannt wird, hängt mit der Einstellung der folgenden Konfigurationsdatei zusammen.
Öffnen Sie Pipeline.config
in dem trainierten Modell, das Sie zuvor heruntergeladen haben.
Hier können Sie verschiedene Parameter wie Stapelgröße, Gewichtung und Bilderweiterung anpassen. Wir werden jedoch die Elemente erläutern, die Sie häufig bearbeiten.
(Auszug aus der aktuellen Konfiguration zur Erklärung)
pipeline.config
model {
ssd {
num_classes: 1
num_classes
:
Dies ist eine Einstellung der zu klassifizierenden Nummer.
Es wird relativ oben in der Konfigurationsdatei geschrieben.
pipeline.config
train_config: {
batch_size: 32
num_steps: 10000
optimizer {
momentum_optimizer: {
learning_rate: {
cosine_decay_learning_rate {
total_steps: 10000
warmup_steps: 10000
fine_tune_checkpoint: "./object_detection/ssd_mobilenet_v3_large_coco/model.ckpt"
}
batch_size
:
Bei Verwendung der probabilistischen Gradientenabstiegsmethode, um die Auswirkung von Ausreißern zu verringern
Trainieren Sie den Datensatz in mehreren Teilmengen.
Die Anzahl der in jeder Teilmenge enthaltenen Daten wird als Stapelgröße bezeichnet.
Dieser Wert ist oft der Wert von 2 nach der n-ten Potenz, wie es im Bereich des maschinellen Lernens üblich ist.
Und je größer dieser Wert ist, desto mehr Last wird während des Lernens aufgebracht, und je nach Umgebung kann der Prozess absterben und nicht lernen.
num_steps
:
Die Anzahl der zu lernenden Schritte.
Die Anzahl der Schritte kann auch im Befehl beim Ausführen des Lernens angegeben werden.
Soweit ich es versucht habe, hat die Befehlsspezifikation Vorrang.
total_steps
und warmup_steps
:
Ich untersuche, weil es sich um ein Element handelt, das nicht in der Konfiguration anderer Modelle enthalten war.
total_steps muss größer oder gleich warmup_steps sein.
(Wenn diese Bedingung nicht erfüllt ist, tritt ein Fehler auf und das Lernen beginnt nicht.)
fine_tune_checkpoint
:
Gibt ein Modell für das Transferlernen an.
Es ist in Ordnung, wenn Sie das Verzeichnis mit dem heruntergeladenen Lernmodell bis "~ .ckpt" schreiben.
Dieser Artikel war nicht enthalten, als ssd_mobilenet_v3 heruntergeladen wurde.
Deshalb habe ich es selbst hinzugefügt.
Die meisten Modelle haben diesen Artikel bereits.
Diese Zeile ist nicht erforderlich, wenn Sie kein Transferlernen durchführen.
pipeline.config
train_input_reader: {
tf_record_input_reader {
input_path: "./object_detection/test0001/train/hoge????.tfrecord"
}
label_map_path: "./object_detection/test0001/tf_label_map.pbtxt"
}
eval_input_reader: {
tf_record_input_reader {
input_path: "./object_detection/test0001/val/hoge????.tfrecord"
}
label_map_path: "./object_detection/test0001/tf_label_map.pbtxt"
}
input_path
:
Geben Sie das Verzeichnis der vorbereiteten TFRecord-Dateien für die Schulung und Überprüfung an.
In diesem Fall haben wir es beispielsweise mit der Seriennummer "hoge0000.tfrecord" benannt. Schreiben Sie es also als "hoge ????. Tfrecord".
label_map_path
:
Geben Sie das vorbereitete Etikett an. Es gibt kein Problem mit der gleichen Spezifikation für Zug und Auswertung.
Nach dem Schreiben der Konfigurationsdatei ist es Zeit, mit dem Lernen zu beginnen. Verwenden Sie für das Training eine Datei mit dem Namen "model_main.py" im Verzeichnis "object_detection". Eine Beschreibung der Laufzeitargumente.
--model_dir
:
Geben Sie das Speicherziel der Trainingsdaten an.
Während des Lernens wird im angegebenen Verzeichnis eine Datei mit dem Namen ".ckpt ~" erstellt.
--pipeline_config_path
:
Geben Sie die zu verwendende Konfigurationsdatei an.
Geben Sie die Konfigurationsdatei an, die Sie zuvor bearbeitet haben.
--num_train_steps
:
Geben Sie die Anzahl der Lernvorgänge an.
Diese Option wird nicht benötigt, wenn Sie die in config angegebene Nummer implementieren möchten.
Wenn Sie anders als config trainieren möchten, hat die hier angegebene Anzahl Vorrang. (Ergebnis des tatsächlichen Versuchs)
Das Folgende ist ein Ausführungsbeispiel.
$ python object_detection/model_main.py \
--pipeline_config_path="object_detection/ssd_mobilenet_v3_large_coco/pipeline.config" \
--model_dir="./object_detection/test0001/save" \
--alsologtostderr
Da es viele Optionen gibt und die Eingabe jedes Mal schwierig ist, ist die Ausführung einfacher, wenn Sie ein Shell-Skript erstellen.
#! /bin/bash
PIPELINE_CONFIG_PATH="./object_detection/ssd_mobilenet_v3_large_coco.config"
MODEL_DIR="./object_detection/test0001/save"
NUM_TRAIN_STEPS=10000
cd '/tensorflow/models/research'
python object_detection/model_main.py \
--pipeline_config_path=$PIPELINE_CONFIG_PATH \
--model_dir=$MODEL_DIR \
# --num_train_steps=$NUM_TRAIN_STEPS \
--alsologtostderr
"Oh, ich kann die Shell, die ich gemacht habe, nicht laufen lassen ...?" Haben Sie vergessen, Ihre Berechtigungen zu ändern?
$ chmod 775 hoge.sh
Wenn Sie glauben, dass das Lernen begonnen hat, kann dies wie folgt geschehen.
~ session_manager.py:500] Running local_init_op.
~ session_manager.py:502] Done running local_init_op.
~ basic_session_run_hooks.py:606] Saving checkpoints for 0 into {Prüfpunkt speichern Das angegebene Verzeichnis/Dateiname}.ckpt
Killed
Es gibt mehrere Gründe, warum der Prozess stirbt. In beiden Fällen ist es sehr wahrscheinlich, dass der Betriebsumgebung die Ressourcen ausgehen.
Hier werde ich die Mittel vorstellen, die ich gelöst habe, als ich dieses Phänomen erlebt habe.
Dies ist eine Methode, die nützlich sein kann, wenn Sie sie in einem Docker-Container ausführen. Öffnen Sie zuerst die Einstellungen. Wählen Sie Einstellungen → Registerkarte Erweitert </ b>, um die Ressourcen zu erhöhen.
Dies wird durch Festlegen der Pipeline.config behoben.
Welche Art von Parameterkombination beendet den Prozess? Ich denke, es hängt von der Betriebsumgebung und der Menge und Größe der verwendeten Lehrerdaten ab. Zuallererst kann es gelöst werden, indem der Chargengrößenwert reduziert wird Wenn Sie sich hier Sorgen machen, probieren Sie es aus.
Die Trainingsdaten werden jederzeit in dem Speicherverzeichnis gespeichert, das bei der Ausführung von model_main.py
angegeben wird.
Die Daten werden zu dem Zeitpunkt gespeichert, zu dem "Speichern" angezeigt wird, wie unten gezeigt, während des Lernens.
In dieser Phase können Sie die Situation während des Lernens mit dem unten beschriebenen "Tensorboard" visualisieren.
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 500: object_detection/test0001/save/model.ckpt-500
I1012 08:29:56.544728 139877141301056 estimator.py:2109] Saving 'checkpoint_path' summary for global step 500: object_detection/test0001/save/model.ckpt-500
Die Visualisierung von Trainingsdaten ist unerlässlich und Tensorboard ist dabei sehr hilfreich.
Sie können Tensorboard mit dem folgenden Befehl starten.
$ tensorboard --logdir=object_detection/test0001/save
--logdir
:
** Geben Sie hier das Verzeichnis an, in dem Sie die Trainingsdaten speichern möchten, die Sie zu Beginn des Lernens angegeben haben.
Wenn Sie das Speicherziel der in der Vergangenheit durchgeführten Lernergebnisse angeben, können Sie es auch nach Abschluss des Lernens erneut anzeigen.Um Tensorboard in Ihrem Webbrowser anzuzeigen, gehen Sie zu Ihrem lokalen Host. Standardmäßig lautet die Portnummer 6006.
http://localhost:6006/
Wenn Sie in einer Docker-Containerumgebung ausgeführt werden, stellen Sie sicher, dass Sie Zugriff auf -p 6006: 6006
haben, wenn Sie Docker Run
ausführen.
Ich habe die Porteinstellungen in docker-compose.yml
aufgelistet.
Selbst wenn Sie Ihr Lernen visualisieren können, ist es schmerzhaft, wenn Sie nicht verstehen, wie Sie es betrachten sollen. Ich habe den Inhalt meiner Forschung zusammengefasst, also hoffe ich, dass Sie darauf verweisen können. GRAPHS Das Diagramm wird automatisch aus der Verarbeitung des Quellcodes generiert.
Artikel | Erläuterung |
---|---|
Run | Sie können das Unterverzeichnis wechseln, in dem sich das Protokoll befindet |
Upload | Laden Sie die Tensorflow-Modelldatei hoch |
Trace inputs | Von Knotenabhängigkeiten verfolgt werden |
Color | Wählen Sie eine Farbcodierungsmethode - Structure :Modellkonfiguration (Netzwerkkonfiguration) - Device :Verarbeitetes Gerät (CPU vs GPU) - Compute time :Verarbeitungszeit - Memory :Speichernutzung - TPU Compatibility :Auf Tensor-Verarbeitungseinheit laufen lassen |
SCALARS
Artikel | Erläuterung |
---|---|
Show data download links | Zeigen Sie einen Link an, über den Sie das Diagramm speichern können. Sie können das CSV- oder JSON-Format auswählen. |
ignore outliners in chart scaling | Gibt an, ob das Diagramm skaliert werden soll, um Ausreißer zu vermeiden (überprüfen Sie dies, um dies zu vermeiden). |
Tooltip sorting method | Werkzeugchip-Bestellung - default :Alphabetischer Reihenfolge - descending :In absteigender Reihenfolge des Wertes - ascending :In aufsteigender Reihenfolge des Wertes - nearest :Nah am Mauszeiger |
Smoothing | Glättung von Graphen |
Horizontal Axis | Angeben der horizontalen Achse (X-Achse) des gestrichelten Liniendiagramms - STEP :Schritt (Anzahl der Ausführungen) - RELATIVE :Ausführungszeit (Unterschied zum ersten Mal) - WALL :Tageszeiten - Runs :Grafik ein- / ausblenden |
Referenz: Visualisierung des Lernens mit TensorBoard Als nächstes werde ich jedes der Hauptdiagramme erklären. Vorher werde ich eine Beschreibung der Wörter geben, die Sie zur Erklärung kennen müssen.
Referenz: Bedeutung der IoU (Bewertungsindex) und Strenge des Werts Referenz: [Für Anfänger] Erläuterung der Bewertungsindizes für Klassifizierungsprobleme beim maschinellen Lernen (korrekte Antwortrate, Präzisionsrate, Rückrufrate usw.)
Das Folgende ist ein Auszug mit Bezug auf die Erläuterung der in object_detection /metrics / coco_tools.py
beschriebenen Elemente.
Artikel | Erläuterung |
---|---|
Precision/mAP | Die durchschnittliche Genauigkeit der Klasse, die die IOU-Schwellenwerte im Bereich von 5 bis 95 in 5 Schritten gemittelt hat. |
Precision/[email protected] | Durchschnittliche Genauigkeit von 50% IOU |
Precision/[email protected] | Durchschnittliche Genauigkeit von 75% IOU |
Precision/mAP (small) | Durchschnittliche Genauigkeit kleiner Objekte (weniger als 32 x 32 px) |
Precision/mAP (medium) | Durchschnittliche Genauigkeit mittelgroßer Objekte(32×32 px〜96×96 px) |
Precision/mAP (large) | Durchschnittliche Genauigkeit großer Objekte(96×96 px〜10000×10000 px) |
Recall/AR@1 | Prozentsatz der Durchschnittswerte, die in einer einzelnen Erkennung korrekt gefunden wurden |
Recall/AR@10 | Prozentsatz der Durchschnittswerte, die in 10 Erkennungen korrekt gefunden wurden |
Recall/AR@100 | Prozentsatz der Durchschnittswerte, die bei 100 Erkennungen korrekt gefunden wurden |
Recall/AR@100 (small) | Durchschnittlicher Rückruf kleiner Objekte, die 100 Mal erkannt wurden |
Recall/AR@100 (medium) | Durchschnittlicher Rückruf von 100-mal erkannten mittleren Objekten |
IMAGES
Bilddaten anzeigen. Sie können den Unterschied zwischen der richtigen Antwort der Überprüfungsdaten und dem Inferenzergebnis in Einheiten der .ckpt-Datei (Prüfpunkt) überprüfen.
Wenn das Training beendet ist, ist es endlich Zeit, die Daten in ein Inferenzdiagramm umzuwandeln. Insbesondere wird die durch Lernen erstellte .ckpt-Datei in eine .pb-Datei konvertiert.
Es gibt mehrere Quellen für die Konvertierung im Verzeichnis "object_detection".
export_inference_graph.py
export_tflite_ssd_graph.py
** Um es auf Android zu testen, wird es in das ** .tflite-Format konvertiert, also ** verwenden Sie das letztere **.
export_inference_graph.py
Eine Beschreibung der Laufzeitargumente.
--input_type
:
Geben Sie für das Inferenzdiagramm je nach Benutzer eine der folgenden drei an
image_tensor
:encoded_image_string_tensor
: 1D-Tensor [Keine]
Enthält codierte PNG- oder JPEG-Bilder.
Wenn mehrere Bilder bereitgestellt werden, wird davon ausgegangen, dass die Bildauflösungen gleich sind.
tf_example
: 1-dimensionaler Stringtensor [Keine]
Wenn mehrere Bilder bereitgestellt werden, einschließlich serialisierter TF-Beispielprotokolle, wird davon ausgegangen, dass die Bildauflösungen gleich sind.
--pipeline_config_path
:
Geben Sie die Konfigurationsdatei an, die während des Trainings verwendet wird.
--trained_checkpoint_prefix
:
Geben Sie die Datei "model.ckpt-XXXX" an, die als Speicherziel für die Trainingsdaten erstellt wurde.
Geben Sie für XXXX die letzte (größte) Anzahl der durchgeführten Lernschritte an.
Wenn es beispielsweise 10000 Mal ausgeführt wird, lautet es "model.ckpt-10000".
--output_directory
:
Geben Sie das Verzeichnis an, das Sie exportieren möchten.
Im angegebenen Verzeichnis wird eine Datei mit genau der gleichen Struktur wie die Dateistruktur des ersten heruntergeladenen Modells erstellt.
Das Folgende ist ein Ausführungsbeispiel.
$ python object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path object_detection/ssd_mobilenet_v3_large_coco/pipeline.config \
--trained_checkpoint_prefix object_detection/test0001/save/model.ckpt-10000 \
--output_directory object_detection/test0001/output
export_tflite_ssd_graph.py
Ein Programm, das ein trainiertes Modell in ein .tflite-kompatibles Modell konvertiert.
Die Argumente sind im Grunde die gleichen wie "export_inference_graph.py".
(Es gibt keinen --input_type
)
Das Folgende ist ein Ausführungsbeispiel.
$ python object_detection/export_tflite_ssd_graph.py \
--pipeline_config_path=object_detection/ssd_mobilenet_v3_large_coco/pipeline.config \
--trained_checkpoint_prefix=object_detection/test0001/save/model.ckpt-10000 \
--output_directory=object_detection/test0001/tflite \
--add_postprocessing_op=true
Zwei Dateien, "tflite_graph.pb" und "tflite_graph.pbtxt", werden in dem durch "--output_directory" angegebenen Verzeichnis erstellt.
Verwenden Sie tflite_convert
, um in das tflite-Format zu konvertieren.
Dieser Konverter sollte von Anfang an enthalten sein.
Wenn Sie "tflite_convert --help" eingeben, wird die Verwendung beendet.
Da es viele Optionen zum Hinzufügen gibt, habe ich es wie folgt in einem Shell-Skript zusammengefasst.
Ändern Sie das Verzeichnis nach Ihren Wünschen.
Außerdem erkenne ich, dass --input_shapes
wahrscheinlich ein Wert ist, der zum Zeitpunkt des Lernens mit dem image_resizer
der Konfiguration übereinstimmt, aber es gibt keine Bestätigung ...
Die Bedeutungen der Zahlen sind (Stapelgröße, Eingabebildhöhe, Eingabebildbreite, Eingabebildtiefe (RGB-Kanal)).
Converter command line reference
#! /bin/bash
OUTPUT_FILE="object_detection/test0001/tflite/test.tflite"
GRAPH_DEF_FILE="object_detection/test0001/tflite/tflite_graph.pb"
INTERFACE_TYPE="FLOAT"
INPUT_ARRAY="normalized_input_image_tensor"
OUTPUT_ARRAYS="TFLite_Detection_PostProcess,TFLite_Detection_PostProcess:1,TFLite_Detection_PostProcess:2,TFLite_Detection_PostProcess:3"
INPUT_SHAPES="1,300,300,3"
cd '/tensorflow/models/research'
tflite_convert \
--output_file=$OUTPUT_FILE \
--graph_def_file=$GRAPH_DEF_FILE \
--inference_type=$INTERFACE_TYPE \
--input_arrays=$INPUT_ARRAY \
--input_shapes=$INPUT_SHAPES \
--output_arrays=$OUTPUT_ARRAYS \
--default_ranges_min=0 \
--default_ranges_max=6 \
--mean_values=128 \
--std_dev_values=127 \
--allow_custom_ops
Außerdem habe ich mehrere Anweisungen zum Installieren von "bazel" und "toco" auf anderen Websites gefunden, die jedoch nur mit dieser Befehlszeile ohne diese möglich waren. (Ich habe versucht, diese Methoden genau zu sein, aber das Ergebnis war das gleiche)
Wenn zu diesem Zeitpunkt die Version von TensorFlow ** 1.12.0rc0 ist, ist dies fehlgeschlagen **, Mit ** 1.15.0rc3 ** funktionierte genau der gleiche Befehl **.
Darüber hinaus wurde in der offiziellen Beschreibung die Python-API empfohlen. Converter command line reference
Es ist lange her, aber es ist endlich in Produktion.
Installieren wir zunächst "Android Studio". Wenn Sie andere Tools einfacher zu verwenden finden, können Sie sie verwenden.
Laden Sie als Nächstes die Beispielsammlung vom Beamten herunter.
$ git clone --depth 1 https://github.com/tensorflow/examples.git
Öffnen Sie nach dem Start von Android Studio examples / lite / examples / object_detection / android
.
Platzieren Sie Ihre test.tflite
und labelmap.txt
im Verzeichnis examples / lite / examples / object_detection / android / app / src / main / assets
.
labelmap.txt
ist eine Textdatei, in der die von Ihnen getaggten Tag-Namen aufgelistet sind.
Wenn Sie beispielsweise zwei Arten von Tag-Namen vorbereiten, "apple" und "orange", lautet die Textdatei wie folgt.
labelmap.txt
???
apple
orange
Wichtig ist, dass die erste Zeile "???" lautet.
Es ist lang, aber bearbeiten Sie "DetectorActivity.java" im Verzeichnis "examples / lite / examples / object_detection / android / app / src / main / java / org / tensorflow / lite / examples / Detection /".
DetectorActivity.java
private static final boolean TF_OD_API_IS_QUANTIZED = false; //true->false
private static final String TF_OD_API_MODEL_FILE = "test.tflite"; //detect.tflite -> my tflite
private static final String TF_OD_API_LABELS_FILE = "file:///android_asset/labelmap.txt"; //my txt
Bearbeiten Sie dann "build.gradle" im Verzeichnis "examples / lite / examples / object_detection / android / app /".
Kommentieren Sie Folgendes in Zeile 40 aus: (Wenn Sie hier keinen Kommentar abgeben, werden diese beim Erstellen durch die Standard-Beispieldaten ersetzt.)
build.gradle
apply from:'download_model.gradle' //Auskommentieren
Sobald Sie dies getan haben, müssen Sie es nur noch erstellen, auf Ihrem Gerät ausführen und sehen! Herzlichen Glückwunsch, wenn Sie es gut versuchen können.
Unten finden Sie eine Referenzseite für Android
Training and serving a realtime mobile object detector in 30 minutes with Cloud TPUs How to Train Your Own Custom Model with Tensorflow Object Detection API and Deploy It into Android with TF Lite Detecting Pikachu on Android using Tensorflow Object Detection
Was haben Sie gedacht? Es sieht aus wie eine Übersichtsseite auf einer anderen Seite, aber Zumindest denke ich, dass wir einige Informationen behandelt haben, die wir möglicherweise benötigen, um die Objekterkennungs-API von TensorFlow zu verwenden.
Insbesondere hat TensorFlow je nach Version ein unterschiedliches Detailverhalten. Da die Versionen der verschiedenen Referenzseiten, die zu dieser Zeit verwendet wurden, unterschiedlich sind, denke ich, dass viele Menschen die gleichen Schwierigkeiten hatten.
Es gibt noch viele Teile, die ich nicht verstehe, aber ich hoffe, es hilft. Vielen Dank für das Lesen des langen Artikels.
Recommended Posts