R-FCN+ResNet-50 训练模型
本文转载自:
http://blog.csdn.net/sinat_30071459/article/details/53202977
说明:
本文假设你已经做好数据集,格式和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,否则,你需要自己添加环境变量。
- 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
如果没有出错,则:
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
R-FCN+ResNet-50 训练模型相关推荐
- MXNet预训练模型下载 ResNet 50 101
imagenet11k resnet-50-symbol.json resnet-50-0000.params resnet-101-symbol.json resnet-101-0000.param ...
- Resnet 50 完整可跑代码 pytorch
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision ...
- Resnet 50 残差网络
1.简述 resnet50是何凯明提出,能有效解决深度网络退化问题的一种结构,将输入的多重非线性变化拟合变成了拟合输入与输出的残差,变为恒等映射,50即50层 膜拜巨神:https://github. ...
- resnet预训练模型_干货 | NLP中的十个预训练模型
Word2vec Fasttext ULMFit Glove Cove ELMO GPT1.0 GPT2.0 BERT Flair Embedding 一.Word2vec 1.word2vec种语言 ...
- resnet 50 网络分析
- Pytorch Resnet预训练模型参数地址
'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', 'resnet34': 'https://downl ...
- 用R做heatmap示例:NBA联盟50位顶级球员的指标表现
用R做heatmap示例:NBA联盟50位顶级球员的指标表现 虽然 heatmap 只是 R 中一个很普通的图形函数,但这个例子使用了2008-2009赛季 NBA 50个顶级球员数据做了一个极佳的演 ...
- ResNet网络学习笔记。
ResNet网络学习 看b站 霹雳吧啦Wz 的视频总结的学习笔记! 视频的地址 大佬的Github代码 1.ResNet详解 ResNet 网络是在2015年由微软实验室提出,斩获当年 ImageNe ...
- 自组网训练生成模型并推理模型完整流程,代码展示LeNet -> AlexNet -> VGGNet -> InceptionNet -> ResNet优化过程
项目简介 本项目基于20种蝴蝶分类基础上做一个深入浅出的代码理解,及其对数据预处理,自定义数据读取器Reader(Dataset),及其输出final.pdparams,final.pdopt模型,利 ...
- 迁移学习:如何为您的机器学习问题选择正确的预训练模型
https://www.toutiao.com/a6687923187298075144/ 在这篇文章中,我们将简要介绍一下迁移学习是什么,以及如何使用它. 什么是迁移学习? 迁移学习是使用预训练模型 ...
最新文章
- java 模板引擎_SpringBoot入门系列(四)如何整合Thymeleaf模板引擎
- Eclipse里修改SVN的用户名和密码
- [COGS 0065][NOIP 2002] 字串变换
- LeetCode 111. Minimum Depth of Binary Tree
- 小白都能看懂的干货!大数据这朵“后浪”,能卷起多大的风浪?
- linux登陆提示鉴定故障_5个最常见的Linux问题的故障排除提示
- JavaScript面向对象编程理解
- 基于scikit-learn的SVM实战
- LGOJP3959 宝藏
- python高级编程教程_python高级编程——入门语法(一)
- vray安装显示服务器没有安装,vray3.2安装教程
- 音阶频率对照表_各个音阶的对应频率
- 2022年系统分析师考试大纲
- 银联网关支付,退款java实现
- java读取文件之BufferedReader
- Go语言之return语句的几种用法
- android 设置默认铃声,我的Android进阶之旅------gt;Android系统设置默认来电铃声、闹钟铃声、通知铃声,android进阶...
- NCBI推出blastp加速服务(Accelerated protein-protein BLAST)
- 前端项目实战95-数组遍历继续处理
- element组件树形控件el-tree点击展开节点,节点重影
热门文章
- boost::process::on_exit相关的测试程序
- boost::mp11::mp_product相关用法的测试程序
- boost::math::chi_squared用法的测试程序
- GDCM:gdcm::Object的测试程序
- boost::core模块实现bit ceil测试
- Boost:BOOST_ASSERT_MSG扩展的用法测试程序
- 基于Boost::beast模块的无栈协程http服务器
- ITK:从文件编写一个转换
- ITK:将RGB图像转换为灰度图像
- DCMTK:dicom标签的基础类