图像分割之-MASK_RCNN

本文详细介绍了如何使用Labelme进行图像分割数据标注,转换json文件,修改MASK_RCNN配置并进行训练,以及解决训练过程中遇到的问题。
摘要由CSDN通过智能技术生成

图像分割之-MASK_RCNN

自己正在学习图像分割,下面分享下自己的经验,从标注数据开始。

修改的参数可以参考以下网址:https://blog.csdn.net/weixin_43758528/article/details/88621481

一、Labelme的安装

参考博客:https://blog.csdn.net/u012746060/article/details/81871733

**一、安装环境:**windows10,anaconda3,python3.5
二、安装过程:

1、管理员身份打开 anaconda prompt
2、输入命令:conda create --name=labelme python=3.5 (这个根据自己的版本来,我的事python 3.5)
3、输入命令:activate labelme ,会出现以下报错,不用管
在这里插入图片描述
4、输入命令:pip install pyqt5,pip install pyside2,在安装 pyside2 的时候超级慢
5、输入命令:pip install labelme
6、输入命令:labelme 即可打开labelme。如下:

或者直接使用图片标记工具的代码:
图片标记工具基于开源项目:https://github.com/wkentaro/labelme

二、标注自己的数据集

一、建立数据集
对于数据集编号问题,可以下载使用 Total Commander 软件,很好用在这里插入图片描述

使用labelme 标记自己的数据集,本文主要参考这位大神的操作方法
https://blog.csdn.net/qq_29462849/article/details/81037343

1)首先制作数据集
在这里插入图片描述
根据需求将数据集分为4个文件,这是people文件夹下(本人将标注好的.json跟原图片放在一起了,主要目的在于方便查看标注是否正确,方便,修改)
在这里插入图片描述
2)json 与此同时,将标注好的文件复制粘贴到 json 文件夹下。
在这里插入图片描述

三、使用labelme_json_to_dataset.exe

labelme保存的都是xxx.json文件,需要用labelme_json_to_dataset.exe转换一下,本人主要是使用以下程序进行批量转换的。

import os
path = './json/'  # path为json文件存放的路径
json_file = os.listdir(path)
os.system("activate labelme")
for file in json_file: 
    os.system("labelme_json_to_dataset.exe %s"%(path + '/' + file))

转换完成后,转换完的数据出现在json 文件夹下,如下所示:

在这里插入图片描述在这里插入图片描述
这样会生成一个同名文件夹,里面包含了我们需要的mask文件,label.png,不过这个文件是16bit点,而cv2中使用的都是8bit点,所以需要转换一下。说明:这样转换后,打开转换后的图片一片漆黑,如果想看效果可以把"img = Image.fromarray(np.uint8(np.array(img)))"改成“img = Image.fromarray(np.uint8(np.array(img)) * 20 )”,不过这样不符合mask rcnn的要求,看看效果即可,后面运行还是需要不乘倍数的!

from PIL import Image
import numpy as np
import os

src_dir = r'./labelme_json'
dest_dir = r'./cv2_mask'
for child_dir in os.listdir(src_dir):
    new_name = child_dir.split('_')[0] + '.png'
    old_mask = os.path.join(os.path.join(src_dir, child_dir), 'label.png')
    img = Image.open(old_mask)
    img = Image.fromarray(np.uint8(np.array(img)) * 20 )
    new_mask = os.path.join(dest_dir, new_name)
    img.save(new_mask)

最后,把得到的文件统一一下,便于后续程序执行,最后文件夹如下:
在这里插入图片描述

四、 修改mask rcnn

在mask rcnn的根目录下,新建两个文件夹“models”和“logs” ,models用于保存已经预训练好的coco模型,mask_rcnn_coco.h5;
logs用于保存训练产生的模型。在samples文件夹下新建一个“people”文件夹,创建people.py,代码中的 init_with = “last” 第一次训练时请改成 init_with = “coco”

五、训练程序

关于训练过程的参数设置,可在config.py文件中修改,但是本人直接在程序中修改的,没有修改config.py,这个根据自己的要求啦~官方也给出了修改建议:
https://github.com/matterport/Mask_RCNN/wiki

可修改的主要有:

BACKBONE = “resnet50” ;这个是迁移学习调用的模型,分为resnet101和resnet50,电脑性能不是特别好的话,建议选择resnet50,这样网络更小,训练的更快。

model.train(…, layers=‘heads’, …) # Train heads branches (least memory)
model.train(…, layers=‘3+’, …) # Train resnet stage 3 and up
model.train(…, layers=‘4+’, …) # Train resnet stage 4 and up
model.train(…, layers=‘all’, …) # Train all layers (most memory)#这里是选择训练的层数,根据自己的要求选择
1、
IMAGE_MIN_DIM = 800
IMAGE_MAX_DIM = 1024#设置训练时的图像大小,最终以IMAGE_MAX_DIM为准,如果电脑性能不是太好,建议调小,但是尺寸为32倍数
2、
GPU_COUNT = 1
IMAGES_PER_GPU = 2#这个是对GPU的设置,如果显存不够,建议把2调成1(虽然batch_size为1并不利于收敛)
3、
基础设置
dataset_root_path = r"F:\2019.11\code\Mask_RCNN-master\Mask_RCNN-master\train_data"
后面的路径需要设置为自己的路径,train_data下的文件一般为:

在这里插入图片描述

训练代码为:

import os
import sys
import numpy as np
import cv2
import matplotlib.pyplot as plt

import yaml
from PIL import Image

# Root directory of the project
ROOT_DIR = os.path.abspath("../../")
sys.path.append(ROOT_DIR)  # To find local version of the library

from mrcnn.config import Config
from mrcnn import utils
from mrcnn import model as modellib

# logs 用来保存训练好的模型
MODEL_DIR = os.path.join(ROOT_DIR, "logs")

iter_num = 0

# 读入预训练的权重
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
# Download COCO trained weights from Releases if needed
if not os.path.exists(COCO_MODEL_PATH):
    utils.download_trained_weights(COCO_MODEL_PATH)


class ShapesConfig(Config):
    """Configuration for training on the toy shapes dataset.
    Derives from the base Config class and overrides values specific
    to the toy shapes dataset.
    """
    # Give the configuration a recognizable name
    NAME = "shapes"
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值