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:重新清理缓冲区和翻转图片后,重新执行,到下面的状态出错。
缓存文件删掉,
所有训练样本被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个,也就是说把
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重新编译的。
终于成功,得到最终的检测图片。
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重新编译的。
终于成功,得到最终的检测图片。
相关文章推荐
- Java集合&List的实现
- 【转】Spring Bean属性解析
- 将Eclipse工程迁移到Android Stutio
- java 重定向和转发的区别
- Java主线程等待子线程、线程池
- 五子棋(Java)图片显示问题及做成EXE程序
- java-a实现压缩与解压缩(zip、gzip)
- php面向对象
- Java8:使用Lambda表达式增强版Comparator排序
- java的日期处理类
- 9、Java实体类中时间类型的注解
- PHP四舍五入 保留几位小数 格式化数字
- socket编程(一)---- 套接字
- springMVC—重定向
- Java中的继承、封装、多态
- C# 异步编程
- JAVA第二次作业
- python中给程序加锁之fcntl模块的使用
- java单例模式(两种常用模式)
- C++面试题(1)