Deformable Part Model + UpperBodyDetector + HumanPoseEstimation

1. 关系

HumanPoseEstimation ---> UpperBodyDetector ---> DPM

箭头表示依赖关系。

2. 版本依赖

UpperBodyDetector v1.04需要 DPM 3.1,也就是 voc-release3.1.tgz

从voc-release 4.01 开始,model  structure发生了变化,加入了语法规则。所以除非修改 UpperBodyDetector 源码,v1.04不能与voc-release 4.01版本共用


3. 编译平台及结果

Windows: W7 + VS2010 + Matlab 2009a

C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL

Mac OS X: ML 10.8.5 + XCode 4.5.1 + Matlab 2012a

3.1 voc-release3.1

Mac 下, 直接运行compile成功

Windows下,报错。参照 voc-release 4.01 下的cc源文件,搞定 !

其实也就是缺少一些预定义等

#define int32_t  int

#define bzero(a, b) memset(a, 0, b)   
int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; } 

注:特别注意 features.cc!!! 有计算上的很细微的差别,不能copy!!!

3.2 voc-release 4.01

Mac下,直接compile成功

Windows下,直接运行compile成功

3.3 CALVIN Upper Body Detector v1.04

很简单,没有external C/C++ 文件。就是需要用到 voc-release3.1。

还有个OpenCV 的face detection的,可选项

3.4 Human Pose Estimation in Still Images 1.21

Windows下, 直接installmex 成功; 直接运行没有问题

Mac下, 直接installmex 成功;运行报错:

Error using  .* 
Integers can only be combined with integers of the same class, or
scalar doubles.
Error in pm2segms (line 74)
    segm(p).all = segm(p).all + double(segm(p).regs(:,:,rix))*rix;
Error in SegmentTrack (line 53)
  T.PM(dix).segm = pm2segms(UncompressPM(T.PM(dix)), class_id, pars,
  verbose);
Error in PoseEstimStillImage (line 42)
T.PM = SegmentTrack(fullfile(base_dir, img_dir),img_fname_format, T,
segm_params, [base_dir '/segms_' classname], verbose);


3.4.1 原因:

segm(p).all 是double,segm(p).segs是logical, rix是整数,改成

segm(p).all = segm(p).all + double(segm(p).regs(:,:,rix))*double(rix);
后通过!!!

3.4.2 特别注意

PoseEstimStillImage 中的bb的格式是[x y width height],而UpperBodyDetection的返回 detections的格式是[x1 y1 x2 y2]

一开始用UBD返回的结果测试怎么都不对,后来跑通了DetectAndEstimDir 才发现,坑死了!!!


4. 代码注释
ParseTrack.m: 保存poses_ubf 图片
SegmentTrack.m: 保存segms_ubf 图片



你可能感兴趣的:(Deformable Part Model + UpperBodyDetector + HumanPoseEstimation)