您的位置:首页 > 编程语言

spp_net 代码实现过程

2016-03-21 17:06 169 查看
参照这两篇步骤,不过中间还是出现一些问题:
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的安装目录

问题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重新编译的。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: