Caffe: Faster RCNN训练模型(Windows)
来源:互联网 发布:mac 外置显卡 编辑:程序博客网 时间:2024/06/05 00:15
环境:VS2013,CUDA8.0,CuDNN 5.0,Win10
前提:已正确搭建Faster RCNN运行环境,成功运行Demo。教程可见这篇文章。
一、准备工作
1. 下载VOC2007数据集
下载地址:
官网:http://host.robots.ox.ac.uk/pascal/VOC/voc2007/,同时下载训练集+测试集
或者http://academictorrents.com/details/c9db37df1eb2e549220dc19f70f60f7786d067d4
或者别人提供的网盘:https://pan.baidu.com/s/1mhMKKw4
下载完成后,解压至py-faster-rcnn\data路径下,并将文件夹名称改为:VOCdevkit2007,如图:
这样我们就可以使用VOC2007的数据组织形式完成训练了。其中:
VOCdevkit2007/VOC2007/JPEGImages里是训练&测试数据图片
VOCdevkit2007/VOC2007/Annotations里是对图片的标注,XML格式,即说明图片的哪一坐标范围内是哪一类物体
VOCdevkit2007/VOC2007/ImageSets/Main里的txt记录了哪些图片是作为训练or测试使用
2.(非必要)下载预训练模型
地址:https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz
如果想利用Finetune技术重新训练模型什么的,可以进行下载。不然可以跳过。
3.移动之前build的文件
将py-faster-rcnn\lib\build\lib.win-amd64-2.7下的三个文件夹,复制到py-faster-rcnn\lib下。
二、训练VOC2007
我们可以先通过VOC2007的数据练练手,默认程序的训练参数是基于它的,所以不需要改什么地方就能够进行训练。希望尝试用自己数据训练的可以跳至下节。
1.训练模型
我们使用end2end的形式进行训练,CMD打开至py-faster-rcnn目录下,运行如下命令:
SET VS90COMNTOOLS=%VS120COMNTOOLS%python .\tools\train_net.py --gpu 0 --solver .\models\pascal_voc\ZF\faster_rcnn_end2end\solver.prototxt --imdb=voc_2007_trainval --iters=90000 --cfg=.\experiments\cfgs\faster_rcnn_end2end.yml
其中:
solver确定使用哪一个网络的训练设置(文件),顺便确定使用哪个网络。这里我们用的是程序自带的ZF网络;
iter确定训练迭代次数,自设;
cfg确定训练中的faster rcnn配置,这里我们用的仍是自带的end2end配置。
另:如果希望对某个模型进行再训练,只要再加上:–weight=caffemodel路径即可。
训练完成后,模型默认保存在:
py-faster-rcnn\output\faster_rcnn_end2end\voc_2007_trainval
2.测试模型
然后我们可以试试模型效果,首先修改demo.py:
demo.py
myzf是自己起的网络名称,最后则是训练得到的模型名。
然后我们将之前output文件夹下训练得到的模型,移至py-faster-rcnn\data\faster_rcnn_models路径下(没有就新建)。
最后CMD打开到py-faster-rcnn\tools路径下,运行
SET VS90COMNTOOLS=%VS120COMNTOOLS%python demo.py --net myzf
三.训练自己的数据
那么如何使用自己的数据训练呢?
1.仿照VOC2007数据格式,创建数据集
VOC2007中:
JPEGImages存放图片文件,且命名规则为6位数字;
Annotations存放用于标注的XML,且名称与图像保持一致;
ImageSets/Main中的txt确定哪些用于训练,哪些测试,每行是一个文件名。
所以如果不想过多改动程序,我们只要把原本JPEGImages等文件夹内的东西删掉,再替换成我们自己的、具有相同形式的数据就可以了。
注意:一旦数据发生过改变,在开始训练前需要删除py-faster-rcnn\data下的cache文件夹,否则数据集的修改不会生效。py-faster-rcnn\data\VOCdevkit2007下的annotations_cache最好也同时删掉
图片的标注可以考虑使用opencv+tinyxml,标注图片并生成对应的xml,txt的生成也不复杂。总之这里是需要个人实现的,如果不想体会编程的快感——那就上网搜吧XD
2.修改网络结构
我们自己数据集包含的种类肯定与VOC不同,这就需要修改网络模型中,有关分类个数的地方。以ZF网络为例,其prototxt文件在:
pascal_voc\ZF\faster_rcnn_end2end
train.prototxt
layer { 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': 3" #类别数+1 }}
layer { 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: 3 #类别数+1 weight_filler { type: "gaussian" std: 0.01 } bias_filler { type: "constant" value: 0 } }}
layer { 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: 12 #(类别数+1)*4 weight_filler { type: "gaussian" std: 0.001 } bias_filler { type: "constant" value: 0 } }}
test.prototxt
同上,只有后两个地方需要改,即cls_score和bbox_pred。
网络结构修改完毕,我们还需要修改训练配置,包括:
py-faster-rcnn\lib\datasets\pascal_voc.py:
self._classes = ('__background__', # always index 0 'classname1','classname2') # 类别名
至此有关类别的部分已经修改完毕。由于有时训练过程中会碰到bbox越界的问题,我们最好把下面这个文件中的这个函数修改成下头这个样子:
py-faster-rcnn\lib\datasets\imdb.py
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 # add for b in range(len(boxes)): if boxes[b][2] < boxes[b][0]: boxes[b][0] = 0 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
3.训练
执行训练的语句一样。再次提醒只要数据集发生了变动,记得先删cache再训练
SET VS90COMNTOOLS=%VS120COMNTOOLS%python .\tools\train_net.py --gpu 0 --solver .\models\pascal_voc\ZF\faster_rcnn_end2end\solver.prototxt --imdb=voc_2007_trainval --iters=90000 --cfg=.\experiments\cfgs\faster_rcnn_end2end.yml
假如使用的其它名称的prototxt,记得在–solver中修改即可。
测试模型前,记得将demo.py中的类名处进行修改:
demo.py
CLASSES = ('__background__', 'classname1','classname2')
注:觉得CMD写的累?写成.bat吧,记得注意路径。
- Caffe: Faster RCNN训练模型(Windows)
- 深度学习Caffe实战笔记(21)Windows平台 Faster-RCNN 训练好的模型测试数据
- 训练py-faster-rcnn(caffe)
- Faster RCNN 训练自己的检测模型
- Faster RCNN 模型训练及检测
- Faster RCNN 模型训练及检测
- 使用faster rcnn训练自己的模型
- Faster RCNN 训练自己的检测模型
- 使用faster-rcnn训练自己的模型
- 深度学习Caffe实战笔记(20)Windows平台 Faster-RCNN 训练自己的数据集
- Caffe: Faster-RCNN Python版本配置 (Windows)
- Windows+VS2015编译caffe+py-faster-rcnn
- Caffe: Faster-RCNN Python版本配置 (Windows)
- Windows+VS2015编译caffe+py-faster-rcnn
- Caffe: Faster-RCNN Python版本配置 (Windows)
- 使用caffe训练faster-rcnn时遇到的问题总结
- 使用caffe训练faster-rcnn时遇到的问题总结
- 使用caffe训练faster-rcnn时遇到的问题总结
- 设计模式之二--外观模式《转载》
- Linux 访问window 共享目录
- XZ_iOS之通过分享的链接,调起app
- 此脚本可以下载一些漂亮的https网页模版
- 在 Eclipse 中运行 MapReduce 程序会遇到的问题
- Caffe: Faster RCNN训练模型(Windows)
- bzoj 1012 单调队列 解题报告
- StringTokenizer
- 生产者消费者模式——线程并发(通知、等待)
- PT学习笔记
- Map遍历方式比较
- 海选女主角
- JavaScript基础
- JAVA selenium——WebDriverException: Cannot find firefox binary in PATH.