R-FCN+ResNet-50用自己的数据集训练模型(python版本)

2023-10-26

说明:

本文假设你已经做好数据集,格式和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)安装cythonpython-opencveasydict

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

注意,该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
如果没有出错,则:

5.测试Demo

经过上面的工作,我们可以测试一下是否可以正常运行。
我们需要下载作者训练好的模型,地址:链接:http://pan.baidu.com/s/1kVGy8DL 密码:pwwg
然后将模型放在$RFCN_ROOT/data。看起来是这样的:
$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.用我们的数据集训练

(1)拷贝数据集
假设我们已经做好数据集了,格式是和VOC2007一致,将你的数据集
拷贝到$RFCN_ROOT/data下。看起来是这样的:
$VOCdevkit0712/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC0712                    # image sets, annotations, etc.
# ... and several other directories ...
如果你的文件夹名字不是VOCdevkit0712和VOC0712,修改成0712就行了。
(作者是用VOC2007和VOC2012训练的,所以文件夹名字带0712。也可以修改代码,但是那样比较麻烦一些,修改文件夹比较简单)
(2)下载预训练模型
本文以ResNet-50为例,因此下载ResNet-50-model.caffemodel。下载地址:链接:http://pan.baidu.com/s/1slRHD0L 密码:r3ki
然后将caffemodel放在$RFCN_ROOT/data/imagenet_models  (data下没有该文件夹就新建一个)

(3)修改模型网络

打开$RFCN_ROOT/models/pascal_voc/ResNet-50/rfcn_end2end  (以end2end为例)
注意:下面的cls_num指的是你数据集的类别数+1(背景)。比如我有15类,+1类背景,cls_num=16.
<1>修改class-aware/train_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 {
  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
    }
}


<2>修改class-aware/test.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: "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
        }
    }
}

<3>修改train_agnostic.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
    }
}

<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)修改代码

<1>$RFCN/lib/datasets/pascal_voc.py
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'
                      )
改成你的数据集标签。
<2>$RFCN_ROOT/lib/datasets/imdb.py
主要是assert (boxes[:, 2] >= boxes[:, 0]).all()可能出现AssertionError,具体解决办法参考:
PS:
上面将有无ohem的prototxt都改了,但是这里训练用的是ohem。
另外,默认的迭代次数很大,可以修改$RFCN\experiments\scripts\rfcn_end2end_ohem.sh:
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
正常的话,就开始迭代了:


$ RFCN_ROOT/experiments/scripts里还有一些其他的训练方法,也可以测试一下(经过上面的修改,无ohem的end2end训练也改好了,其他训练方法修改的过程差不多)。

(6)结果

将训练得到的模型($RFCN_ROOT/output/rfcn_end2end_ohem/voc_0712_trainval里最后的caffemodel)拷贝到$RFCN_ROOT/data/rfcn_models下,然后打开$RFCN_ROOT/tools/demo_rfcn.py,将CLASSES修改成你的标签,NETS修改成你的model,im_names修改成你的测试图片(放在data/demo下),最后:
cd $RFCN_ROOT
./tools/demo_rfcn.py --net ResNet-50
我将显示的标签改为了中文,修改方法参考: http://blog.csdn.net/sinat_30071459/article/details/51694037

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R-FCN+ResNet-50用自己的数据集训练模型(python版本) 的相关文章

  • 缺少 python 配置

    我正在安装一个程序 需要安装 python config 唯一的问题是我目前没有 python config 而且我似乎不知道如何获取它 经过搜索后 我应该可以通过以下方式安装它 yum install python devel 然而 这样
  • 是否可以将名为“None”的值添加到枚举类型?

    我可以将名为 None 的值添加到枚举中吗 例如 from enum import Enum class Color Enum None 0 represent no color at all red 1 green 2 blue 3 co
  • 以类似字典的方式将新项目添加到某些结构化数组中

    我想扩展 numpy 中的结构化数组对象 以便我可以轻松添加新元素 例如 对于一个简单的结构化数组 gt gt gt import numpy as np gt gt gt x np ndarray 2 dtype names A B fo
  • 如何在cvxpy中编写多个约束?

    我想在 cvxpy 下的优化问题中添加许多约束 在 matlab 中 我可以通过添加一行 subject to 然后使用 for 循环来生成约束 我怎样才能在 cvxpy 中做同样的工作 因为 cvxpy 中没有 服从 概念 有什么建议吗
  • 日期/时间值的 Django URL 转换器

    我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象 如果我手动输入 URL 它们会按预期工作 但尝试为其生成 URL 时找不到匹配项 我的转换器很简单 from django utils
  • Django/gevent socket.IO 与 redis pubsub。我把东西放在哪里?

    我有一个独立的 python 脚本 它只是从 Twitter 的流 API 捕获数据 然后在收到每条消息时 使用 redis pubsub 将其发布到频道 tweets 这是该脚本 def main username username pa
  • 可视化时间序列时标记特定日期

    我有一个包含几年数据的时间序列 例如 ts pd Series np random randn 1000 index pd date range 1 1 2000 periods 1000 ts ts cumsum ts plot 我还有两
  • 通过 Python 在 PostgreSQL 中的 unicode 字符串中是否允许空字节?

    unicode 字符串中是否允许空字节 我不问 utf8 我的意思是 unicode 字符串的高级对象表示 背景 我们通过 Python 在 PostgreSQL 中存储包含空字节的 unicode 字符串 如果我们再次读取字符串 字符串会
  • 将图像转换为二进制流

    我的应用程序有两个方面 一方面我使用 C 来使用 Pleora 的 EBUS SDK 从相机读取帧 当第一次接收到该流时 在将缓冲区转换为图像之前 我能够一次读取 16 位流 以便对每个像素执行一些计算 即每个像素都存在一个 16 位数据块
  • 导入错误:无法导入名称 urandom

    我正在构建一个新的 Linux 环境 并在 Python 上看到以下错误 python c import random Traceback most recent call last File
  • 从文件中读取单词并放入列表中

    本质上 我有一个巨大的文件 所有文件包含每行多个单词 每个单词用空格分隔 有点像这样 WORD WORD WORD WORD ANOTHER WORD SCRABBLE BLAH YES NO 我想要做的是将文件中的所有单词放入一个巨大的列
  • 在Python中随机化列表[重复]

    这个问题在这里已经有答案了 我想知道是否有一个好方法来 震动 Python 中的项目列表 例如 1 2 3 4 5 可能会被动摇 随机化 3 1 4 2 5 任何顺序都同样可能 from random import shuffle list
  • 遍历 globals() 字典

    我 尝试 使用globals 在我的程序中迭代所有全局变量 我就是这样做的 for k v in globals iteritems function k v 当然 这样做时 我只是创建了另外 2 个全局变量 k and v 所以我得到这个
  • 为 Keras 编写自定义数据生成器

    我将每个数据点存储在 npy 文件中 其中shape 1024 7 8 我想通过类似的方式将它们加载到 Keras 模型中ImageDataGenerator 所以我编写并尝试了不同的自定义生成器 但它们都不起作用 这是我改编的一个this
  • __subclasses__ 没有显示任何内容

    我正在实现一个从适当的子类返回对象的函数 如果我搬家SubClass from base py 没有出现子类 subclasses 它们必须在同一个文件中吗 也许我从来没有直接导入subclass py对Python隐藏子类 我能做些什么
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • 按多索引的一级对 pandas DataFrame 进行排序

    我有一个多索引 pandas DataFrame 需要按索引器之一进行排序 这是数据片段 gene VIM treatment dose time TGFb 0 1 2 0 158406 1 2 0 039158 10 2 0 052608
  • 如何点击 Google Trends 中的“加载更多”按钮并通过 Selenium 和 Python 打印所有标题

    这次我想单击一个按钮来加载更多实时搜索 这是网站的链接 该按钮位于页面末尾 代码如下 div class feed load more button Load more div 由于涉及到一些 AngularJS 我不知道该怎么做 有什么提
  • Windows 10 上的 Tensorflow 安装问题

    我正在尝试在 Win 10 计算机上安装 Tensorflow 我成功安装了Python 3 7 然后尝试按照tensorflow org上的安装说明进行操作 执行时 pip install tensorflow 我收到以下错误消息 错误
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下

随机推荐

  • Windows磁盘管理中的压缩卷操作

    基本磁盘 主分区在压缩卷操作后为黑色的未分配 逻辑分区在压缩卷操作后为绿色的可用空间 动态磁盘 简单卷在压缩卷操作后为黑色的未分配
  • Figma怎么汉化?这个Figma 汉化插件早知道就好了!

    Figma官方目前没有中文版 可能与早期的封禁大疆事件和面向非洲地区扩张策略有关 但是可以使用第三方汉化插件来获得中文版本的Figma Figma cool是一个提供汉化插件的网站 支持多个平台 另外 还有一款名为即时设计的中文设计工具 提
  • java.lang.IllegalArgumentException 异常报错完美解决

    目录 修改JDK使用版本 修改开发工具idea配置 eclipse的直接跳过这个看下面 修改开发工具eclipse配置 学习spring依赖注入的时候碰到这个坑 折腾了许久 记录一下以防其他小伙伴入坑 该异常主要原因是因为JDK与Sprin
  • Lisp-Stat 翻译 —— 第四章 其它Lisp特性

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 第四章 其它Lisp特性 上一章介绍了Lisp编程的基础 在那章里重点展示了对编写Lisp函数有用的编程技术 为了最高效地使用这些技术 知道Lisp和Lisp Stat提供
  • 智能指针之shared_ptr初始化,引用计数,常用操作和自定义删除器等等03

    一 share ptr 1 share ptr基础 1 共享所有权 不是被一个shared ptr拥有 而是被多个shared ptr之间相互协作 shared有额外开销 2 工作原理 利用引用计数的方法管理一片内存 每增加一个shared
  • C++ 一些知识点

    https www nowcoder com profile 7838045 myFollowings detail 3445247 链接 https www nowcoder com questionTerminal 087006d1e4
  • Red Hat Linux 7.5的安装及修改密码【详细】

    一 如何安装Red Hat Linux 7 5 详细 1 打开安装好的VMware 点击主页上的 创建新的虚拟机 选择 自定义 后 点击 下一步 2 选择虚拟机硬盘兼容性 我们选择Wordstation 14 x 3 选择稍后安装操作系统
  • -bash: ./mysqld: 没有那个文件或目录解决方法

    MySQL问题 bash mysqld 没有那个文件或目录 mysql安装路径 usr local mysql bin vi etc profile 添加环境变量 export PATH PATH usr local mysql bin 重
  • 营销活动:提升小程序的用户活跃度的关键

    在现今竞争激烈的商业环境中 小程序已成为企业私域营销的重要工具之一 然而 拥有一个小程序并不足以保证用户的活跃度 营销活动作为推动用户参与的有效方式 对于提升小程序的用户活跃度起着至关重要的作用 本文将深入探讨营销活动在提升小程序用户活跃度
  • Swagger的用法

    Swagger的用法 1 yml配置文件中引入依赖
  • C++ 内存管理

    C 内存管理 关于析构函数 1 when the desconstructor will be called 具体地说如果出现以下几种情况 程序就会执行析构函数 如果在一个函数中定义了一个对象 它是自动局部对象 当这个函数被调用结束时 对象
  • 静态代码块

    在Java类中 使用static关键字修饰的代码块称为静态代码块 当类被加载的时候 静态代码块就会被执行 由于类只会加载一次 所以静态代码块只会执行一次 在程序当中 使用静态代码块对类的成员变量进行初始化 package qmfx2 pub
  • FastAPI 使用 WebSocket创建实时应用程序

    超文本传输协议 或 HTTP 是当今互联网上最常用的协议之一 它允许客户端获取资源 例如 HTML 页面和图像 客户端 通常是浏览器 向服务器请求资源 图像 CSS 文件等 服务器响应请求的数据 它是一个严格的单向协议 服务器只会在客户端请
  • conda install 和 pip install 在ubuntu上的区别

    conda install 和 pip install 在ubuntu上的区别 pip和conda 看了很多博主的解释 已经说的很清楚了 pip pip installs packages 和conda都是包管理系统 pip最常用于安装在p
  • Merkle树

    白皮书引入 Merkel树是一种数据结构 图1 1 比特币白皮书插图 生成一个Merkel树 图1 2 来自维基百科插图 分析 自下而上 我们有四个文件 比特币系统的话就是交易 这个数据结构可以用在各种方面 L1 L2 L3 L4 四个文件
  • QT学习-数据类型转换

    文章目录 前言 一 num转QString 二 数据输出格式 三 QString拆分到QStringList 1 去除空格拆分 2 按固定长度拆分 四 QStringList转QByteArray HEX 五 uint8 t与QByteAr
  • java关键字const_java 关键字详解

    一 关键字总览 访问控制 private protected public 类 方法和变量修饰符 abstract class extends final implements interface native new static str
  • 用JAVA语言写一个计算员工月工资的程序

    一 任务需求 某公司分为多个部门 每个部门有一个经理和多个员工 每个员工根据职称发基本工资 员工的工资由基本工资 日加班工资 日缺勤工资等组成 具体需求如下所示 员工的基本信息 包括部门 职务 职称以及工资记录等信息 能记录员工的每一个职称
  • 过压保护芯片,IC电路方案集合

    随着快充适配器 QC3 0充电器 PD充电器的诞生 改变了原先USB的5V充电 增加了9V 12V的充电电压 甚至PD充电器20V也是很常见了 9V 12V 20V高电压的应用产生 虽然说9V 12V 20V的高压输出 不会被误触发 但是消
  • R-FCN+ResNet-50用自己的数据集训练模型(python版本)

    说明 本文假设你已经做好数据集 格式和VOC2007一致 并且Linux系统已经配置好caffe所需环境 博客里教程很多 下面是训练的一些修改 py R FCN源码下载地址 https github com Orpine py R FCN