Project update‎ > ‎

20130117-gen-PartBasedDetector building and test

posted Jan 17, 2013, 5:32 AM by 陳建儒
本週進度:
    PartBasedDetector linux編譯完成

為了確認這個程式執行結果無誤,而且可以移植windows,因此我先直接重開64位元的ubuntu環境,直接給6GB memory來解決memory leak

重編後成功執行完結果如下,與matlab版本執行結果仍有兩點差異:
  1. c++版本似乎只會顯示偵測率最高的人臉
  2. c++版本沒有直接算出一張人臉的角度
接下來再了解一下角度資訊如何抓出,及編譯時加入openMP

實驗數據如下:
test image resolution: 1024*768
detection model: Face_small_146filter.xml
maximam use memory: 3.7GB
detection time:  441.264427 s
以下為重編64位元ubuntu時要再安裝的一些library:
  1. Gtk與Qt編譯環境安裝與配置 http://goo.gl/knOvj
  2. sudo apt-get install build-essential
    sudo apt-get install gnome-devel gnome-devel-docs
    
    sudo apt-get install libqt4-dev qt4-designer qt4-doc
    sudo apt-get install kde4-devel
    sudo aptitude install kdevelop-kde4
  3. install python http://goo.gl/Pf2kP
  4. sudo add-apt-repository ppa:fkrull/deadsnakes
    sudo apt-get update
    sudo apt-get install python3.2


以下為嚐試從程式解問memory leak的一些解法,不過失敗了.....

上週memory leak問題,追到原因有兩個:
1. dynamicProgram.cpp 中在第二~三層迴圈內宣告cv:Mat變數
[demo.cpp- line 112 ]pbd.detect(im, candidates); >> [PartBasedDetector.cpp- line 87] dp_.min(parts_, pdf, Ix, Iy, Ik,         rootv, rooti); >> [DynamicProgram.cpp - line 112-174]
2. DynamicProgram.cpp 中 line154, line 160-161在每次迴圈都呼叫 match.hpp,並在裡面對cv::Mat maxv,maxi,Ixm,Iym變數配置記憶體,記憶體大小依每次迴圈而變 
 Math::reduceMax<T>(weighted, maxv, maxi);
Math::reducePickIndex<int>(Ixp, maxi, Ixm);
Math::reducePickIndex<int>(Iyp, maxi, Iym);


對第一個問題用static解決,但輸出偵測結果有錯
因此對第二個問題,修改成第一次迴圈後不create記憶體,而是resize調整記憶體大小,如下
// allocate the output array
if( !out.empty )
out.create(in[0].size(), in[0].type());//原本只有這行
else
out.resize(in[0].cols);
但結果還是有誤........因此只好改解決方向

Comments