如何暹罗猫多大才能训练将Faster R-CNN训练起来

217被浏览20660分享邀请回答155 条评论分享收藏感谢收起/hosang/detection-proposals]。然后根据你的项目,按精度和时间需求来选择object proposal 方法。相似的基于object proposal的还有[fgs-obj][],这个方法效果比RCNN好,但是训练很麻烦。采用其他的模型,如:[ReInspect][],这个方法本身是用来detect people head,训练时时end-to-end,训练很方便,训练一次大概是24个小时,测试是1秒2张图片(我的显卡是K40)。不过你可以修改下代码参数来适应你的项目需求。[faster rcnn][],这个我只是测试过作者训练好的模型,没有训练自己的模型。这些项目你最好参照项目的相应paper,把demo跑起来,然后按自己需求修改相应的配置。77 条评论分享收藏感谢收起查看更多回答最近在研究caffe,前前后后差不多快一周了,论文看得比较少,直接上手来做的,期间遇到无数问题,大大小小的无数问题,不过通过上网,看别人的博客,几乎踩了很多大坑,这里给大家总结一下,希望后续同样做深度学习的小伙伴能够少踩点坑。在这里,我就不做重复功了,具体的配置还有改动的地方我会引用别人的博客,然后补充说明这些博客介绍得并不全面的地方。
备注:以下内容会不定期更新,该篇博客主要对安装caffe使用faster-rcnn中出现的问题进行分享,配置还有使用部分引用网上其它博客。
文件下载地址:链接:/s/1qYnjZCo 密码:g7bo
实验目的:实验室最近要开始做深度学习,配置了一台K80服务器,按现在的水平显卡性能属于中等偏上,不过做做实验应该是够了。最初打算先实现个最简单的目标检测,即人脸检测,目的很简单,就是输入一张图片,判断有没有人脸,并且把人脸部分用box给框出来。
实验工具:caffe框架
&&&&&&&&&&&&&&&&& faster-rcnn
主要语言:C++, Python
实验步骤:
一、caffe框架的配置
&&&&&&&&&&&&&&&&& 这里给出rbg大神在github上的地址:/rbgirshick/py-faster-rcnn
&&&&&&&&&&&&&&&&& 这里要注意,caffe的框架一定要使用rbg大神github上的版本,不建议使用伯克利大学维护的那一份caffe的代码,具体的原因主要是,使用faster-rcnn方法的这个版本的caffe比较老,现在官方维护的那个版本改动了一些部分,而且rbg大神使用了Python layer来定义了caffe中的数据层(data layer),所以在编译的时候需要将Python layer打开,这个之后会讲到。按道理,config文件修改合理的话肯定不会出问题的,不过建议还是使用大神的版本,比较省事。
&&&&&&&&&&&&&&&&& rbg大神的caffe配置参考这篇博客,/louyihang-loves-baiyan/p/4885659.html#3573006
&&&&&&&&&&&&&&&&& 上面这是一篇fast-rcnn的配置博客,实在抱歉,前几天我还找到一份faster-rcnn坑比较少的配置博客,今天怎么翻都找不到了,这一篇虽然是fast-rcnn的配置博客,不过我刚刚仔细看了下,配置过程是同样的,而且作者写得很用心,可以避免不少弯路。
&&&&&&&&&&&&&&&&&& 大概流程就是先到py-faster-rcnn-master文件下的caffe-fast-rcnn(可以再坏境变量中修改为$FRCNN_CAFFE),修改config文件,将博客中提到的地方都取消注释,然后到py-faster-rcnn-master文件夹(环境变量中命名为$FRCNN_ROOT)中的lib文件夹中,执行
cd $FRCN_ROOT/lib
这里需要注意下,确保你的Linux gcc的版本为最新版,因为版本比较老的话,编译有个部分会出错中断。
&&&&&&&&&&&&&&&&&&& 接下来就是到$FRCNN_CAFFE中编译caffe和pycaffe,执行命令
cd $FRCNN_CAFFE
make -j8 && make pycaffe&&&&&&&&&&&&&&&&&&& 暂时想不到别的会出错的地方,如果大家出现什么问题,可以再下面留言告诉我,我能解决的一定尽快解决。
&&&&&&&&&&&&&&&&&&& 至此,caffe框架的配置算是完成了。
二、运行faster-rcnn的demo
& & & & & & & & && 完成了配置以后,为了验证是否正确安装,可以到$FRCNN_ROOT的tools文件夹中,对demo.py文件进行执行:
&&&&&&&&&&&&&&&&&& 这里如果机器配置合适的话,就直接默认执行就好,因为默认执行以后使用的是大型网络vgg16,其他的参数主要为:def parse_args():
&&&Parse input arguments.&&&
parser = argparse.ArgumentParser(description='Faster R-CNN demo')
parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
default=0, type=int)
parser.add_argument('--cpu', dest='cpu_mode',
help='Use CPU mode (overrides --gpu)',
action='store_true')
parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',
choices=NETS.keys(), default='vgg16')
args = parser.parse_args()
return args
&&&&&&&&&&&&&&&&&&& 这个函数大家可以看到,能够传入示例脚本的有--gpu& 这里选择使用哪一块gpu,默认是0,传入的参数是数字,也就是说,不能使用-a来制定使用所有的gpu核来进行训练;--net参数,选择你要使用的是哪一个网络,网络的脚本dict如下:NETS = {'vgg16': ('VGG16',
'VGG16_faster_rcnn_final.caffemodel'),
'zf': ('ZF',
'ZF_faster_rcnn_final.caffemodel')}
&&&&&&&&&&&&&&&&&&& 这里提供一个格式,后面进行预测的时候可以去定制。
&&&&&&&&&&&&&&&&&&& 至此执行以后一般不会不会成功,应该说一定不会成功,还有faster-rcnn的caffemodel和prototxt文件还没有下载,在$FRCNN_ROOT的data/script中有脚本,打开fetch_faster_rcnn_models.sh文件,按照上面引用博客里面的方法,拿到链接地址以后使用下载工具去下载,这样速度会快很多,prototxt文件在$FRCNN_ROOT的model中已经有文件存在了,到时候注意路径选择合适的文件就好了。(需要下载的文件已经放到网盘,大家可以下载)
&&&&&&&&&&&&&&&&&&&& 至此,执行demo的示例步骤也结束了。
三、使用示例脚本对官方数据进行训练
&&&&&&&&&&&&&&&&&&&& 在$FRCNN_ROOT的experiments/script中有脚本可以使用,名字为:faster_rcnn_end2end.sh,脚本里面需要下载的的数据集为VOC2007,在上面提供的云盘地址中有资源存在了,可供下载。将数据集可以下载到自己的硬盘里面,然后把挂载的硬盘路径通过软链接链接到$FRCNN_ROOT的data/路径中,这样暂时在数据集上没有问题了。
&&&&&&&&&&&&&&&&&&&& 脚本中提供的路径都不是正常的路径,需要将全局变量添加进去,比如这一句:
LOG=&experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`&
&&&&&&&&&&&&&&&&&&&& 系统中是不存在这个地址路径的,需要在前面加上$FRCNN_ROOT,即为:
LOG=&$FRCNN_ROOT/experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`&
&&&&&&&&&&&&&&&&&&&& 其他地方也是类似,也可以在前面加上../../
使用相对路径来完成。
&&&&&&&&&&&&&&&&&&& 未完待续。。。。。
本文已收录于以下专栏:
相关文章推荐
RCNN是目前detection中较新且准确度较高的方法,充分发挥了CNN分类的优势,但速度并不快,从而产生了fast rcnn和faster rcnn来解决这个问题。本文使用py-faster-rc...
1 首先要保证安装了cython, python-opencv, easydict,如果没有请执行以下命令:
sudo apt-get install cython
sudo apt-get in...
问题:CUDA 由6.5升级到7.5导致原有的caffe和digits不在可用。/BVLC/caffe/issues/2808备注,原有的caffe和digits对...
全球人工智能
文章来源:arxiv、Github 编译:马卓奇
文章投稿:
  论文摘要:A-Fast-RCNN模型通过用对抗网络生成具有遮挡和变形的样本,...
原理上一篇文章,已经说过了,大家可以参考一下,Faster-Rcnn进行目标检测(原理篇)实验我使用的代码是python版本的Faster Rcnn,官方也有Matlab版本的,链接如下:py-fas...
深度学习框架caffe及py-faster-rcnn详细配置安装过程
配置环境:
ubuntu14.04CUDA7.5
1、准备工作
安装vim、python-pip、git
sudo ap...
转载自:http://blog.csdn.net/shenxiaolu1984/article/details/
Ren, Shaoqing, et al. “Faster R-CN...
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同。下面是训练前的一些修改。
(做数据集的过程可以看这里)
Faster-RCNN源码下载地址:
Matlab版本:http...
一、首先参照博客http://blog.csdn.net/qq_/article/details/
对py-faster-rcnn内的roi_pooling_laye...
本文安装python版本的faster-rcnn项目。
matlab版本请移步:/ShaoqingRen/faster_rcnn
python版本项目主页:ht...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Caffe学习系列——6使用Faster-RCNN进行目标检测
由于要实现服装的目标检测,所以一直在研究Faster-RCNN 。讲到目标检测,不得不提到rbg大神的深度神经网络检测算法系列RCNN、Fast-RCNN、Faster-RCNN,其还在github上开源了自己的代码,造福广大码农。这是rbg大神的主页
,以及本篇博文会用到的Faster-RCNN的github源码地址
,欢迎前去膜拜学习。对于RCNN、Fast-RCNN、Faster-RCNN的介绍就不在这里赘述了,可以看看我的上一篇博文 。该github源码是Faster-RCNN python版本的实现,并使用caffe。除了python版本,rbg大神还提供了matlab代码。这两种实现方式有些许的不同,主要体现在以下几点:
由于使用了python layer,python版本的在测试时间上会比matlab版本的慢10%左右,但是准确率差不多甚至略高一点。由于在实现方式上有一点点不同,所以使用MATLAB代码训练的模型与Python版本的不兼容目前已经实现的方式有两种:Alternative training和Approximate join training。推荐使用第二种,因为第二种使用的显存更小,而且训练会更快。
本篇博文主要分为两部分,第一部分讲如何配置py-faster-rcnn并训练PASCALVOC2007,运行demo。第二部分讲如何对代码和数据集进行修改实现自己数据的训练与检测。
配置与运行Demo
这个过程主要是跟着github上的说明: 走了一遍用以熟悉用Faster-RCNN进行目标检测的过程。
1.配置、编译与安装环境
在进行这一步之前,需已经在自己的机器上配置好caffe环境以及各种依赖项的安装,在配置之前,需确保已经安装以下几个python包:cython、easydict和python-opencv。安装命令如下:
pip install cython pip install easydict apt-get install python-opencv
从github上clone项目,注意!一定要在clone时加入–recursive参数,不然会很麻烦,也不要直接下载,在机器上装个git来clone,这样会省去很多时间。
git clone –recursive
Cython模块编译
cd $FRCN_ROOT /lib
caffe和pycaffe的编译
在编译之前,需要复制$FRCN_ROOT/caffe-fast-rcnn 的Makefile.config.example,然后重命名为Makefile.config。
需要注意的是里面有几个配置需要添加
打开USE_CUDNN=1,这个选项默认情况下是关闭的,需要打开让CUDA支持DNN
打开WITH_PYTHON_LAYER=1,默认关闭,需打开,因为FasterRCNN需要支持Python接口。
执行以下命令进行编译
cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe
2.运行demo
下载训练好的模型,下载后这个faster_rcnn_models文件夹在$FRCN_ROOT/data下面,可以从data/README.md中查看关于这个的详细介绍。这些模型是在VOC 2007 上训练的。
cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh
这里有个小建议,就是下载模型时,直接去脚本文件中复制URL使用迅雷下载更快。
cd $FRCN_ROOT
./tools/demo.py
这个demo展示了使用在PASCAL VOC 2007上训练的VGG16网络来进行目标检测。运行结果如下图所示:
3.训练PASCAL VOC 2007的数据集
下载训练、验证以及测试集和VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.ta
解压后的文件结构如下
$VOCdevkit/
# 开发工具包$VOCdevkit/VOCcode/
# VOC实用代码$VOCdevkit/VOC2007# 图片集, 注释, 等等# 一些其他的目录
将VOCdevkit改名为VOCdevkit2007,然后放到data文件夹下,亦可以使用软连接的方式,
cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007
下载预训练的ImageNet模型
cd $FRCN_ROOT
./data/scripts/fetch_imagenet_models.sh
VGG16来自,ZF是由MSRA训练的结构
(1) 使用交替优化(alternating optimization)算法来训练和测试Faster R-CNN
cd $FRCN_ROOT./experiments/scripts/faster_rcnn_alt_opt.sh [GPU_ID] [NET] [--set ...]# GPU_ID是你想要训练的GPUID# 你可以选择如下的网络之一进行训练:ZF, VGG_CNN_M_1024, VGG16# --set ... 运行你自定义fast_rcnn.config参数,例如.#
--set EXP_DIR seed_rng1701 RNG_SEED 1701#例如命令./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
输出的结果在 $FRCN_ROOT/output下。训练过程截图:
(2) 使用近似联合训练( approximate joint training)
cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [--set ...]
这个方法是联合RPN模型和Fast R-CNN网络训练。而不是交替训练。用此种方法比交替优化快1.5倍,但是准确率相近。所以推荐使用这种方法
训练Fast R-CNN网络的结果保存在这个目录下:
output/&experiment directory&/&dataset name&/
测试保存在这个目录下:
output/&experiment directory&/&dataset name&/&network snapshot name&/
4.遇到的问题
TypeError: ‘numpy.float64’ object cannot be interpreted as an index
这个错误是$FRCN_ROOT/lib/roi_data_layer下的minibatch.py中的npr.choice引起的,所以需要改成ruxia所示
if fg_inds.size & 0:
for i in range(0,len(fg_inds)):
fg_inds[i] = int(fg_inds[i])
fg_inds = npr.choice(fg_inds, size=int(fg_rois_per_this_image), replace=False)
注意有两个npr.choice,所以两个地方都按照如上来改。
labels[fg_rois_per_this_image:] = 0
TypeError: slice indices must be integers or None or have an index method
这个错误是由numpy的版本引起的,只要将fg_rois_per_this_image强制转换为int型就可以了
labels[int(fg_rois_per_this_image):] = 0
使用Faster-RCNN训练自己的数据集
1.工程目录简介
由于需要训练自己的数据集,所以需要对这个工程各个目录的作用有所了解
caffe-fast-rcnn:caffe框架目录data:用来存放pretrained模型以及读取文件的cache缓存,还有一些下载模型的脚本experiments:存放配置文件以及运行的log文件,另外这个目录下有scripts,里面存放end2end和alt_opt两种训练方式的脚本lib:用来存放一些python接口文件,如其下的datasets主要负责数据库读取,config负责一些训练的配置选项models:里面存放了三个模型文件,小型网络ZF,中型网络VGG_CNN_M_1024以及大型网络VGG16,根据你的硬件条件来选择使用哪种网络,ZF和VGG_CNN_M_1024需要至少3G内存,VGG16需要更多的内存,但不会超过11G。output:这里存放的是训练完成后的输出目录,这是运行了训练后才会出现的目录tools:里面存放的是训练和测试的Python文件
2.创建数据集
我个人觉得训练模型最头疼的是数据集的准备,本文我以服装的识别为例来说明如何用自己的数据集进行目标检测。在准备数据集的时候,假如你是第一次用自己的数据集进行训练,那么最好是参照上一章节跑的demo中的VOC2007数据集的格式来准备,这样,关于后续训练过程会涉及到的配置更改会较为简单,比较容易成功。在本次的训练过程中,我使用的是由香港中文大学提供的服装标记相关的数据集,在此特别感谢一下他们愿意将数据集公开。想要获取他们的数据集只需要发邮件申请即可。基于上述已标记的数据集,可将数据集整理得到如下所示的格式:
0000001.jpg Blouse 72 79 232 273
0000002.jpg Shorts 67 59 155 161
如果一张图片有多个目标,则格式如下:(比如两个目标)
000002.jpg dog 44 28 132 121
000002.jpg car 50 27 140 110
将上述的txt转成xml,可参考如下matlab代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
%%%该代码可以做voc2007数据集中的xml文件,%txt文件每行格式为:0000001.jpg Tee 44 28 132 121%即每行由图片名、目标类型、包围框坐标组成,空格隔开%包围框坐标为左上角和右下角%@author:bealin%%%注意修改下面四个变量imgpath='/home/linbiyuan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages/';%图像存放文件夹txtpath='/home/linbiyuan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/alldata.txt';%txt文件xmlpath_new='/home/linbiyuan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations/';%修改后的xml保存文件夹foldername='VOC2007';%xml的folder字段名fidin=fopen(txtpath,'r');while ~feof(fidin)
tline=fgetl(fidin);
str = regexp(tline, ' ','split');
filepath=[imgpath,str{1}];
img=imread(filepath);
[h,w,d]=size(img);
rectangle('Position',[str2double(str{3}),str2double(str{4}),str2double(str{5})-str2double(str{3}),str2double(str{6})-str2double(str{4})],'LineWidth',4,'EdgeColor','r');
Createnode=com.mathworks.xml.XMLUtils.createDocument('annotation');
Root=Createnode.getDocumentE%根节点
node=Createnode.createElement('folder');
node.appendChild(Createnode.createTextNode(sprintf('%s',foldername)));
Root.appendChild(node);
node=Createnode.createElement('filename');
node.appendChild(Createnode.createTextNode(sprintf('%s',str{1})));
Root.appendChild(node);
source_node=Createnode.createElement('source');
Root.appendChild(source_node);
node=Createnode.createElement('database');
node.appendChild(Createnode.createTextNode(sprintf('My Database')));
source_node.appendChild(node);
node=Createnode.createElement('annotation');
node.appendChild(Createnode.createTextNode(sprintf('VOC2007')));
source_node.appendChild(node);
node=Createnode.createElement('image');
node.appendChild(Createnode.createTextNode(sprintf('flickr')));
source_node.appendChild(node);
node=Createnode.createElement('flickrid');
node.appendChild(Createnode.createTextNode(sprintf('NULL')));
source_node.appendChild(node);
owner_node=Createnode.createElement('owner');
Root.appendChild(owner_node);
node=Createnode.createElement('flickrid');
node.appendChild(Createnode.createTextNode(sprintf('NULL')));
owner_node.appendChild(node);
node=Createnode.createElement('name');
node.appendChild(Createnode.createTextNode(sprintf('lby')));
owner_node.appendChild(node);
size_node=Createnode.createElement('size');
Root.appendChild(size_node);
node=Createnode.createElement('width');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(w))));
size_node.appendChild(node);
node=Createnode.createElement('height');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(h))));
size_node.appendChild(node);
node=Createnode.createElement('depth');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(d))));
size_node.appendChild(node);
node=Createnode.createElement('segmented');
node.appendChild(Createnode.createTextNode(sprintf('%s','0')));
Root.appendChild(node);
object_node=Createnode.createElement('object');
Root.appendChild(object_node);
node=Createnode.createElement('name');
node.appendChild(Createnode.createTextNode(sprintf('%s',str{2})));
object_node.appendChild(node);
node=Createnode.createElement('pose');
node.appendChild(Createnode.createTextNode(sprintf('%s','Unspecified')));
object_node.appendChild(node);
node=Createnode.createElement('truncated');
node.appendChild(Createnode.createTextNode(sprintf('%s','0')));
object_node.appendChild(node);
node=Createnode.createElement('difficult');
node.appendChild(Createnode.createTextNode(sprintf('%s','0')));
object_node.appendChild(node);
bndbox_node=Createnode.createElement('bndbox');
object_node.appendChild(bndbox_node);
node=Createnode.createElement('xmin');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(str{3}))));
bndbox_node.appendChild(node);
node=Createnode.createElement('ymin');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(str{4}))));
bndbox_node.appendChild(node);
node=Createnode.createElement('xmax');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(str{5}))));
bndbox_node.appendChild(node);
node=Createnode.createElement('ymax');
node.appendChild(Createnode.createTextNode(sprintf('%s',num2str(str{6}))));
bndbox_node.appendChild(node);
lastname=str{1};
tempname=strrep(lastname,'.jpg','.xml');
xmlwrite(tempname,Createnode);
fprintf('%s\n',tempname);endfclose(fidin);
由于我的数据集是单标签的,所以这份代码是针对单标签来生成xml。假如你的数据集是多标签的,txt的格式可前所示,而相应的matlab代码做出一点修改即可。生成的xml格式如下
这份代码运行生成的xml文件是在当前目录下的,所以还需要将所有的xml放到VOC2007下的Annotations中,可参考如下linux命令:
for xml in *.do mv $xml Annotations/;done
将所有的训练图片放到JPEGImages文件夹中,生成ImageSet\Main里的四个txt文件,分别是:trainval.txt(训练和验证集总和)、train.txt(训练集)、val.txt(验证集)、test.txt(测试集),trainval集占整个数据集的70%,train集占trainval集的70%,val集占trainval集的30%,test集占整个数据集的30%。可参考以下代码进行数据集的划分:
123456789101112131415161718192021222324252627282930313233343536373839
%%%该代码根据已生成的xml,制作VOC2007数据集中的trainval.train.test.txt和val.txt%trainval占总数据集的70%,test占总数据集的30%;train占trainval的70%,val占trainval的30%;%上面所占百分比可根据自己的数据集修改%注意修改下面两个路径xmlfilepath='/home/linbiyuan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations';txtsavepath='/home/linbiyuan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/';xmlfile=dir(xmlfilepath);numOfxml=length(xmlfile)-2;%减去.和..
总的数据集大小trainval=sort(randperm(numOfxml,floor(numOfxml*0.7)));%trainval为数据集的50%test=sort(setdiff(1:numOfxml,trainval));%test为剩余50%trainvalsize=length(trainval);%trainval的大小train=sort(trainval(randperm(trainvalsize,floor(trainvalsize*0.7))));val=sort(setdiff(trainval,train));ftrainval=fopen([txtsavepath 'trainval.txt'],'w');ftest=fopen([txtsavepath 'test.txt'],'w');ftrain=fopen([txtsavepath 'train.txt'],'w');fval=fopen([txtsavepath 'val.txt'],'w');for i=1:numOfxml
if ismember(i,trainval)
fprintf(ftrainval,'%s\n',xmlfile(i+2).name(1:end-4));
if ismember(i,train)
fprintf(ftrain,'%s\n',xmlfile(i+2).name(1:end-4));
fprintf(fval,'%s\n',xmlfile(i+2).name(1:end-4));
fprintf(ftest,'%s\n',xmlfile(i+2).name(1:end-4));
endendfclose(ftrainval);fclose(ftrain);fclose(fval);fclose(ftest);
至此,数据集的构建就完成啦,你可以新建一个文件夹,将上述三个文件夹放到里面去,也可将上述三个文件夹分贝替换VOC2007数据集中的Annotations、ImageSets和JPEGImages,这样可免去一些训练的修改。本文选择的是替换~
3.训练自己的数据
1. 修改prototxt配置文件
这些配置文件都在models下的pascal_voc下。里面有三种网络结构:ZF、VGG16、VGG_CNN_M_1024,本文选择的是VGG_CNN_M_1024 。每个网络结构中都有三个文件夹,分别是faster_rcnn_end2end、faster_rcnn_alt_opt、faster_rcnn。使用近似联合训练,比交替优化快1.5倍,但是准确率相近,所以推荐使用这种方法。更改faster_rcnn_end2end文件夹下的train.prototxt和test.prototxt,train中需要更改的地方有三处,
第一处是input-data层,将原先的21改成:你的实际类别数+1(背景),我目标检测一共有46类,所以加上背景这一类,一共47类。
第二处是cls_score层
第三处是bbox_pred,这里需将原来的84改成(你的类别数+1)4,即(46+1)4=188
test.prototxt中没有input-data层,所以只需按照train中的修改cls_score层以及bbox_pred层即可
2. 修改lib/datasets/pascal_voc.py,将类别改成自己的类别
这里有一个注意点就是,这里的类别以及你之前的类别名称最好是全部小写,假如是大写的话,则会报keyError的错误,这时只需要在pascal_voc。py中第218行的lower去掉即可
datasets目录下主要有三个文件,分别是
(1) factory.py:这是一个工厂类,用类生成imdb类并且返回数据库供网络训练和测试使用;
(2) imdb.py:是数据库读写类的基类,封装了许多db的操作;
(3) pascl_voc.pyRoss用这个类来操作
3. 修改py-faster-rcnn/lib/datasets/imdb.py
在使用自己的数据进行训练时,假如你的数据集中的图片没有统一整理过就会报 assert(boxes[:,2] &= boxes[:,0]).all() 这个错误,故需在imdb.py中加入如下几行
4. 开始训练
cd py-faster-rcnn
./experiments/scripts/faster_rcnn_end2end.sh 0 VGG_CNN_M_1024 pascal_voc
由于训练过程太长,可以将训练过程产生的输出定向输入到log文件中,这样可方便查看。只需在上述命令中加入定向输入的命令即可,如下:
./experiments/scripts/faster_rcnn_end2end.sh 0 VGG_CNN_M_1024 pascal_voc & /home/lby/log/clothdirector.log 2&&1
!!!训练前需要将cache中的pki文件以及VOCdevkit2007中annotations_cache的缓存删掉。
训练过程中会遇到的问题
roidb[i][‘image’] = imdb.image_path_at(i)
IndexError: list index out of range
解决方法:删除data/cache里面的pki文件
注意:不管在训练过程中遇到什么问题,修正过后,重新训练之前都需要将cache中的pki文件删除之后再重新运行,R = [obj for obj in recs[imagename] if obj[‘name’] == classname]
KeyError: ‘0000001’
这是在测试时出现错误,删掉VOCdevkit2007中annotations_cache的缓存
4.测试结果
训练完成之后,将output中的最终模型拷贝到data/faster_rcnn_models,修改tools下的demo.py,我是使用VGG_CNN_M_1024这个中型网络,不是默认的ZF,所以要改的地方挺多
1. 修改class
123456789101112
CLASSES = ('__background__',
'Blouse', 'Sweatpants', 'Cardigan', 'Button-Down',
'Cutoffs', 'Chinos', 'Top', 'Anorak', 'Kimono',
'Tank', 'Robe', 'Parka', 'Jodhpurs',
'Halter', 'Shorts', 'Caftan','Turtleneck',
'Leggings', 'Joggers', 'Hoodie', 'Culottes',
'Sweater', 'Flannel', 'Jeggings', 'Blazer',
'Onesie', 'Coat', 'Henley', 'Jacket',
'Trunks', 'Gauchos', 'Sweatshorts', 'Romper',
'Jersey', 'Bomber', 'Sarong', 'Dress','Jeans',
'Tee', 'Coverup', 'Capris', 'Kaftan','Peacoat',
'Poncho', 'Skirt', 'Jumpsuit')
2. 增加你自己训练的模型
NETS = {'vgg16': ('VGG16',
'VGG16_faster_rcnn_final.caffemodel'),
'zf': ('ZF',
'ZF_faster_rcnn_final.caffemodel'),
'myvgg1024':('VGG_CNN_M_1024','vgg_cnn_m_1024_faster_rcnn_iter_70000.caffemodel')}
3. 修改prototxt,如果你用的是ZF,就不用改了
prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
'faster_rcnn_end2end', 'test.prototxt')
4. 开始检测
执行 ./tools/demo.py –net myvgg1024
假如不想那么麻烦输入参数,可以在demo的parse_args()里修改默认参数
parser.add_argument(‘–net’, dest=’demo_net’, help=’Network to use [myvgg1024]’,
choices=NETS.keys(), default=’myvgg1024’)
这样只需要输入 ./tools/demo.py 就可以了
检测结果:
遇到的问题
Cannot copy param 0 weights from layer“”:已放弃(核心已转储)
没有修改prototxt,详情请见第3步
Makefile:2: recipe for target ‘all’ failed
Traceback (most recent call last):
File “setup.py”, line 59, in
CUDA = locate_cuda()
File “setup.py”, line 56, in locate_cuda
raise EnvironmentError(‘The CUDA %s path could not be located in %s’ % (k, v))
EnvironmentError: The CUDA lib64 path could not be located in /usr/lib64
Makefile:2: recipe for target ‘all’ failed
解决方法:打开 setup.py,把lib64改为lib
cudaconfig = {‘home’:home, ‘nvcc’:nvcc,
'include': pjoin(home, 'include'),
'lib64': pjoin(home, 'lib')}
make error:command ‘/usr/local/bin/nvcc’ failed with exit status 1
添加 export PATH=/usr/local/cuda/bin:”$PATH” 到你的 ~/.bashrc
Please enable JavaScript to view the &a href=&///?ref_noscript&&comments powered by duoshuo.&/a&
本文已收录于以下专栏:
相关文章推荐
首先推荐文章,里面有讲如何安装fast-rcnn,以及编译。
或者我直接把fast-rcnn的地址写出来:/rbgirshick/fast-rcnn
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同。下面是训练前的一些修改。
(做数据集的过程可以看这里)
Faster-RCNN源码下载地址:
Matlab版本:http...
Faster RCNN 训练自己的数据集
转载请注明出处,楼燚(yì)航的blog,/louyihang-loves-baiyan/
/YihangLou/...
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同。做好数据集后,我们开始训练,下面是训练前的一些修改。
1 、VOCdevkit2007\VOCcode\VOCinit.m...
本文介绍如何在 cpu
模式下使用 Faster RCNN
demo,以及在cpu
模式下训练自己的数据。Install Faster-rcnn源码地址:/r...
用faster-rcnn训练自己的数据集(VOC2007格式,python版)一. 配置caffe环境ubunt16.04下caffe环境安装二. 下载,编译及测试py-faster-rcnn源码(一...
转载自 楼燚(yì)航的blog,/louyihang-loves-baiyan/
/YihangLou/fast...
原理上一篇文章,已经说过了,大家可以参考一下,Faster-Rcnn进行目标检测(原理篇)实验我使用的代码是python版本的Faster Rcnn,官方也有Matlab版本的,链接如下:py-fas...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 怎么才能训练口才 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信