R-FCN+ResNet-50用自己的数据集训练模型(python版本)
说明:
本文假设你已经做好数据集,格式和VOC2007一致,并且Linux系统已经配置好caffe所需环境(博客里教程很多),下面是训练的一些修改。
py-R-FCN源码下载地址:
https://github.com/Orpine/py-R-FCN
也有Matlab版本:
https://github.com/daijifeng001/R-FCN
本文用到的是python版本。
本文主要参考https://github.com/Orpine/py-R-FCN。
准备工作:
(1)配置caffe环境(网上找教程)
(2)安装cython
, python-opencv
, easydict
- pip install cython
- pip install easydict
- apt-get install python-opencv
然后,我们就可以开始配置R-FCN了。
1.下载py-R-FCN
- git clone https://github.com/Orpine/py-R-FCN.git
下面称你的py-R-FCN路径为RFCN_ROOT.
2.下载caffe
- cd $RFCN_ROOT
- git clone https://github.com/Microsoft/caffe.git
如果一切正常的话,python代码会自动添加环境变量 $RFCN_ROOT/caffe/python,否则,你需要自己添加环境变量。
3.Build Cython
- cd $RFCN_ROOT/lib
- make
4.Build caffe和pycaffe
- cd $RFCN_ROOT/caffe
- cp Makefile.config.example Makefile.config
然后修改Makefile.config。caffe必须支持python层,所以WITH_PYTHON_LAYER := 1是必须的。其他配置可参考:Makefile.config
- cd $RFCN_ROOT/caffe
- make -j8 && make pycaffe
如果没有出错,则:
![](/assets/blank.gif)
5.测试Demo
$RFCN_ROOT/data/rfcn_models/resnet50_rfcn_final.caffemodel $RFCN_ROOT/data/rfcn_models/resnet101_rfcn_final.caffemodel
运行:
- cd $RFCN_ROOT
- ./tools/demo_rfcn.py --net ResNet-50
6.用我们的数据集训练
$VOCdevkit0712/ # development kit $VOCdevkit/VOCcode/ # VOC utility code $VOCdevkit/VOC0712 # image sets, annotations, etc. # ... and several other directories ...
如果你的文件夹名字不是VOCdevkit0712和VOC0712,修改成0712就行了。
(3)修改模型网络
- 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': 16" #cls_num
- }
- }
- layer {
- name: 'roi-data'
- type: 'Python'
- bottom: 'rpn_rois'
- bottom: 'gt_boxes'
- top: 'rois'
- top: 'labels'
- top: 'bbox_targets'
- top: 'bbox_inside_weights'
- top: 'bbox_outside_weights'
- python_param {
- module: 'rpn.proposal_target_layer'
- layer: 'ProposalTargetLayer'
- param_str: "'num_classes': 16" #cls_num
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_cls"
- name: "rfcn_cls"
- type: "Convolution"
- convolution_param {
- num_output: 784 #cls_num*(score_maps_size^2)
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_bbox"
- name: "rfcn_bbox"
- type: "Convolution"
- convolution_param {
- num_output: 3136 #4*cls_num*(score_maps_size^2)
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "rfcn_cls"
- bottom: "rois"
- top: "psroipooled_cls_rois"
- name: "psroipooled_cls_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 16 #cls_num
- group_size: 7
- }
- }
- layer {
- bottom: "rfcn_bbox"
- bottom: "rois"
- top: "psroipooled_loc_rois"
- name: "psroipooled_loc_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 64 #4*cls_num
- group_size: 7
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_cls"
- name: "rfcn_cls"
- type: "Convolution"
- convolution_param {
- num_output: 784 #cls_num*(score_maps_size^2)
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_bbox"
- name: "rfcn_bbox"
- type: "Convolution"
- convolution_param {
- num_output: 3136 #4*cls_num*(score_maps_size^2)
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "rfcn_cls"
- bottom: "rois"
- top: "psroipooled_cls_rois"
- name: "psroipooled_cls_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 16 #cls_num
- group_size: 7
- }
- }
- layer {
- bottom: "rfcn_bbox"
- bottom: "rois"
- top: "psroipooled_loc_rois"
- name: "psroipooled_loc_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 64 #4*cls_num
- group_size: 7
- }
- }
- layer {
- name: "cls_prob_reshape"
- type: "Reshape"
- bottom: "cls_prob_pre"
- top: "cls_prob"
- reshape_param {
- shape {
- dim: -1
- dim: 16 #cls_num
- }
- }
- }
- layer {
- name: "bbox_pred_reshape"
- type: "Reshape"
- bottom: "bbox_pred_pre"
- top: "bbox_pred"
- reshape_param {
- shape {
- dim: -1
- dim: 64 #4*cls_num
- }
- }
- }
- 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': 16" #cls_num
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_cls"
- name: "rfcn_cls"
- type: "Convolution"
- convolution_param {
- num_output: 784 #cls_num*(score_maps_size^2) ###
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "rfcn_cls"
- bottom: "rois"
- top: "psroipooled_cls_rois"
- name: "psroipooled_cls_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 16 #cls_num ###
- group_size: 7
- }
- }
<4>修改train_agnostic_ohem.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': 16" #cls_num ###
- }
- }
- layer {
- bottom: "conv_new_1"
- top: "rfcn_cls"
- name: "rfcn_cls"
- type: "Convolution"
- convolution_param {
- num_output: 784 #cls_num*(score_maps_size^2) ###
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "rfcn_cls"
- bottom: "rois"
- top: "psroipooled_cls_rois"
- name: "psroipooled_cls_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 16 #cls_num ###
- group_size: 7
- }
- }
<5>修改test_agnostic.prototxt
- layer {
- bottom: "conv_new_1"
- top: "rfcn_cls"
- name: "rfcn_cls"
- type: "Convolution"
- convolution_param {
- num_output: 784 #cls_num*(score_maps_size^2) ###
- kernel_size: 1
- pad: 0
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- param {
- lr_mult: 1.0
- }
- param {
- lr_mult: 2.0
- }
- }
- layer {
- bottom: "rfcn_cls"
- bottom: "rois"
- top: "psroipooled_cls_rois"
- name: "psroipooled_cls_rois"
- type: "PSROIPooling"
- psroi_pooling_param {
- spatial_scale: 0.0625
- output_dim: 16 #cls_num ###
- group_size: 7
- }
- }
- layer {
- name: "cls_prob_reshape"
- type: "Reshape"
- bottom: "cls_prob_pre"
- top: "cls_prob"
- reshape_param {
- shape {
- dim: -1
- dim: 16 #cls_num ###
- }
- }
- }
(4)修改代码
- 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'
- )
改成你的数据集标签。
- case $DATASET in
- pascal_voc)
- TRAIN_IMDB="voc_0712_trainval"
- TEST_IMDB="voc_0712_test"
- PT_DIR="pascal_voc"
- ITERS=110000
修改ITERS为你想要的迭代次数即可。
(5)开始训练
- cd $RFCN_ROOT
- ./experiments/scripts/rfcn_end2end_ohem.sh 0 ResNet-50 pascal_voc
(6)结果
- cd $RFCN_ROOT
- ./tools/demo_rfcn.py --net ResNet-50
我将显示的标签改为了中文,修改方法参考: http://blog.csdn.net/sinat_30071459/article/details/51694037
R-FCN+ResNet-50用自己的数据集训练模型(python版本)相关推荐
- Faster-RCNN+ZF用自己的数据集训练模型(Python版本)
说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同.下面是训练前的一些修改. (做数据集的过程可以看http://blog.csdn.net/sinat_30071459/ar ...
- CIFAR-10数据集可视化Python版本
CIFAR-10数据集有3个版本,分别是Python, Matlab, 二进制版本. 切记这里下载Python版本. 编辑代码export_cifar10.py import pickle from ...
- R语言中自带的一些数据集
在用R语言做数据分析的时候,我们经常需要一些数据做实验,尤其当学会一个新的方法或者算法的时候,就想赶快编程实现一下.那么,问题来了,用什么数据好呢,什么样的数据适合做这种实验呢? 好在R语言提供了很多 ...
- FCN网络的训练——以SIFT-Flow 数据集为例(转)
FCN网络的训练--以SIFT-Flow 数据集为例 参考文章: http://blog.csdn.net/u013059662/article/details/52770198 caffe的安装配置 ...
- R语言生成仿真的3D高斯簇数据集、使用scale函数进行数据缩放、并使用KMeans进行聚类分析、数据反向缩放并比较聚类生成的中心和实际数据的中心的差异、预测新的数据所属的聚类簇
R语言生成仿真的3D高斯簇数据集.使用scale函数进行数据缩放.并使用KMeans进行聚类分析.数据反向缩放并比较聚类生成的中心和实际数据的中心的差异.预测新的数据所属的聚类簇 目录
- R使用热力图(heatmap)可视化数据集
R使用热力图(heatmap)可视化数据集 R使用热力图(heatmap)可视化数据集 # 安装.加载包 install.packages('RNHANES') library(RNHANES) li ...
- Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型
0 说明 系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包. 1 设置和编译py-faster-rcnn 1.1 下载py-faster-rcnn $ gi ...
- 自定义制作python版本的CIFAR数据集
自定义制作python版本的CIFAR数据集 CIFAR-10/CIFAR-100数据集 1.准备图像 (以制作小数据集为例,便于理解) 这里自定义制作的数据集只包含2个类:dog,parrot,每个 ...
- 淘宝、京东、天猫商品名称数据集下载最新版本。包括中药、化学器材、摄影、动物、酒水、办公事务。
淘宝.京东.天猫商品名称数据集下载最新版本.包括中药.化学器材.摄影.动物.酒水.办公事务. 第一类 用于工业.科学.摄影.农业.园艺.森林的化学品,未加工人造合成树脂,未加工塑料物质,肥料,灭火用合 ...
最新文章
- linux会话管理,Linux 安装 screen 远程会话管理工具
- FPGA的设计艺术(12)使用parameter构建可重用的逻辑设计
- Android多线程:深入分析 Handler机制源码(二)
- centos7修改主机名_25个步骤完成centos7系统从0到1部署
- python是外部还是编程_Python网络编程(绑定到外部地址)
- cs6序列号 mac版photoshop_重磅!Parallels Desktop 16 M1版发布
- 小女出世,暂停工作,全职照料大人小孩
- zabbix_server
- [渝粤教育] 武汉大学 唐诗艺术 参考 资料
- hitb2017 sentosa writeup
- 通过GDI+修改jpg文件EXIF属性
- win10 屏幕保护时间到了不触发_你真的了解Win10么?网友教你玩转Win10!
- 往MYSQL中插入,读写图片!
- arduino 继电器控制led灯开关
- 相关性分析-皮尔森、斯皮尔曼肯德尔相关性系数
- imac html5播放器,超给力的五款Mac最佳高清音乐播放器
- python文件处理基础_第六篇:python基础之文件处理
- Kinect+Unity 实现虚拟人物动作同步(羽毛球场景)
- 邮件工具-MailUtil(发送邮件)
- 如何高效制作数据可视化大屏,大屏高效制作攻略分享,总有一款适合你