Table of Contents
Features mit caffe für Bilder bekommen
Seite ist obsolet, wir setzen nur noch theano+dnn+cuda ein
Wünsche, Bugs, Gedankenspiele und geldwerte Zuwendungen bitte an mich
- 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/:
- base64.{h,cpp}
- client.py
- feat_from_img.cpp
auf grapu abgelegt in /home/bengt/tegra/bengt_playground/caffe/tools/
offen:
- blobs können noch nicht an http-Server übergeben werden (nur am Socket variabel), aktuell immer fc7
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]] }