用py-caffe faster rcnn-rcnn训练得到的caffemodel怎么在windows下使用

28256人阅读
caffe(24)
Deep Learning(7)
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同。下面是训练前的一些修改。
(做数据集的过程可以看)
Faster-RCNN源码下载地址:
Matlab版本:
python版本:
本文用到的是Matlab版本,在Windows下运行。
python版本的训练过程:
资源下载:,网页最后有所有的资源。
准备工作:
安装vs2013;
安装Matlab;
安装CUDA;
上面的安装顺序最好不要乱,否则可能出现Matlab找不到vs的情况,在Matlab命令行窗口输入:mbuild -setup,如果出现:
说明Matlab可以找到vs2013。CUDA应在安装vs2013后再安装。
如果你的cuda是6.5,那么,运行一下:
fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m
(运行代码下载失败的话,用百度云下载:& ,解压到faster_rcnn-master下)
得到mex文件。如果不是cuda6.5(如我的是cuda7.5),则需要自己编译mex文件,编译过程参考这里:,按步骤做就行了。
也可以下载我编译得到的文件(注意cuda版本)。
下载地址:
建议还是自己编译,因为版本问题可能会出错。在训练前,可以先下载作者训练好的模型,测试一下,如果可以的话,就不用自己编译了。
测试过程:
(1)运行faster_rcnn-master\faster_rcnn_build.m
&(2)运行faster_rcnn-master\startup.m
(3)运行faster_rcnn-master\fetch_data\fetch_faster_rcnn_final_model.m &下载训练好的模型
(下载失败的话,可以用百度云下载:&,解压到faster_rcnn-master下)
(4)修改faster_rcnn-master\experiments\script_faster_rcnn_demo.m的model_dir为你下载的模型,然后运行。
最终得到:
在训练前请确保你的路径faster_rcnn-master\external\caffe\matlab\caffe_faster_rcnn下有以下文件:
(我的opencv版本是2.4.9,cuda版本是7.5,因版本不同上述文件和你的编译结果可能会有差异。+caffe文件夹是从caffe-master或caffe-faster-R-CNN里拷贝过来的。)
如果你没有按上面说的测试过,请先运行:
(1)faster_rcnn-master\faster_rcnn_build.m
(2)faster_rcnn-master\startup.m
然后再进行下面的修改。
1 、VOCdevkit2007\VOCcode\VOCinit.m的修改
(1)路径的修改
VOCopts.annopath=[VOCopts.datadir VOCopts.dataset '/Annotations/%s.xml'];
VOCopts.imgpath=[VOCopts.datadir VOCopts.dataset '/JPEGImages/%s.jpg'];
VOCopts.imgsetpath=[VOCopts.datadir VOCopts.dataset '/ImageSets/Main/%s.txt'];
VOCopts.clsimgsetpath=[VOCopts.datadir VOCopts.dataset '/ImageSets/Main/%s_%s.txt'];
VOCopts.clsrespath=[VOCopts.resdir 'Main/%s_cls_' VOCopts.testset '_%s.txt'];
VOCopts.detrespath=[VOCopts.resdir 'Main/%s_det_' VOCopts.testset '_%s.txt'];
上面这些路径要正确,第一个是xml标签路径;第二个是图片的路径;第三个是放train.txt、val.txt、test.txt和trainval.txt的路径;第四、五、六个不需要;一般来说这些路径不用修改,你做的数据集格式和VOC2007相同就行。(图片格式默认是jpg,如果是png,修改上面第二行的代码即可。)
(2)训练集文件夹修改
VOCopts.dataset = '你的文件夹名';
然后将VOC2007路径注释掉,上面“你的文件夹名”是你放Annotations、ImageSets、JPEGImages文件夹的文件夹名。
(3)标签的修改
VOCopts.classes={...
'你的标签1'
'你的标签2'
'你的标签3'
'你的标签4'};将其改为你的标签。
2 、VOCdevkit2007\results
results下需要新建一个文件夹,名字是1. (2)中“你的文件夹名”。“你的文件夹名”下新建一个Main文件夹。(因为可能会出现找不到文件夹的错误)
3 、VOCdevkit2007\local
local下需要新建一个文件夹,名字是1. (2)中“你的文件夹名”。(同上)
4 、function\fast_rcnn\fast_rcnn_train.m
ip.addParamValue('val_iters',
@isscalar);
ip.addParamValue('val_interval',
@isscalar);
可能在randperm(N,k)出现错误,根据数据集修改。(VOC2007中val有2510张图像,train有2501张,作者将val_iters设为500,val_interval设为2000,可以参考作者的设置修改,建议和作者一样val_iters约为val的1/5,val_interval不用修改)
5、function\rpn\proposal_train.m
这里的问题和fast_rcnn_train.m一样。
6.imdb\imdb_eval_voc.m
%do_eval = (str2num(year) &= 2007) | ~strcmp(test_set,'test');
do_eval = 1;注释掉do_eval = (str2num(year) &= 2007) | ~strcmp(test_set,'test');并令其为1,否则测试会出现精度全为0的情况
7.&imdb\roidb_from_voc.m
ip.addParamValue('exclude_difficult_samples',
@islogical);不包括难识别的样本,所以设置为true。(如果有就设置为false)
8.网络模型的修改
(1) models\ fast_rcnn_prototxts\ZF\ train_val.prototxt
input: &bbox_targets&
input_dim: 1
# to be changed on-the-fly to match num ROIs
input_dim: 84 # 根据类别数改,该值为(类别数+1)*4
#################
input_dim: 1
input_dim: 1
input: &bbox_loss_weights&
input_dim: 1
# to be changed on-the-fly to match num ROIs
input_dim: 84 # 根据类别数改,该值为(类别数+1)*4
############
input_dim: 1
input_dim: 1
bottom: &fc7&
top: &cls_score&
name: &cls_score&
lr_mult: 1.0
lr_mult: 2.0
type: &InnerProduct&
inner_product_param {
num_output: 21 #根据类别数改该值为类别数+1
bottom: &fc7&
top: &bbox_pred&
name: &bbox_pred&
type: &InnerProduct&
lr_mult: 1.0
lr_mult: 2.0
inner_product_param {
num_output: 84
#根据类别数改,该值为(类别数+1)*4
##########
(2) models\ fast_rcnn_prototxts\ZF\ test.prototxt
bottom: &fc7&
top: &cls_score&
name: &cls_score&
lr_mult: 1.0
lr_mult: 2.0
type: &InnerProduct&
inner_product_param {
num_output: 21
##########
bottom: &fc7&
top: &bbox_pred&
name: &bbox_pred&
type: &InnerProduct&
lr_mult: 1.0
lr_mult: 2.0
inner_product_param {
num_output: 84
#4*(类别数+1)
##########
(3) models\ fast_rcnn_prototxts\ZF_fc6\ train_val.prototxt
input: &bbox_targets&
input_dim: 1
# to be changed on-the-fly to match num ROIs
input_dim: 84 # 4*(类别数+1)
###########
input_dim: 1
input_dim: 1
input: &bbox_loss_weights&
input_dim: 1
# to be changed on-the-fly to match num ROIs
input_dim: 84 # 4*(类别数+1)
###########
input_dim: 1
input_dim: 1
bottom: &fc7&
top: &cls_score&
name: &cls_score&
lr_mult: 1.0
lr_mult: 2.0
type: &InnerProduct&
inner_product_param {
num_output: 21 #类别数+1
############
bottom: &fc7&
top:&bbox_pred&
name:&bbox_pred&
type:&InnerProduct&
lr_mult:1.0
lr_mult:2.0
inner_product_param{
num_output: 84
#4*(类别数+1)
###########
(4) models\ fast_rcnn_prototxts\ZF_fc6\ test.prototxt
bottom: &fc7&
top: &cls_score&
name: &cls_score&
lr_mult: 1.0
lr_mult: 2.0
type: &InnerProduct&
inner_product_param {
num_output: 21
类别数+1 #######
bottom: &fc7&
top: &bbox_pred&
name: &bbox_pred&
type: &InnerProduct&
lr_mult: 1.0
lr_mult: 2.0
inner_product_param {
num_output: 84
#4*(类别数+1) ##########
9.solver的修改
solver文件有3个,默认使用的solver是solver_30k40k.prototxt,如下stage 1 rpn,可以在faster_rcnn-master\experiments\+Model\ZF_for_Faster_RCNN_VOC2007.m中更换。
model.stage1_rpn.solver_def_file
= fullfile(pwd, 'models', 'rpn_prototxts', 'ZF', 'solver_30k40k.prototxt');%solver_60k80k.prototxt
model.stage1_rpn.test_net_def_file
= fullfile(pwd, 'models', 'rpn_prototxts', 'ZF', 'test.prototxt');
model.stage1_rpn.init_net_file
= model.pre_trained_net_
!!!为防止与之前的模型搞混,训练前把output文件夹删除(或改个其他名),还要把imdb\cache中的文件删除(如果有的话)
更为简便的方法是直接用你的数据集的Annotations、ImageSets、JPEGImages文件夹替换VOC2007对应文件夹,那么上面只需进行1.(3)、4、5、7、8的修改。
10.开始训练
(1).下载预训练的ZF模型:fetch_data/fetch_model_ZF.m
(下载失败的话用百度云下载:&,解压到faster_rcnn-master下,预训练模型参数用于初始化)
(2).运行:
experiments/script_faster_rcnn_VOC2007_ZF.m
经过一会的准备工作,就进入迭代了:
11.训练完后
训练完后,不要急着马上测试,先打开output/faster_rcnn_final/faster_rcnn_VOC2007_ZF文件夹,打开detection_test.prototxt,作如下修改:
将relu5(包括relu5)前的层删除,并将roi_pool5的bottom改为data和rois。并且前面input: &data&下的input_dim:分别改为1,256,50,50(如果是VGG就是1,512,50,50,其他修改基本一样),具体如下
input: &data&
input_dim: 1
input_dim: 256
input_dim: 50
input_dim: 50
# ------------------------ layer 1 -----------------------------
bottom: &data&
bottom: &rois&
top: &pool5&
name: &roi_pool5&
type: &ROIPooling&
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625
训练完成后,打开\experiments\script_faster_rcnn_demo.m,将模型路径改成训练得到的模型路径:
= fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC2007_ZF')
将测试图片改成你的图片:
im_names = {'001.jpg', '002.jpg', '003.jpg'};注意:
& & & &&如果你的数据集类别比voc2007数据集多,把script_faster_rcnn_demo.m中的showboxes(im, boxes_cell, classes, 'voc')作如下修改:
showboxes(im, boxes_cell, classes);或者:
showboxes(im, boxes_cell, classes, 'default');即去掉‘voc’或将其改为‘default’。
如果测试发现出现的框很多,且这些框没有目标,可以将阈值设高一些(默认是0.6):
thres = 0.9;
结果如下:


参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:131885次
积分:1966
积分:1966
排名:第16272名
原创:69篇
转载:18篇
评论:775条
(1)(5)(7)(6)(2)(7)(12)(3)(10)(10)(10)(17)Ubuntu14.04下配置测试Faster R-CNN+Caffe(Matlab+CPU)目标检测
Faster R-CNN是当前目标检测领域内性能最好的算法之一,它将RPN(Region Proposal Network)网络和Fast R-CNN网络结合到了一起,实现了一个端到端的目标检测框架。作者Shaoqing Ren在github上公开了源代码,可以很方便地在自己的机器上进行测试。本文记录的是Ubuntu14.04下配置和测试Faster R-CNN的过程,其中包括Cafee的安装和编译过程,针对的是Matlab和仅使用CPU的环境。
文章arXiv链接:
https://arxiv.org/abs/
下载源代码 ##
Matlab源码链接:
/ShaoqingRen/faster_rcnn
Python实现源码:
/rbgirshick/py-faster-rcnn
下载源码faster_rcnn-master.zip以及其中的caffe源码,解压至本地目录。
安装编译Caffe
1.安装依赖项
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
Python用户需安装,Matlab不需要:
sudo apt-get install the python-dev
GPU运行环境还需安装CUDA,使用CPU无需安装。 Ubuntu14.04依赖项:
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
Ubuntu12.04版本较低,需要手动安装依赖项:
wget https://google-/files/glog-0.3.3.tar.gz
tar zxvf glog-0.3.3.tar.gz
cd glog-0.3.3
./configure
make && make install
wget /schuhschuh/gflags/archive/master.zip
unzip master.zip
cd gflags-master
mkdir build && cd build
export CXXFLAGS=&-fPIC& && cmake .. && make VERBOSE=1
make && make install
git clone /LMDB/lmdb
cd lmdb/libraries/liblmdb
make && make install
Caffe可以采用Make或者CMake两种方式来编译,我使用的是Make,且编译之前需要根据个人情况修改caffe目录下的Makefile.config.example文件。具体需要修改的地方如下:
仅使用CPU的情况下,需要取消该文件中CPU_ONLY := 1的注释。
指定Matlab的安装路径,我的是MATLAB_DIR := /usr/local/MATLAB/R2016a。
修改完成后,执行如下命令:
cp Makefile.config.example Makefile.config
make clean
make runtest
采用并行的方式可以更快地完成编译过程,只需使用`make all -j8`命令。其中数字8表示并行线程的数目,建议将该线程数目修改为机器的内核数。 为了能够在Matlab中正常使用,还需执行以下命令:
make matcaffe
之后在matlab/+caffe/private目录下将会生成caffe_.mex64文件,可以直接被Matlab调用。
3.测试示例
在正式测试前,需要下载训练好的caffemodel文件。有两种方式,直接在浏览器里输入地址下载,也可以运行脚本文件下载。我选择直接用浏览器下载,下载地址如下:
http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
该模型文件243.9M,下载完成后将其拷贝到caffe根目录下的models/bvlc_reference_caffenet/文件夹中。
接着启动Matlab,切换到caffe的根目录,将caffe_.mex64的路径添加进来,便于加载。
addpath('./matlab/+caffe/private');
切换到`matlab/demo/`目录下,执行如下命令来测试示例:
I = imread('../../examples/images/cat.jpg');
[scores, maxlabel] = classification_demo(I, 0);
需要特别注意,classification_demo(I, 0)函数中的0表示使用CPU,如果改为1则表示GPU。执行成功后,将会返回如下信息:
Elapsed time is 0.025054 seconds.
Elapsed time is 1.069503 seconds.
Cleared 0 solvers and 1 stand-alone nets
其中maxlabel=282,表示具有最大分类概率的是第282个类别。输入`plot(scores);`显示所有类别上的分类概率,如下图所示。
从图中可以看出,该图片被分到第282类的概率最高。至此,程序测试完成,说明Caffe安装配置成功。
配置运行Faster R-CNN
Faster R-CNN的配置和运行十分简单,启动Matlab,切换到faster_rcnn目录下。运行faster_rcnn_build.m,在仅使用CPU的情况下,Compiling nms_gpu_mex时会出错。但是其他能够编译成功,这里不用担心。
run faster_rcnn_build.m
run startup.m
获取训练好的模型,可以通过执行文件下载:
run fetch_data/fetch_faster_rcnn_final_model.m
个人建议直接通过作者github主页上的链接来下载模型,地址在主页最后一行给出,选择其一下载。
3.Final RPN+FastRCNN models: OneDrive, DropBox, BaiduYun
模型较大,下载完成后直接将其解压至faster_rcnn根目录下。
在experiments目录下有测试文件,因为只使用CPU,运行前需要将其设置为不使用GPU。
experiments/script_faster_rcnn_demo.m
文件中的第3、4行需要注释掉,第9行的opts.use_gpu改为false。以下是修改后的代码:
%% -------------------- CONFIG --------------------
opts.caffe_version & & & & &= 'caffe_faster_rcnn';
% opts.gpu_id & & & & & & & & = auto_select_
% active_caffe_mex(opts.gpu_id, opts.caffe_version);
opts.per_nms_topN & & & & & = 6000;
opts.nms_overlap_thres & & &= 0.7;
opts.after_nms_topN & & & & = 300;
opts.use_gpu & & & & & & & &=
opts.test_scales & & & & & &= 600;
此外,由于VGG16模型较大,运行过程中会崩溃,因此将模型改为ZF,修改后如下:
% model_dir = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_vgg_16layers'); %% VGG-16
model_dir = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_ZF'); %% ZF
至此,修改完毕。执行该程序,能够正常运行说明测试成功。我的处理器是Intel& Core& i7-2600 CPU @ 3.40GHz & 8 ,输出如下信息:
001763.jpg (500x375): time 3.258s (resize+conv+proposal: 2.452s, nms+regionwise: 0.806s)
004545.jpg (500x375): time 4.073s (resize+conv+proposal: 2.543s, nms+regionwise: 1.530s)
000542.jpg (500x375): time 3.064s (resize+conv+proposal: 2.526s, nms+regionwise: 0.538s)
000456.jpg (500x375): time 3.757s (resize+conv+proposal: 2.497s, nms+regionwise: 1.259s)
001150.jpg (500x375): time 3.400s (resize+conv+proposal: 2.481s, nms+regionwise: 0.919s)
mean time: 3.510s
Cleared 0 solvers and 2 stand-alone nets
本文永久更新地址:
------分隔线----------------------------Faster-RCNN+ZF用自己的数据集训练模型(Python版本)
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同。下面是训练前的一些修改。
(做数据集的过程可以看)
Faster-RCNN源码下载地址:
Matlab版本:
本文用到的是Python版本,在Linux下运行。
Matlab版本的训练过程:
准备工作:
1.配置caffe
&&&& 这个不多说,网上教程很多。
2.其他的注意事项
&&&&& 这里说的挺详细了,认真看看吧。地址:(主要内容如下)
下面大概翻译一下上面网址的内容吧。
(1)安装cython, python-opencv,easydict
pip install cython
pip install easydict
apt-get install python-opencv
(2)下载py-faster-rcnn
# Make sure to clone with --recursive
git clone --recursive /rbgirshick/py-faster-rcnn.git
(3)进入py-faster-rcnn/lib
&& 执行make
(4)进入py-faster-rcnn\caffe-fast-rcnn
执行 cp Makefile.config.example Makefile.config
然后,配置Makefile.config文件,可参考我的配置:
配置好Makefile.config文件后,执行:
make -j8 && make pycaffe
(5)下载VOC2007数据集
提供一个百度云地址:
解压,然后,将该数据集放在py-faster-rcnn\data下,用你的数据集替换VOC2007数据集。(替换Annotations,ImageSets和JPEGImages)
(用你的Annotations,ImagesSets和JPEGImages替换py-faster-rcnn\data\VOCdevkit2007\VOC2007中对应文件夹)
(6)下载ImageNet数据集下预训练得到的模型参数(用来初始化)
提供一个百度云地址:
解压,然后将该文件放在py-faster-rcnn\data下
下面是训练前的一些修改。
1.py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_fast_rcnn_train.pt修改
name: 'data'
type: 'Python'
top: 'data'
top: 'rois'
top: 'labels'
top: 'bbox_targets'
top: 'bbox_inside_weights'
top: 'bbox_outside_weights'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: &'num_classes': 16& #按训练集类别改,该值为类别数+1
name: &cls_score&
type: &InnerProduct&
bottom: &fc7&
top: &cls_score&
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
inner_product_param {
num_output: 16 #按训练集类别改,该值为类别数+1
weight_filler {
type: &gaussian&
bias_filler {
type: &constant&
name: &bbox_pred&
type: &InnerProduct&
bottom: &fc7&
top: &bbox_pred&
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
inner_product_param {
num_output: 64 #按训练集类别改,该值为(类别数+1)*4
weight_filler {
type: &gaussian&
std: 0.001
bias_filler {
type: &constant&
2.py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_rpn_train.pt修改
name: 'input-data'
type: 'Python'
top: 'data'
top: 'im_info'
top: 'gt_boxes'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: &'num_classes': 16& #按训练集类别改,该值为类别数+1
3.py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage2_fast_rcnn_train.pt修改
name: 'data'
type: 'Python'
top: 'data'
top: 'rois'
top: 'labels'
top: 'bbox_targets'
top: 'bbox_inside_weights'
top: 'bbox_outside_weights'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: &'num_classes': 16& #按训练集类别改,该值为类别数+1
name: &cls_score&
type: &InnerProduct&
bottom: &fc7&
top: &cls_score&
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
inner_product_param {
num_output: 16 #按训练集类别改,该值为类别数+1
weight_filler {
type: &gaussian&
bias_filler {
type: &constant&
name: &bbox_pred&
type: &InnerProduct&
bottom: &fc7&
top: &bbox_pred&
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
inner_product_param {
num_output: 64 #按训练集类别改,该值为(类别数+1)*4
weight_filler {
type: &gaussian&
std: 0.001
bias_filler {
type: &constant&
4.py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage2_rpn_train.pt修改
name: 'input-data'
type: 'Python'
top: 'data'
top: 'im_info'
top: 'gt_boxes'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: &'num_classes': 16& #按训练集类别改,该值为类别数+1
5.py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/faster_rcnn_test.pt修改
name: &cls_score&
type: &InnerProduct&
bottom: &fc7&
top: &cls_score&
inner_product_param {
num_output: 16 #按训练集类别改,该值为类别数+1
name: &bbox_pred&
type: &InnerProduct&
bottom: &fc7&
top: &bbox_pred&
inner_product_param {
num_output: 64 #按训练集类别改,该值为(类别数+1)*4
6.py-faster-rcnn/lib/datasets/pascal_voc.py修改
class pascal_voc(imdb):
def __init__(self, image_set, year, devkit_path=None):
&&&&&&& imdb.__init__(self, 'voc_' + year + '_' + image_set)
&&&&&&& self._year = year
&&&&&&& self._image_set = image_set
&&&&&&& self._devkit_path = self._get_default_path() if devkit_path is None \
&&&&&&&&&&&&&&&&&&&&&&&&&&& else devkit_path
&&&&&&& self._data_path = os.path.join(self._devkit_path, 'VOC' + self._year)
self._classes = ('__background__', # always index 0
'你的标签1','你的标签2',你的标签3','你的标签4'
上面要改的地方是
修改训练集文件夹:
self._data_path = os.path.join(self._devkit_path, 'VOC'+self._year)
用你的数据集直接替换原来VOC2007内的Annotations,ImageSets和JPEGImages即可,以免出现各种错误。
修改标签:
self._classes = ('__background__', # always index 0
'你的标签1','你的标签2','你的标签3','你的标签4'
修改成你的数据集的标签就行。
cls = self._class_to_ind[obj.find('name').text.lower().strip()]这里把标签转成小写,如果你的标签含有大写字母,可能会出现KeyError的错误,所以建议标签用小写字母。
(去掉lower应该也行)
建议训练的标签还是用小写的字母,如果最终需要用大写字母或中文显示标签,可参考:
7.py-faster-rcnn/lib/datasets/imdb.py修改
该文件的append_flipped_images(self)函数修改为:
def append_flipped_images(self):
num_images = self.num_images
widths = [PIL.Image.open(self.image_path_at(i)).size[0]
for i in xrange(num_images)]
for i in xrange(num_images):
boxes = self.roidb[i]['boxes'].copy()
oldx1 = boxes[:, 0].copy()
oldx2 = boxes[:, 2].copy()
boxes[:, 0] = widths[i] - oldx2 - 1
print boxes[:, 0]
boxes[:, 2] = widths[i] - oldx1 - 1
print boxes[:, 0]
assert (boxes[:, 2] &= boxes[:, 0]).all()
entry = {'boxes' : boxes,
'gt_overlaps' : self.roidb[i]['gt_overlaps'],
'gt_classes' : self.roidb[i]['gt_classes'],
'flipped' : True}
self.roidb.append(entry)
self._image_index = self._image_index * 2
这里assert (boxes[:, 2] &= boxes[:, 0]).all()可能出现AssertionError,具体解决办法参考:
!!!为防止与之前的模型搞混,训练前把output文件夹删除(或改个其他名),还要把py-faster-rcnn/data/cache中的文件和
py-faster-rcnn/data/VOCdevkit2007/annotations_cache中的文件删除(如果有的话)。
至于学习率等之类的设置,可在py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt中的solve文件设置,迭代次数可在py-faster-rcnn\tools的train_faster_rcnn_alt_opt.py中修改:
max_iters = [8, 8]分别为4个阶段(rpn第1阶段,fast rcnn第1阶段,rpn第2阶段,fast rcnn第2阶段)的迭代次数。可改成你希望的迭代次数。
如果改了这些数值,最好把py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt里对应的solver文件(有4个)也修改,stepsize小于上面修改的数值。
8.开始训练
进入py-faster-rcnn,执行:
./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
这样,就开始训练了。
将训练得到的py-faster-rcnn\output\faster_rcnn_alt_opt\***_trainval中ZF的caffemodel拷贝至py-faster-rcnn\data\faster_rcnn_models(如果没有这个文件夹,就新建一个),然后,修改:
py-faster-rcnn\tools\demo.py,主要修改:
CLASSES = ('__background__',
'你的标签1', '你的标签2', '你的标签3', '你的标签4')
改成你的数据集标签;
NETS = {'vgg16': ('VGG16',
'VGG16_faster_rcnn_final.caffemodel'),
'zf': ('ZF',
'ZF_faster_rcnn_final.caffemodel')}
上面ZF的caffemodel改成你的caffemodel。
im_names = ['1559.jpg','1564.jpg']
改成你的测试图片。(测试图片放在py-faster-rcnn\data\demo中)
在py-faster-rcnn下,
./tools/demo.py --net zf
或者将默认的模型改为zf:
parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',
choices=NETS.keys(), default='vgg16')修改:
default='zf'执行:
./tools/demo.py








看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 faster rcnn demo.py 的文章

 

随机推荐