Table of Contents

Features mit caffe für Bilder bekommen

FIXME Seite ist obsolet, wir setzen nur noch theano+dnn+cuda ein

:!: Wünsche, Bugs, Gedankenspiele und geldwerte Zuwendungen bitte an mich

Bekannte Bugs FIXME:

- doppelte json codierung

- Beim MEMORY_DATA muss ggf. ein Resize und manuelles Abziehen des Mean durchgeführt werden https://github.com/BVLC/caffe/issues/1791. (auf grapu entsteht gerade ein neuer ansatz aus dem next branch, der hat einen patch, der bereits cv::Mat direkt unterstützen soll (das uchar Problem mit Datum wäre dann hinfällig))

Notizen zur alpha:

Aktuell wird die Testversion umgebaut auf caffeHomeMade (von Frozen geclont und gepatcht) und tee, Änderungen in der Doku folgen. Auch ein Blick wert: Jetson TK1 (Tegra-Board)

Qellcode liegt aktuell auf dem tegraBoard

abgelegt in caffe/tools/:

auf grapu abgelegt in /home/bengt/tegra/bengt_playground/caffe/tools/

offen:

c++-Part

- compilieren:

g++-4.7 tools/feat_from_img.cpp -MMD -MP -pthread -fPIC -DNDEBUG -O2 -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/include -I.build_release/src -I./src -I./include -I/usr/local/cuda/include -Wall -Wno-sign-compare -std=c++11 -c -o ./own/feat_from_img.o
g++-4.7 ./own/feat_from_img.o -Wl,--whole-archive .build_release/lib/libcaffe.a -Wl,--no-whole-archive -o ./own/feat_from_img.bin -pthread -fPIC -DNDEBUG -O2 -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/include -I.build_release/src -I./src -I./include -I/usr/local/cuda/include -Wall -Wno-sign-compare -L/usr/lib -L/usr/local/lib -L/usr/lib -L/usr/local/cuda/lib -L.build_release/lib  -lcudart -lcublas -lcurand -lglog -lgflags -lprotobuf -lleveldb -lsnappy -llmdb -lboost_system -lhdf5_hl -lhdf5 -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lboost_thread -lstdc++ -lcblas -latlas -ljsoncpp

- compilieren auf dem MacBook:

g++ tools/feat_from_img.cpp -DCPU_ONLY -MMD -MP -pthread -fPIC -DNDEBUG -O2 -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/include -I.build_release/src -I./src -I./include -I/usr/local/cuda/include -Wall -Wno-sign-compare -std=c++11 -c -o ./own/feat_from_img.o; g++ ./own/feat_from_img.o -Wl,--whole-archive .build_release/lib/libcaffe.a -Wl,--no-whole-archive -o ./own/feat_from_img.bin -pthread -fPIC -DNDEBUG -O2 -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/include -I.build_release/src -I./src -I./include -I/usr/local/cuda/include -Wall -Wno-sign-compare -L/usr/lib -L/usr/local/lib -L/usr/lib -L/usr/local/cuda/lib -L.build_release/lib -lglog -lgflags -lprotobuf -lleveldb -lsnappy -llmdb -lboost_system -lhdf5_hl -lhdf5 -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lboost_thread -lstdc++ -lcblas -latlas -ljsoncpp  

- starten:

[vorher Schritte von http://caffe.berkeleyvision.org/gathered/examples/feature_extraction.html durchführen]

./own/feat_from_img.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt ./socket 1 GPU

Wenn GPU weggelassen wird nutzt er CPU.

Nach dem Start Ausgabe z.B.:

E0326 23:14:53.339955 24906 feat_from_img.cpp:223] Using CPU
E0326 23:14:56.075637 24906 upgrade_proto.cpp:619] Attempting to upgrade input file specified using deprecated transformation parameters: models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
E0326 23:14:56.075977 24906 upgrade_proto.cpp:624] Note that future Caffe releases will only support transform_param messages for transformation fields.
Time for settup net (ms) = 2850
Heimdall opens the Bifröst

Das Prog. lauscht jetzt am Socket auf Arbeit.

- Abhängigkeiten:

Neben den ganzen Abhängingkeiten von caffe kommt noch die zur libjsoncpp-dev hinzu.

Notizen

LD_LIBRARY_PATH=../caffeHomeMade/caffe/.build_release/lib:/usr/local/cuda/lib

http-Server für url via GET und POST

- client.py - starten:

python ./tools/client.py ./socket

- http-Server lauscht jetzt auf localhost:3141 - Port freigeben für 192.168.0.15 mit

iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 3141 -j ACCEPT

- alternativ:

ufw allow 3141/tcp

Testen ob was kommt

- url via GET:

curl localhost:3141/?url=http://petattack.com/wp-content/uploads/2014/07/little_cute_cat_1920x1080.jpg

- Daten via POST:

curl --data-urlencode image@./examples/images/cat.jpg localhost:3141

Antwort

{ "duration" : <Zeit für Berechnung in ms>,
<blob_name> : [[<blob_data>]], <weitere blobs wenn angefragt> }

Beispiel:

{ "duration" : 160.555,
"fc7" : [[0.0,5.653236425, ... ,0.0]] }