参照这两篇步骤,不过中间还是出现一些问题:
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
中是imdb
和roidb
的缓存,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以后的都删除,但是Annotations
和JPEGImages
中的注解和图片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重新编译的。
终于成功,得到最终的检测图片。