实例分割之maskrcnn快速实现

参考链接:https://towardsdatascience.com/custom-instance-segmentation-training-with-7-lines-of-code-ff340851e99b
临时要快速测试下实例分割在自己数据下的效果,以前的又太复杂,偶然遇到一个高度封装的比较好的maskrcnn模块的python包(pixellib),这是我见过的安装实现过程最简单的maskrcnn了,方便快捷,对于想快速测试看效果的朋友应该会事半功倍
环境:CUDA10.1 CUDNN 7.6.1 Tensorflow-gpu 2.1.0 (>=2.0) Keras 2.3.1 (与tensorflow版本匹配) pixellib 0.6.0(目前的版本)
注:tensorflow版本必须大于2.0,keras是和tensorflow对应的,对应关系可以轻松搜到

数据集目录结构如下
结构
注:上面的json文件是运行以后自动生成的,不用管

内部就是每个图像和对应的json文件,样本文件是在labelme里面标注的,具体labelme怎么标注可以去搜下,参考链接:https://olafenwaayoola.medium.com/image-annotation-with-labelme-81687ac2d077
翻不了墙的我把内容复制过来了,看最后。
内部
文件目录
文件目录

训练

import pixellib
from pixellib.custom_train import instance_custom_training
import tensorflow as tf
import warnings
warnings.filterwarnings("ignore")  #忽略警告

gpus = tf.config.experimental.list_physical_devices('GPU') #这段代码可以先不要,如果遇到这个错误再加:Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
if gpus:
  try:
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
  except RuntimeError as e:
    print(e)

train_maskrcnn = instance_custom_training()
train_maskrcnn.modelConfig(network_backbone = "resnet50", num_classes= 2, batch_size = 4) #network_backbone = "resnet101" 提供了两个backbone
train_maskrcnn.load_pretrained_model("mask_rcnn_coco.h5") #mask_rcnn_coco.h5需要下载
train_maskrcnn.load_dataset("jy2")  #jy2数据集根目录
train_maskrcnn.train_model(num_epochs = 300, augmentation=True,  path_trained_models = "mask_rcnn_models")

预测:

import os
import pixellib
from pixellib.instance import custom_segmentation

# segment_image = custom_segmentation()
# segment_image.inferConfig(num_classes= 2, class_names= ["BG", "cl", "cz"])
# segment_image.load_model("mask_rcnn_models/mask_rcnn_model.124-0.027224.h5")
# segment_image.segmentImage("./image/00000002.tif", show_bboxes=True, output_image_name="sample_out.jpg")

image_path = './image/'
pre_path = './predict/'
imgs = os.listdir(image_path)
segment_image = custom_segmentation()
segment_image.inferConfig(num_classes= 2, class_names= ["BG", "cl", "cz"], network_backbone = "resnet50",detection_threshold = 0.5, image_max_dim = 512, image_min_dim = 512)
segment_image.load_model("mask_rcnn_models/mask_rcnn_model.124-0.027224.h5")
for im in imgs:
	name = im.split('.')[0]
	im_path = os.path.join(image_path, im)
	save_path = os.path.join(pre_path, name + '.png')
	segment_image.segmentImage(im_path, show_bboxes=True, output_image_name=save_path)

精度评价

import pixellib
from pixellib.custom_train import instance_custom_training


train_maskrcnn = instance_custom_training()
train_maskrcnn.modelConfig(network_backbone = "resnet50", num_classes= 2)
train_maskrcnn.load_dataset("jy2")
train_maskrcnn.evaluate_model("mask_rcnn_models/mask_rcnn_model.124-0.027224.h5")

输出

虽然是高度封装,但是源码还是需要拿出来看看,方便调参,主要代码就在下面的位置
位置
参数说明在config.py里面,而且比较详细,需要配合custom_train.py一起看

labelme标注流程:
文档:Image Annotation With Labelme.note
链接:http://note.youdao.com/noteshare?id=6b87a0f7bb7878da2b6e6a3ce6b2f8ca&sub=C2BC8342541040AAAB7C217A148D26D6

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是用Python和Keras实现的Mask RCNN图像分割代码示例: ```python import mrcnn.model as modellib from mrcnn import visualize from mrcnn.config import Config from skimage import io class MyConfig(Config): NAME = "my_config" IMAGES_PER_GPU = 1 NUM_CLASSES = 1 + 1 STEPS_PER_EPOCH = 100 DETECTION_MIN_CONFIDENCE = 0.9 class MyDataset(utils.Dataset): def load_dataset(self, dataset_dir): self.add_class("dataset", 1, "object") self.add_class("dataset", 2, "background") self.add_image("dataset", image_id=1, path=dataset_dir+"/image.jpg", class_id=1) self.add_image("dataset", image_id=2, path=dataset_dir+"/bg.jpg", class_id=2) def load_mask(self, image_id): info = self.image_info[image_id] mask = [io.imread("path/to/mask")] class_ids = [1] return mask, class_ids config = MyConfig() model = modellib.MaskRCNN(mode="inference", config=config, model_dir='./') model.load_weights("path/to/weights.h5", by_name=True) image = io.imread("path/to/image") results = model.detect([image], verbose=0) r = results[0] visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], ['BG', 'object'], r['scores']) ``` 这里假设您已经有了一个包含图像和相应标记的数据集。通过创建自己的配置类和数据集类,您可以将Mask RCNN应用于自己的数据集,并使用训练好的权重来进行图像分割。在上面的代码中,我们加载了一个图像,并将其传递给模型进行预测。最后,我们使用可视化工具显示了分割结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

如雾如电

随缘

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

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

打赏作者

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

抵扣说明:

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

余额充值