voc-release5在window下编译总结

44 篇文章 0 订阅
41 篇文章 1 订阅

采用matlab2012a, vs2013和2013编译器:

(1)resize.cc features.cc : 

         实现round函数 : inline int round(float a){return ((int)(a + 0.5f));}

         同时:#define bzero(a, b) memset(a, 0, b) 

         基本的c++编程错:

               alphainfo *ofs = new alphainfo[len]; // c++不支持变量类型的数组大小定义

               ............

               delete []ofs;
              ofs = NULL;

(2)fv_cache: sigaction // 注释fv_cache.cc中所有相关代码;

         fv_compile.m:

               % if ispc
               %   error('This code is not supported on Windows.');
               % end      // 注释掉 compile.m中对应语句类似处理

          model.h:#define INFINITY INT_MAX 

          obj_fun.cc:

                  基本的c++错:

                         double *hnrms2 = new double[M.num_components];

                         ..........

                         delete []hnrms2;
                         hnrms2 = NULL;


                        double *pc = new double[M.num_components];

                       ...................

                      delete []pc;

                      pc = NULL;

(3) gdetect

            bounded_dt.cc, dt.cc:typedef int int32_t;

                                                #define INFINITY INT_MAX

            fconvsse.cc, fcon_var_dim_MT.cc:

                    将gdetect_dp.m中进行如下修改与注释:

                               %if size(pyra.feat{level},3) == 32
                              % Faster SSE version (fconvsse.cc) that can only handle 32-dim features
                              %   r = fconv(pyra.feat{level}, filters, 1, length(filters));
                              % else
                              % More general convolution code to handle non-32-dim features
                              % e.g., the HOG-PCA features used by the star-cascade
                             r = fconv_var_dim(pyra.feat{level}, filters, 1, length(filters));              // 直接调用fconv_var_dim.mex64
                            % end 

                     如需用fconvsse.cc,则部分更改如下:

                                  #include "pthread.h"
                                  #pragma comment(lib, "pthreadVC.lib") // 支持windows下的pthread线程库

                                  ....................

                                 //_m_empty();        // 注释掉,该函数清楚寄存器

                                float *F = (float *)_aligned_malloc(dims[0]*dims[1]*NUM_FEATURES*sizeof(float), 16); // _aligned_malloc为系统api

(4)star-cascade

                 cascade.cc :#define INFINITY INT_MAX

                 cascade_compile.m

                                % if ispc
                                %   error('This code is not supported on Windows.');                    // 注释掉,判断平台类型
                                % end

                  timer.h:

                            #include <time.h>
                            #include <ctime>
                           #include <windows.h>

                          // 定义timer结构体

                          class timer {
                                    struct timeval {
                                    long tv_sec;
                                    long tv_usec;
                                   };

                           // 定义gettimeofday函数

                           private:
                                  int gettimeofday(struct timeval *tp, void *tzp) {
                                  time_t clock;
                                  struct tm tm;
                                  SYSTEMTIME wtm;
                                  GetLocalTime(&wtm);

                                  tm.tm_year     = wtm.wYear - 1900;
                                  tm.tm_mon     = wtm.wMonth - 1;
                                  tm.tm_mday     = wtm.wDay;
                                  tm.tm_hour     = wtm.wHour;
                                  tm.tm_min     = wtm.wMinute;
                                  tm.tm_sec     = wtm.wSecond;
                                  tm. tm_isdst    = -1;
                                 clock = mktime(&tm);
                                 tp->tv_sec = clock;
                                 tp->tv_usec = wtm.wMilliseconds * 1000;
                                 return (0);

                             }

(5) eval函数:

                      try
                      eval(mexcmd);          
                      catch e
                      end

(6)utils

                 procid.m:

                           i = strfind(d, '\');  

(7)compile.m:

              % if ispc
              %   error('This code is not supported on Windows.');
             % end

             try ///
             if nargin < 3
            % Build feature vector cache code
            fv_compile(opt, verb);
           % Build the star-cascade code
            cascade_compile(opt, verb);

           eval([mexcmd ' features/resize.cc']);
           eval([mexcmd ' features/features.cc']);
           eval([mexcmd ' gdetect/dt.cc']);
           eval([mexcmd ' gdetect/bounded_dt.cc']);
           eval([mexcmd ' gdetect/get_detection_trees.cc']);
           eval([mexcmd ' gdetect/compute_overlap.cc']);

          % Convolution routine
          %   Use one of the following depending on your setup
          %   (0) is fastest, (2) is slowest 

         % 0) multithreaded convolution using SSE
         %eval([mexcmd ' gdetect/fconv.cc']);
         % 1) multithreaded convolution
         %eval([mexcmd ' gdetect/fconv_var_dim_MT.cc -o fconv']);
         % 2) basic convolution, very compatible
         % eval([mexcmd ' gdetect/fconv_var_dim.cc']);

        % Convolution routine that can handle feature dimenions other than 32
       % 0) multithreaded convolution
       %eval([mexcmd ' gdetect/fconv_var_dim_MT.cc']);
       % 1) single-threaded convolution
       eval([mexcmd ' gdetect/fconv_var_dim.cc']);//单线程,非sse版本

       else
       eval([mexcmd ' ' mex_file]);
       end
       catch e                  
       warning(e.identifier, 'dddd');
       end //

(8)demo.m:

           %compile; 

 (9)pascal.m 

           diary(conf.training.log([cls '-' timestamp])); // 注释掉,报错

(10)voc_config.m

           BASE_DIR    = 'f:/code';

           conf = cv(conf, 'pascal.dev_kit', [conf.paths.base_dir '/VOCdevkit/']);  // 注意配置这几句, VOCdevkit路径

(11)出现系统奔溃问题:

                 解决方法:resize()函数改成imresize()函数

(12)出现features函数参数数据不匹配的问题

                解决方法:重新编译,运行compile,知道编译通过

(13)出现找不到头文件问题:

                解决方法:将#include <sys/time.h>改成#include <time.h>

(14)第五版本的模型与其它版本模型差距较大,如需转换成VS可识别文件,建议使用第五版本。

参考链接:地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值