##はじめに
GitHub上のDeepCascadeモデルをinstallしようとして挫折した。
DeepCascadeモデルをインストールする(1)
http://qiita.com/masataka46/items/61032ba4470e35557389
DeepCascadeモデルをインストールする(2)
http://qiita.com/masataka46/items/df3b9aba6fa7dc6bbff5
問題点の多くは、元々のコードに対して付加した部分
src/objects_detection/GpuVeryFastIntegralChannelsDetector.cpp
などだと思われる。よって、方針を変えて、元々のコードdoppiaをインストールする。
doppiaのコードはこちら
https://bitbucket.org/rodrigob/doppia
##環境
Ubuntu14.04
GitHub上のDeepCascadeモデルのdependenciesはインストール済み
##step 1
以下、OverViewに従って進める。
まずcommon_settings.cmake
の338行あたりのコンピュータ名を変更する。
elseif(${HOSTNAME} STREQUAL "the_name_of_your_machine")
# change the_name_of_your_machine to what /bin/hostname returns
message(STATUS "Using ohmasa-com compilation options")
のthe_name_of_your_machine
を自分のコンピュータ名に変更。次に
./generate_protocol_buffer_files.sh
を実行し、問題ないか確認する。
##step 2
step 2ではCPUのみでのコンパイルを行う。
cd doppia/src/applications/ground_estimation
cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . && make -j4
cmake . && make -j4 && ./ground_estimation -c test.config.ini
cd doppia/src/applications/stixel_world
cmake . && make -j2 && OMP_NUM_THREADS=4 ./stixel_world -c fast.config.ini --gui.disable false
cmake . && make -j2 && OMP_NUM_THREADS=4 ./stixel_world -c fast_uv.config.ini --gui.disable false
と、ここまで問題なくでも画面などが表示される。次が問題のstep 3。
##step 3
まずは指示通り進めてみる。
cd doppia/src/applications/objects_detection
cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . && make -j4
.....
.....
/../../../libs/cudatemplates/include/cudatemplates/error.hpp:44:26: fatal error: cuda_runtime.h: そのようなファイルやディレクトリはありません
#include <cuda_runtime.h>
^
と出た。このエラーはGitHubヴァージョンでは出てこなかったものだ。cuda_runtime.h
を検索したところ、/usr/local/cuda-8.0/include
にあった。一方で
echo $CPLUS_INCLUDE_PATH
としたところ、/usr/local/cuda-8.0/include
はなかったので、.bashrc
に追加。
export CPLUS_INCLUDE_PATH=/usr/local/cuda-8.0/include:$CPLUS_INCLUDE_PATH
bash
して再度makeする。
bash
make clean
make -j4
.....
.....
Linking CXX executable objects_detection
[100%] Built target objects_detection
と、初めて成功した。次に
make clean
cmake .
make -j2 && OMP_NUM_THREADS=4 ./objects_detection -c cvpr2012_very_fast_over_bahnhof.config.ini --gui.disable false
としたところ、
.....
.....
Linking CXX executable objects_detection
[100%] Built target objects_detection
.....
.....
Reading files:
../../../data/sample_test_images/bahnhof/image_00000000_0.png
../../../data/sample_test_images/bahnhof/image_00000000_1.png
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "doppia_protobuf.DetectorModel" because it is missing required fields: detector_type
.....
.....
2016-11-20 19:10:16 {7fa4a802e840} [ SoftCascadeOverIntegralChannelsModel ] : Warning: No semantic category found in model, assuming a pedestrian detector
2016-11-20 19:10:16 {7fa4a802e840} [ check_stages_and_range_visitor ] : Warning: Scale -1 is almost fine, min (x, y) == (0, 0), max (x,y) == (7, 15), width, height == (8, 16), (only touches left, top, border(s))
2016-11-20 19:10:16 {7fa4a802e840} [ check_stages_and_range_visitor ] : Warning: Not touching the borders indicates that the model is suboptimal regarding detection quality (was trained with doppia v1, instead of v2)
.....
.....
A std::exception was raised: This executable was compiled without support for GpuVeryFastIntegralChannelsDetector
terminate called after throwing an instance of 'std::runtime_error'
what(): This executable was compiled without support for GpuVeryFastIntegralChannelsDetector
中止 (コアダンプ)
などとエラーになった。この中で
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "doppia_protobuf.DetectorModel" because it is missing required fields: detector_type
という部分が怪しい。調べてみると、コードのissue内に同様のエラーが出ていた。
https://bitbucket.org/rodrigob/doppia/issues/80/gpuveryfastintegralchannelsdetector
ここの解決法に従って以下のようにCMakeLists.txt
の冒頭に追加。
set(USE_GPU ON CACHE BOOL "Should the GPU be used ?" )
再度make
すると、デモが立ち上がり、成功した。他のmakeも確かめる。まずこれ。
cmake . && make -j2 && OMP_NUM_THREADS=4 ./objects_detection -c cvpr2012_inria_pedestrians.config.ini --gui.disable false
これもちゃんとデモが立ち上がった。次は路上で人をdetectionするこれ。
cmake . && make -j2 && OMP_NUM_THREADS=4 ./objects_detection -c cvpr2012_chnftrs_over_bahnhof.config.ini --gui.disable false
これもちゃんと稼働した。最後はfacedetectionのこれ。
cmake . && make -j2 && ./objects_detection -c eccv2014_face_detection_pascal.config.ini --gui.disable false
これもうまくいった。
##step 4
ここではobjects_detection_lib
ディレクトリでcmake、makeを行う。
cd doppia/src/applications/objects_detection_lib
cmake.
make -j4
問題なく成功したようだ。
##step 5
次にstep 5へ進む。ここではいよいよ学習を行った。
cd doppia/src/applications/boosted_learning
./run_speedy_training.sh
.....
.....
Error rate stable at zero until 100
Average speed in the last 100 iterations is 23.199 [Hz]
Error rate stable at zero until 600
Average speed in the last 600 iterations is 23.558 [Hz]
Error rate stable at zero until 1100
Average speed in the last 1100 iterations is 23.553 [Hz]
Error rate stable at zero until 1600
Average speed in the last 1600 iterations is 23.547 [Hz]
Error rate stable at zero until 2047
Total time for the 2048 iterations is 86.950 [seconds]
Time elapsed in seconds: 86
Time elapsed while producing strong classifier for training round 2: 00:01:26
Finished the 3 bootstrapping stages. Model was trained over 11468 samples (2468 positives, 9000 negatives).
Final model saved at 2016_11_21_2811_fast_training
Time elapsed in seconds: 4681
Time elapsed for all training and boostrapping rounds: 01:18:01
End of game. Have a nice day !
End of game, have a nice day.
+ echo Training finished.
Training finished.
1時間18分で学習が終了した。Training stageが50以降はErrorがほぼ0。過適合してないか?