spp_net 代码实现过程

参照这两篇步骤,不过中间还是出现一些问题:

http://ouxinyu.github.io/Blogs/20150413001.html

http://blog.csdn.net/liumaolincycle/article/details/49889111?ticket=ST-266267-mKfCEultfYE2gabaxTKJ-passport.csdn.net


问题1:

mex失败

使用mex -setup,让关联起来,里面必须自己填写vs2012的安装目录

详细步骤,刚才又试了半天才终于搞定。(选择18,然后在后面的安装地址里输入 C:\Program Files (x86)\Microsoft Visual Studio 12.0

mex -setup

Would you like mex to locate installed compilers [y]/n? n

Select a compiler: 
[1] Intel C++ 13.0 (with Microsoft Software Development Kit (SDK) linker) 
[2] Intel C++ 13.0 (with Microsoft Visual C++ 2010 linker) 
[3] Intel C++ 13.0 (with Microsoft Visual C++ 2012 linker) 
[4] Intel C++ 12.0 (with Microsoft Software Development Kit (SDK) linker) 
[5] Intel C++ 12.0 (with Microsoft Visual C++ 2008 SP1 linker) 
[6] Intel C++ 12.0 (with Microsoft Visual C++ 2010 linker) 
[7] Intel Visual Fortran 13 (with Microsoft Software Development Kit (SDK) linker) 
[8] Intel Visual Fortran 13.0 (with Microsoft Visual C++ 2010 linker) 
[9] Intel Visual Fortran 13.0 (with Microsoft Visual C++ 2012 linker) 
[10] Intel Visual Fortran 12 (with Microsoft Software Development Kit (SDK) linker) 
[11] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2008 SP1 linker) 
[12] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2008 Shell linker) 
[13] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2010 linker) 
[14] Microsoft Software Development Kit (SDK) 7.1 
[15] Microsoft Visual C++ 2005 SP1 
[16] Microsoft Visual C++ 2008 SP1 
[17] Microsoft Visual C++ 2010 
[18] Microsoft Visual C++ 2012 
 
[0] None 
 
Compiler: 18

问题2:

spp_build.m 报错为:mex outdir.bin 出错

解决方法:直接把里面的相对路径改为绝对路径。

这里会生成六个文件,但是看第一篇的步骤里介绍,会生成7个文件(这里不知道会不会有问题)

问题3:

在执行script_spp_voc.m时,会跳转到imdb_from_voc.m时,在调用fliplr翻转函数时,会报错,因为fliplr函数只能对二维数据进行翻转,但是我们的图片都是三维数据,所以会出错(但不知道其他人在这一步怎么做的,不报错)

把里面的翻转语句做了改动:

 if ~exist(flip_image_at(i), 'file')
     im = imread(image_at(i));


     im(:,:,1)=fliplr(im(:,:,1));
    im(:,:,2)=fliplr(im(:,:,2));
    im(:,:,3)=fliplr(im(:,:,3));
            
          imshow(im);
             imwrite(im, flip_image_at(i));
          end

问题4:执行到1-2小时后,系统直接崩溃,这个步骤没有执行完。

估计是图片太大造成,根据第一篇中的第五步中,修改图片的默认多尺度窗口大小和切换到cpu的阈值后,该错误解决。

Saving imdb to cache...done
imdb (voc_2007_val): 1/5020
imdb (voc_2007_val): 45/5020
imdb (voc_2007_val): 83/5020
imdb (voc_2007_val): 144/5020

问题5:重新清理缓冲区和翻转图片后,重新执行,到下面的状态出错。

缓存文件删掉,imdb\cache中是imdbroidb的缓存,feat_cache\Zeiler_conv5中是feature的缓存

所有训练样本被flip,并保存到D:\SPP_net-master\datasets\VOCdevkit2007\VOC2007\JPEGImages

出错的代码如下:

SPP_net-master: cache features: 9/10022
 [missing]
 [features: 3.039s]


Operation terminated by user during spp_cache_convX_features (line 138)

In spp_exp_cache_features_voc (line 40)
    spp_cache_convX_features(imdb_trainval, ...

In Script_spp_voc (line 65)
spp_exp_cache_features_voc('trainval', opts);
 >> 

分析可能是图片太多,机器崩溃,仿照第二篇里的减少训练样本个数的方法,训练样本和测试样本一共只用了1500个,也就是说把ImageSets\Main中trainval/train/val/test从1500以后的都删除,但是AnnotationsJPEGImages中的注解和图片1500以后的没有删除。重新训练后,走到下面直接系统崩溃。

      SPP_net-master: cache features: 1/10022(这里的个数应该不是10022,应该是一个1500左右的值,忘看了)
 把ImageSets中的其他目录下的trainval/train/val/test也从1500后的都删除掉。

重新开始,系统就可以继续往下。

问题6:total fg_windows_num_train : 77534
total bg_windows_num_train : 545086
total fg_windows_num_test : 33994
total bg_windows_num_test : 249015
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

到这一状态,系统崩溃

调整迭代次数,修改D:\SPP_net-master\finetune\spp_finetune_voc.m 以及相应的prototxt文件

data_param.img_num_per_iter = 128; % should be same with the prototxt file

data_param.iter_per_batch = 50; % for load data effectively

solver_param.test_iter = 50; % better times of data_param.iter_per_batch

solver_param.max_iter =20000;

再执行,虽然改了迭代次数,但仍然迭代了200000次,这里时间花了大概15个小时,然后在VOCevaldet.m上出现参数过多的错误。

迭代次数没有减少,应该是model_defs下还有一个solver的配置文件没有改过来。

有两个VOCevaldet.m文件,原本使用的是新日期的,现在用旧日期的试试。

7.修改model_defs下的solver文件后,迭代次数就是我们设置的23000,200000次中最好的结果是22000,但参数问题还未解决。仍然报错。

另外可以修改script_spp_voc.m中的语句,直接利用已经finetune的结果,在文件的71,72行,把上面的注释掉,使用下面一行,把FT_iter_186000改成FT_iter_22000

finetuned_model_path = spp_finetune_voc(opts);                                % finetune
% finetuned_model_path = fullfile(opts.finetune_rst_dir, 'FT_iter_186000');       % load from finetuned file

8.使用了第二篇文章中的源码文件VOCevaldet.m,是2014年12月8日那个版本的文件,解决了参数不一致的问题,至此整个script_spp_voc.m成功执行完成。

9。但是在使用训练好的模型进行测试时,出现问题。

执行spp_demo()时,又出错了,报错信息是:
>> spp_demo
Computing candidate regions...Attempt to execute SCRIPT anigauss as a function:执行spp_demo()时,又出错了,报错信息是:
>> spp_demo
Computing candidate regions...Attempt to execute SCRIPT anigauss as a function:
D:\SPP_net-master\selective_search\SelectiveSearchCodeIJCV\Dependencies\anigaussm\anigauss.m
按照anigauss_mex.c里的说明,我用 mex -v -g anigauss_mex.c anigauss.c重新编译了一下,
但还是同样的错误,不知道怎么回事,继续折腾。

10.重新编译anigauss_mex.c之后,需要删掉anigauss.m文件,另外不是使用 mex -v -g anigauss_mex.c anigauss.c重新编译的,而是使用

D:\SPP_net-master\selective_search\SelectiveSearchCodeIJCV\Dependencies\demo.m中的

mex Dependencies/anigaussm/anigauss_mex.c Dependencies/anigaussm/anigauss.c -output anigauss重新编译的。

终于成功,得到最终的检测图片。

spp_net 代码实现过程_第1张图片





你可能感兴趣的:(spp_net 代码实现过程)