R-FCN/Faster-rcnn使用snapshot继续训练

R-FCN/Faster-rcnn使用snapshot继续训练

r-fcn 和 faster-rcnn本身不能直接使用solverstate继续训练。
需要修改lib/fast_rcnn /train.py 和 tools/train_net.py
具体:
lib/fast_rcnn/train.py
修改init函数:

def __init__(self, solver_prototxt, roidb, output_dir,
                 pretrained_model=None,
                 ##########add#########
                 previous_state=None
                 ):
        """Initialize the SolverWrapper."""
        self.output_dir = output_dir

        if (cfg.TRAIN.HAS_RPN and cfg.TRAIN.BBOX_REG and
            cfg.TRAIN.BBOX_NORMALIZE_TARGETS):
            # RPN can only use precomputed normalization because there are no
            # fixed statistics to compute a priori
            assert cfg.TRAIN.BBOX_NORMALIZE_TARGETS_PRECOMPUTED

        if cfg.TRAIN.BBOX_REG:
            print 'Computing bounding-box regression targets...'
            self.bbox_means, self.bbox_stds = \
                    rdl_roidb.add_bbox_regression_targets(roidb)
            print 'done'

        self.solver = caffe.SGDSolver(solver_prototxt)
        if pretrained_model is not None:
            print ('Loading pretrained model '
                   'weights from {:s}').format(pretrained_model)
            self.solver.net.copy_from(pretrained_model)
            ##########add#########
        elif previous_state is not None:
            print ('Restoring State from {:s}').format(previous_state)
            self.solver.restore(previous_state)
  • 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

修改train_net函数:

def train_net(solver_prototxt, roidb, output_dir,
              pretrained_model=None, max_iters=40000,
              ##########add#########
              previous_state=None
              ):
    """Train a Fast R-CNN network."""

    roidb = filter_roidb(roidb)
    sw = SolverWrapper(solver_prototxt, roidb, output_dir,
                    ##########add#########
                    previous_state=previous_state
                              )

    print 'Solving...'
    model_paths = sw.train_model(max_iters)
    print 'done solving'
    return model_paths
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

tools/train_net.py:
修改prase_argsh函数,添加如下:

parser.add_argument('--snapshot', dest='previous_state',
                            help='initialize with previous state',
                            default=None, type=str) 
  • 1
  • 2
  • 3

修改main函数:

train_net(args.solver, roidb, output_dir,
              pretrained_model=args.pretrained_model,
              max_iters=args.max_iters,
              ##########add#########
              previous_state=args.previous_state
              )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样就可以直接使用snapshot了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了训练R-FCN模型使用自己的数据集,你可以按照以下步骤进行操作: 1. 首先,将你的数据集准备好,包括图像和相应的标注。确保你的标注与R-FCN的要求相匹配,通常是使用PASCAL VOC格式或COCO格式的标注。 2. 接下来,你需要克隆py-R-FCN工程,你可以通过运行以下命令来成此操作: ``` git clone https://github.com/Orpine/py-R-FCN.git ``` 3. 在克隆的py-R-FCN目录中,你需要进行一些配置。首先,你需要安装所需的依赖项,可以通过运行以下命令来成: ``` pip install -r requirements.txt ``` 4. 然后,你需要将训练和验证图像及其相应的标注放置在正确的目录下。按照py-R-FCN的要求,将训练图像和标注放置在`data/VOCdevkit2007/VOC2007`目录下,将验证图像和标注放置在`data/VOCdevkit2007/VOC2007`目录下。 5. 接下来,你需要在`experiments/cfgs`目录中创建一个配置文件。你可以根据你的需求修改现有的配置文件,或者创建一个新的配置文件。确保配置文件中包含正确的目录路径和类别数等信息。 6. 现在,你可以开始训练R-FCN模型了。通过在终端中运行以下命令来进行训练: ``` python train.py --cfg experiments/cfgs/your_config_file.yaml ``` 请将`your_config_file.yaml`替换为你创建的配置文件的名称。 7. 训练过程中可能会遇到一些问题,例如`loss_bbox=0`的情况。你可以参考中提供的解决方法,主要是关于numpy的问题。此外,中也提到了一些常见问题和解决方法,建议你先将迭代次数设置为100或更小来调试。 希望这些步骤对你有帮助。祝你成功训练R-FCN模型!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值