采用的是原版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