Table of Contents
Baur Dienst für Personen/Hintergrund
Welche Dienste laufen wo?
Das System kann unter http://api.picalike.com/enrichment/baur_enrichment.php?url=<quoted_url>
getestet werden.
testgurke.v4
Nutzer: baur * image_cloud auf TCP/8196 * cpu_extractor auf TCP/4242 für Person <- AlexNetConv * baur_enrichment auf TCP/3142 als Entrypoint für das PHP-Skript http://host:3142/baur_enrichment?key=...&url=... * feature_db auf TCP/3128
tegra01
Nutzer: picalike * gpu_extractor auf TCP/4242 für AlexNet/conv -> Person
Dienst: Personendetektion
Aufbau und Übersicht. Der grobe Ablauf sieht wie folgt aus: Mittels einer High-Level-API 'iterware.py' wird eine Liste von URLs übermittelt und für jede URL eine Klassifikation bzgl. Person ja/nein ausgegeben:
url, y_hat = obj.get_features(net_spec, [meine_url]) url = 'http://wackeldingdong.de/bild.jpg' y_hat = [-3.1]
Zu beachten ist, dass y_hat immer eine Liste ist, die bei einer SVM, eine Klasse und Trennung über +1/-1, in ein float konvertiert werden muss.
Der Dienst besteht aus drei Komponenten:
<HTML><ol></HTML>
- Feature-DB zum persistenten Speichern aller Features
- GPU-Extractor für die Conv-Features (hängt vom Bild ab)
- CPU-Extractor für das Personen-Modell (hängt vom GPU-Extractor ab)<HTML></ol></HTML>
Wo die Dienste laufen, ist oben beschrieben.
Wie werden die Dienste gestartet?
v4 testgurke in $HOME/bin: $ nohup ./featdb_http -p 3128 ../var/data/db/ &> ~/var/log/feat_db.log & $ nohup ./cpu_extractor ../etc/person_model.conf &> ~/var/log/cpu_extractor.log &
v4 gpu01 in $HOME/bin: $ nohup ./gpu_extractor ../models/alexnet/config &> ~/var/log/gpu_feat.log &
Wie werden die Dienste konfiguriert?
- featdb_http: benötigt nur ein Verzeichnis, wo die Daten gespeichert werden
- cpu_extractor: Konfiguration für das trainierte Modell. Das Modell liegt in $HOME/var/models/person_model
- gpu_extractor: Konfiguration für das trainierte Modell (AlexNet). Das Modell liegt in $HOME/var/models/alexnet/alex_net_full
Wie sieht die High-Level-API aus?
Im v4 git 'featuredb' liegt unter tests ein Beispiel 'test_distributed.py'. Selbsterklärend, allerdings wird intern ein Thread pro Extractor verwendet. Das Modul verlangt eine Konfiguration, die auf testgurke.v4/etc/person.conf liegt. Die Datei sieht wie folgt aus:
{"person.output.1": { "deps": ["alexnet.conv5.1", "person.output.1"], "text": "Person Detector" }, "hosts": { "person.output.1": "http://testgurke.v4.picalike.corpex-kunden.de:4242", "alexnet.conv5.1": "http://tegra01.picalike.corpex-kunden.de:4242" }}
Aufbau ist wie folgt: pro Dienst 'person.output.1' werden mögliche Abhängigkeiten 'deps' definiert und ein Text, damit man(n) weiß, was der Dienst macht. Dann folgt eine Auflistung aller verwendeten Extraktoren, die für die Auflösung Dienst→Host notwendig ist. Die Abhängigkeiten werden rückwärts definiert und enden mit dem Dienst selbst. (Alles noch im Fluss, aber so läuft es momentan!)
Dienst: UWSGI Baur Enrichment
Start:
nohup /home/baur/.local/bin/uwsgi --ini /home/baur/etc/baur_uwsgi.ini &> /dev/null &
Stop:
echo "q" > /tmp/baur_enrichment.ctrl