Mask RCNN随笔

1、好多关于mask rcnn的博客说保存图片要求不要白边,直接设置matplotlib的参数,但是需要先plt.show之后才能设置并保存,其实可以直接不用matplotlib,直接用PIL库保存,这就需要改一下里面的源码。详情可以直接看visualize.py这个文件。还可以指定某一类用自己特定的颜色给其标记出来,也需要改visualize.py里面有一个apply_mask函数。这里面就不详细说的,不同的应用有不同的要求。如果想用matplotlib的方式直接去掉白边也可以,代码如下:

            fig = plt.gcf()
            fig.set_size_inches(width/96.0 , height/96.0)  # 输出width*height像素,这里决定了输出的dpi
            #plt.gca().xaxis.set_major_locator(plt.NullLocator())
            #plt.gca().yaxis.set_major_locator(plt.NullLocator())
            plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
            plt.margins(0, 0)
            plt.savefig(output_file_path,dpi = 96)  # path为你将保存图片的路径。

2、如果上一次训练中断,想接着上一次的权重继续训练,需要改写train中的代码。如下图:
在这里插入图片描述
改写其中的变量init_with=““last””,下次训练时会接着上一次的epoch继续训练。

3、mask rcnn中的训练的函数定义:
def train(self, train_dataset, val_dataset, learning_rate, epochs, layers,
augmentation=None,custom_callbacks=None,no_augmentation_sources=None):
各个参数的意义如下:
train_dataset, val_dataset训练数据集和验证数据集:
epochs:训练的总epoch
layers:选择要训练的层数。参数介绍如下:
Heads:网络的RPN,分类器和掩码头等层
All:所有的图层
3+:训练残差网络的3阶段及以上
4+:训练残差网络的4阶段及以上
5+:训练残差网络的5阶段及以上
Augmentation:可选的。 一个imgaug python库(https://github.com/aleju/imgaug)扩充。 例如,传递imgaug.augmenters.Fliplr(0.5)会在50%的时间左/右翻转图像。 您也可以传递复杂的增强。 这种增强适用于50%的时间,并且当它执行时,它会向右/左半时间翻转图像,并在0到5范围内添加带有随机西格玛的高斯模糊。
augmentation = imgaug.augmenters.Sometimes(0.5, [
imgaug.augmenters.Fliplr(0.5),
imgaug.augmenters.GaussianBlur(sigma=(0.0, 5.0))
])
custom_callbacks:可选的。 添加要使用keras fit_generator方法调用的自定义回调。 必须是keras.callbacks类型的列表。
no_augmentation_sources:可选的。 要为扩充排除的源列表。 source是标识数据集的字符串,在数据集类中定义。

4、如果你的机器显存配置并不高,如何修改参数以适应机器配置?
如果你的机器显存配置并不高,可能会出现内存不足的错误,因为框架默认的主干网络是采用的resnet101网络,可以调节成Resnet50以降低内存的消耗。
1)可以直接在配置类config.Py内设置网络类型:
BACKBONE = “resnet50”
2)训练更少的图层。 如果您从预先训练的COCO或Imagenet权重开始,那么早期层已经过训练以提取低级功能,您可以从中受益。 特别是如果你的图像也是COCO和Imagenet中的自然图像。
model.train(…, layers=‘heads’, …) # 只训练第一个网络层
model.train(…, layers=‘3+’, …) # Train resnet stage 3 and up
model.train(…, layers=‘4+’, …) # Train resnet stage 4 and up
model.train(…, layers=‘all’, …) # 训练所有层(most memory)

  1. 使用较小的图像。 默认设置将图像调整为大小为1024x1024的正方形。 如果您可以使用较小的图像,那么您将减少内存需求并减少训练和推理时间。 图像大小由Config中的这些参数设置控制:
    IMAGE_MIN_DIM = 800
    IMAGE_MAX_DIM = 1024
  2. 每一次处理图像数量减少(batch size)。 论文作者使用的默认值已经很小(每GPU 2张图像,使用8个GPU)。 但如果您别无选择,请考虑进一步减少它。 这也是在Config类中设置的。参数设置如下:
    GPU_COUNT = 1
    IMAGES_PER_GPU = 2
  3. 在第二阶段的训练中使用较少的ROI。 此设置类似于模型第二阶段的batch size。
    TRAIN_ROIS_PER_IMAGE = 200
  4. 如果图像没有大量对象,减少每个图像的最大实例数参数设置:
    MAX_GT_INSTANCES = 100
  5. 训练图像作物而不是完整图像。 该方法用于细胞核样本中从较大的图像中挑选512x512作物。实际就是减小图像尺寸
    #Random crops of size 512x512
    IMAGE_RESIZE_MODE = “crop”
    IMAGE_MIN_DIM = 512
    IMAGE_MAX_DIM = 512
    还有很多参数设置问题,具体的参照config.py文件中的代码注释。

4、案例train_shapes.ipynb代码。
在tensorflow的环境下打开jupyter notebook,把train_shapes.ipynb文件加载进去,如果你觉得jupyter notebook的这个ipy N B不NB(后来我发现确实不太方便,也可能是我用的不习惯),那么可以换成pycharm,需要把jupyter的文件转换成py文件,转换方法是在jupyter nootbook中点击file—save as—python文件就可以了。如果你用pycharm的话需要配置它的虚拟环境,打开pycharm----file-----seting—project interpreter 选择你安装的tensorflow内的python.exe,点击应用就哦了。
在这里插入图片描述
5、epochs参数,你会发现在进行训练数据是有一个这样的参数,如下图:
这个参数原始程序是1,但是这个参数对训练的模型有很大关系,你可以百度一下“神经网络参数epochs”,他代表了数据集通过了神经网络一次并且返回了一次的这个过程,
这里就会涉及到梯度下降的问题,简单理解如果epochs太小模型就会欠拟合,如果太大就会过拟合,如图所示,当然无论是欠拟合还是过拟合对于结果的估计都是不好的,所以合适的epochs很重要,但是如何选择一个合适的epochs参数要看你数据集的复杂程度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上是我在学习过程中记录下来的,有点乱,大家可以根据自己遇到的问题进行筛选的参考,有问题可以随时交流,我的QQ:3239516597,交流群:745416451。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能量鸣新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值