Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型
0 说明
系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包。
1 设置和编译py-faster-rcnn
1.1 下载py-faster-rcnn
$ git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
$ git submodule update --init --recursive 或者下载github上最新版本的caffe-fast-rcnn:
$ git clone https://github.com/rbgirshick/caffe-fast-rcnn.git 然后切换到对应的commit
- 1
- 2
- 3
- 1
- 2
- 3
1.2 编译Cython模块
$ cd py-faster-rcnn/lib
$ make
- 1
- 2
- 1
- 2
1.3 编译caffe和pycaffe
$ cd py-faster-rcnn/caffe-fast-rcnn
$ cp Makefile.config.example Makefile.config# 修改 Makefile.config, 去掉注释
WITH_PYTHON_LAYER := 1
USE_CUDNN := 1
BLAS_INCLUDE := /usr/include/atlas
# 根据你的需求修改Makefile.config , 比如设置GPU 支持, cuDNN, CUDA 版本, Anaconda, OpenCV, 等等。
# 修改完Makefile.config后
$ make all -j32 # -j32 编译加速. 32 CPU核数目,根据你的电脑的CP核数目来修改,或者直接make all -j也可以
# 假设你已经安装好了PyCaffe相关依赖, 否则请重新去参考Caffe安装教程
$ make pycaffe -j32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
1.4 py-faster-rcnn各文件夹说明
.
├── caffe-fast-rcnn # caffe目录
│ ├── build -> .build_release
│ ├── caffe.cloc
│ ├── cmake
│ ├── CMakeLists.txt
│ ├── CONTRIBUTING.md
│ ├── CONTRIBUTORS.md
│ ├── data
│ ├── distribute
│ ├── docs
│ ├── examples
│ ├── include
│ ├── INSTALL.md
│ ├── LICENSE
│ ├── Makefile
│ ├── Makefile.config # 编译caffe配置文件
│ ├── Makefile.config.example
│ ├── matlab
│ ├── models
│ ├── python
│ ├── README.md
│ ├── scripts
│ ├── src
│ └── tools
├── data # 存放训练数据文件夹
│ ├── cache
│ ├── demo
│ ├── faster_rcnn_models
│ ├── imagenet_models
│ ├── pylintrc
│ ├── README.md
│ ├── scripts
│ ├── VOCdevkit # VOC2007数据集
│ ├── VOCdevkit2007 -> VOCdevkit
├── experiments
│ ├── cfgs
│ ├── logs
│ ├── README.md
│ └── scripts # 包含端对端训练脚本
├── lib
│ ├── datasets # 包含数据库读取工厂类
│ ├── fast_rcnn # 包含config.py
│ ├── Makefile
│ ├── nms
│ ├── pycocotools
│ ├── roi_data_layer
│ ├── rpn
│ ├── setup.py
│ ├── transform
│ └── utils
├── LICENSE
├── models # 大中小[VGG16,VGGCNNM1024,ZF]模型文件
│ ├── coco
│ ├── pascal_voc
│ └── README.md
├── output # 训练输出模型
├── README.md
└── tools # 包含训练py脚本和运行demo脚本 ├── compress_net.py├── demo.py├── eval_recall.py├── _init_paths.py├── _init_paths.pyc├── README.md├── reval.py├── rpn_generate.py├── test_net.py├── train_faster_rcnn_alt_opt.py├── train_net.py└── train_svms.py
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
问题:
faster rcnn 代码默认是使用的cudnn v4, 但是为了体验最新的v5, 或者使用GTX1080 ,我们编译faster rcnn的时候就会报错
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from src/caffe/data_reader.cpp:6:
/usr/local/cuda/include/cudnn.h:799:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetPooling2dDescriptor(
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
解决办法:
用最新caffe源码的以下文件替换掉faster rcnn 中caffe-fast-rcnn里面的对应文件
include/caffe/layers/cudnn_relu_layer.hpp, src/caffe/layers/cudnn_relu_layer.cpp, src/caffe/layers/cudnn_relu_layer.cuinclude/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cuinclude/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cuinclude/caffe/util/cudnn.hpp将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
修改完后,git status下,确保修改了指定的文件:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
然后重新编译:
$ make all -j
$ make pycaffe -j
- 1
- 2
- 1
- 2
到此就可以使用py-faster-rcnn了。
2 测试py-faster-rcnn demo
2.1 下载预先训练好的Faster-rcnn模型
$ cd py-faster-rcnn
$ ./data/scripts/fetch_faster_rcnn_models.sh
# 如果下载失败,可以通过这个种子来下载:
# http://academictorrents.com/download/cca56021739c8a75af3b58f536d4930266c25d5e.torrent
# 然后将faster_rcnn_models.tgz解压到data目录下
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
2.2 运行demo
$ cd py-faster-rcnn
$ ./tools/demo.py
- 1
- 2
- 1
- 2
3 基于PASCAL VOC数据集训练模型
3.1 准备数据集和预训练模型
$ cd py-faster-rcnn/data
# 注意链接可能会失效,网上可以另找资源
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar$ tar xvf VOCdevkit_08-Jun-2007.tar
$ tar xvf VOCtrainval_06-Nov-2007.tar
$ tar xvf VOCtest_06-Nov-2007.tar$ ln -s VOCdevkit VOCdevkit2007 #create a softlink$ cd py-faster-rcnn
$ ./data/scripts/fetch_imagenet_models.sh
$ ./data/scripts/fetch_faster_rcnn_models.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
3.2 训练
$ cd py-faster-rcnn
# ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [DATASET]
$# # Directly run this command might have an error "AssertionError: Selective search data not found at:". For the solution, please refer to Part 4.
$ ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascavcc
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
训练完成后,见py-faster-rcnn/output文件夹。
3.3 说明
faster_rcnn_end2end.sh
整个处理的最上层,包括对输入参数的处理,涉及到GPU id, 网络结构(ZF-net, VGG, 或者其他),数据集(PASCAL VOC, COCO或者其他数据集),和一些其他的配置输入参数。
然后它会调用两个程序,一个是train_net.py,紧跟着的是test_net.py,train_net.py是用来训练模型的,而test_net.py是用来评估训练出来的模型的性能的。
- 1
- 2
- 1
- 2
faster_rcnn_end2end.yml
# 我们可以从faster_rcnn_end2end.sh看到,cfg来自faster_rcnn_end2end.yml,
# 这意味着这个文件存储着很多重要的配置,下面显示了一些原始的配置:EXP_DIR: faster_rcnn_end2end
TRAIN:HAS_RPN: TrueIMS_PER_BATCH: 1BBOX_NORMALIZE_TARGETS_PRECOMPUTED: TrueRPN_POSITIVE_OVERLAP: 0.7RPN_BATCHSIZE: 256PROPOSAL_METHOD: gtBG_THRESH_LO: 0.0
TEST:HAS_RPN: True
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
但是,如果要添加自己的配置,例如在训练时进行模型快照的迭代次数,可以参考py-faster-rcnn / lib / fast_rcnn / config.py。此文件包含所有配置参数。不需要在此config.py中设置配置,但只需在faster_rcnn_end2end.yml中添加语句。程序可以自动解析参数。当然,如果没有声明.yml文件中的项目,则会采用存在的默认值。
train_net.py
这个py文件主要是读取数据并训练数据,它连接着py-faster-rcnn/lib/database/
里面的内容。
Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型相关推荐
- MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《9》
MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)<1>:论文源地址,克隆MXNet版本的源码,安装环境与测试,以及对下载的源码的每个目录做什么用的,做个解释. MXN ...
- RCNN系列实验的PASCAL VOC数据集格式设置
我们在做RCNN系列的实验时,往往需要把数据集的格式设置为和PASCAL VOC数据集一样的格式,其实当然也可以修改读取数据的代码,只是这样更为麻烦,自己的数据格式变了又得修改. 首先以VOC200 ...
- python数据库开发 dga_DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测)...
DGA-detection DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测) This project impleme ...
- Ubuntu上用caffe的SSD方法训练Pascal VOC数据集
实验目的 继caffe和ssd搭建完成,demo也演示完毕,了解一些基本知识后,现在开始训练自己的数据集,在给自己的训练集处理之前,先跟着官方的示例将Pascal VOC数据集训练走一遍,把可能会踩坑 ...
- 图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总
目录 公共数据集 计算机视觉标准数据集整理-PASCAL VOC数据集 数据集文件结构 Annotation JPEGImages SegmentationClass SegmentationObje ...
- PASCAL VOC 数据集的标注格式
PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 ( **The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛. PASCAL的全称是 ...
- 对PASCAL VOC 数据集进行数据增强
对PASCAL VOC 数据集进行数据增强 1.GitHub仓库位置 目的:对VOC数据集的对象检测的数据进行数据增强.如果能帮到您请给本人一颗⭐,拜托了!!!!! https://github.co ...
- pascal行人voc_在Pascal VOC 数据集上训练YOLOv3模型
上节介绍了<从零开始在Windows10中编译安装YOLOv3>,本节介绍在Pascal VOC 数据集上训练YOLOv3. 第一步,下载并安装YOLOv3训练依赖项. a.下载Pasca ...
- 人工智能学习:PASCAL VOC数据集读取(6)
PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片.挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等.可以通过下载和读取的方法载入P ...
最新文章
- Spring-Spring4.X 概述
- 利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster
- boost::put_get_helper用法的测试程序
- docker pull 国内镜像_MAC版 的最新Docker 2.2版本配置国内代理的解决办法
- jquery 插件 thickbox窗口 第一个控件获得焦点(解决第二次弹出窗口,文本不能输入数据)...
- eclipse、MyEclipse实现批量改动文件编码
- 脱单盲盒小程序源码_微信脱单盲盒源码_交友盲盒系统源码
- 中柏平板电脑刷linux,中柏平板电脑系统下载与安装教程
- 利用偏最小二乘法选出最重要的特征波段Matlab
- iOS友盟社会化分享完全攻略
- 海思vo 分屏显示总结
- java支付宝第三方支付前置流程
- linux下mkdir出现mkdir(): File exists错误
- 资产管理运维一体化 接入IOT、BIM的设备数字智慧化管理
- 面试必看的注意事项在这里!
- amd linux raid,RAID的详解
- 放弃数学专业跳槽高薪行业,如今他却后悔了
- RHEL5/6 加载 DVD yum源
- Graphx社区发现算法学习
- 支持多商家在线客服系统源码
热门文章
- boost::range_const_iterato相关的测试程序
- boost::remove_if相关的测试程序
- boost::random::const_mod相关的测试程序
- boost::mp11::mp_eval_or相关用法的测试程序
- boost::mp11::mp_at相关用法的测试程序
- boost::lockfree::spsc_queue用法的测试程序
- GDCM:gdcm::StrictScanner的测试程序
- VTK:InfoVis之ArrayToTable
- OpenCV支持向量机SVM用于非线性可分离数据
- Qt Creator部署到设备