Mask RCNN标注+训练自己的数据

采用的是原版matterport的Mask RCNN
环境为tf1.x,版本比较老,很多warning,安装也挺多坑的。可参考别人的安装。
一、使用labelme标注数据集。
labelme安装:

sudo apt-get install python3-pyqt5
sudo pip3 install labelme

注意在标注前将所有数据集resize到统一尺寸,最好也能统一命名,如1.jpg等。
贴一个别人写的统一尺寸的简易代码:

import os
import os.path
from PIL import Image
def ResizeImage(f_path, out_dir, width, height, type):
    i = 0
    for root, dirs, files in os.walk(f_path):
        # 使用os.walk()方法遍历输出一个文件夹下的所有文件名
        # os.path.join()方法拼接文件名返回所有文件的路径
        for name in files:
            file = os.path.join(root, name)
            img = Image.open(file)
            out = img.resize((width, height), Image.ANTIALIAS)

            i += 1
            f_name = str(i) + '.jpeg'
            out_name = os.path.join(out_dir, f_name)
            out.save(out_name, type)

f_path = r'*********************'                                 # 图片所在路径
out_dir = r'****************************/out_dir'         #  图片输出路径
width = 384                       #  定义输出图片的宽和高
height = 512
type = 'jpeg'                     #  定义输出图片类型

ResizeImage(f_path, out_dir, width, height, type)

(注意:在标注的时候,如果一张图片里有两个及以上同类别不同物的目标,分别标注,并命名为cat1,cat2等。不要将他们命名为cat,之前我这样命名,导致最后检测出的框将两个物体全部框住,被网络认作是一个物体)
每标注完一张图片,会生成一个json文件。

二、制作数据集
最终数据集格式:(参考
在这里插入图片描述

1、使用json2dataset.py将json文件转成文件夹

#-*-coding:utf-8-*-
import os
files=os.listdir('./')
files.remove('json2dataset.py')
for i in range(len(files)):
    os.system('labelme_json_to_dataset '+files[i])

2、将每个文件夹里面的label.png重名为原图的名字

# 把label.png改名为1.png
import os
for root, dirs, names in os.walk(r'******out_dir'):   # 改成你自己的json文件夹所在的目录
    for dr in dirs:
        file_dir = os.path.join(root, dr)
        # print(dr)
        file = os.path.join(file_dir, 'label.png')
        # print(file)
        new_name = dr.split('_')[0] + '.png'
        new_file_name = os.path.join(file_dir, new_name)
        os.rename(file, new_file_name)

3、cv2_mask文件夹批量复制

import os
from shutil import copyfile
for root, dirs, names in os.walk(r'******'):   # 改成你自己的json文件夹所在的目录
    for dr in dirs:
        file_dir = os.path.join(root, dr)
        print(dr)
        file = os.path.join(file_dir,'label.png')
        print(file)
        new_name = dr.split('_')[0] + '.png'
        new_file_name = os.path.join(file_dir, new_name)
        print(new_file_name)
        
        tar_root = r'******my_data/cv2_mask'      # 目标路径
        tar_file = os.path.join(tar_root, new_name)
        copyfile(new_file_name, tar_file)

最后制作完的my_data数据集放进Mask RCNN里samples文件夹内。

三、训练自己的数据
train.py

# -*- coding: utf-8 -*-
 
import os
import sys
import random
import math
import re
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值