关于训练Mask_Rcnn遇到的主要问题及参数配置

Mask_Rcnn训练时的问题及解决

  • 训练Mask_Rcnn遇到的主要问题
  • 参数配置(讨论)

训练Mask_Rcnn遇到的主要问题

主要环境 tensorflow1.12.0
kares
2.2.4
bitahub服务器
一.数据集
在训练时报错TypeError: Argument ‘bb’ has incorrect type (expected numpy.ndarray, got list)
关于训练Mask_Rcnn遇到的主要问题及参数配置_第1张图片

网上有些人说是coco包版本太低的问题,或者数据点数应该为偶数等,我查看了自己pycocotools的版本已经为2.0.0,并不是版本问题。然后查看了json文件,发现我用的代码只能训练用多边形标记的,其他类型的标记都会报这个错误。之后重新标记了数据集,成功解决。
另:
ERR0:root:Frar pnrocessing inage {'anotations ': [ ‘box’: […]的问题有可能也是数据集的问题,也有可能是类别设置的不对,需进行修改。
二 Error12无法分配内存
训练时遇到了这个错误,应该是内存到极限了,但并未影响服务器的运行
看下内存的使用情况,可参考:Error12
三.RuntimeError: It looks like you are subclassing Model and you forgot to call super(YourClass, self).__init__().
用多个GPU训练遇到样的错误。
在parallel_model.py中的类ParallelModel加入代码:super(YourClass, self).init()

 def __init__(self, keras_model, gpu_count):
        """
            Class constructor.
        :param keras_model: The Keras model to parallelize
        :param gpu_count: gpu 个数,当 gpu 个数 大于 1 时,调用这个对象,启用多 GPU 训练
        """
        super(YourClass, self).__init__()#加入的代码
        self.inner_model = keras_model
        self.gpu_count = gpu_count
        merged_outputs = self.make_parallel()
        super(ParallelModel, self).__init__(inputs=self.inner_model.inputs,
                                            outputs=merged_outputs)

成功解决
在这里插入图片描述
四.卡在epoch1不动
把workers改成1,或者看看图片是否太大

        self.mask_model.keras_model.fit_generator(generator=train_generator,
                                                  initial_epoch=self.epoch,
                                                  epochs=epochs,
                                                  steps_per_epoch=cfg.TRAIN.STEPS_PER_EPOCH,
                                                  callbacks=callbacks,
                                                  validation_data=val_generator,
                                                  validation_steps=cfg.TRAIN.VALIDATION_STEPS,
                                                  max_queue_size=100,
                                                  workers=workers,
                                                  use_multiprocessing=True,
                                                  )

参数配置(讨论)

关于配置网上有许多教程,比如说类别啊,GPU个数啊等等,下面说几个开始令我迷惑的参数:
1.STEPS_PER_EPOCH,训练的“步长”,源代码设置的1000,测试的时候可以设置小一点。这个参数的意思好像是每个epoch训练的数目,每轮训练的数目应该是batch_size*STEPS_PER_EPOCH
(这个参数的具体含义不太明白,还得继续读论文啊)
2.VALIDATION_STEPS==50,源代码为50,这个参数太大会导致在每个epoch结束的时候非常慢,但不知改小后对训练效果的影响。
3.预训练可以选择resnet101或者resent50,后者网络小,训练速度快

问题:train epoch与epoch for convergence loss以及epoch for fine-tuning的关系

你可能感兴趣的:(tensorflow,深度学习,神经网络,机器学习)