主流的Mask RCNN主要有两个,一个是matterport的keras版本,另一个是facebookresearch的pytorch版本。
pytorch版本的编译报错问题较多,以下采用tensorflow-gpu版本。
检查gpu算力,低算力下高版本tf可能只调用cpu
验证gpu
import tensorflow as tf
tf.test.is_built_with_cuda()#验证tf是否调用GPU
tf.config.list_physical_devices('GPU')#查看gpu列表
下载requirements,tensorflow,cuda,mask_rcnn_coco.h5权重
python setup.py install
划分数据集
data
——cv2_mask(掩膜)
——jason(jason)
——labelme_json(json文件夹)
——pic(原图)
其中labelme新版本在json文件夹生成info.yaml的方法
~\envs\xx\Lib\site-packages\labelme\cli\json_to_dataset.py
f.write(lbl_name + '\n')
# 添加部分
logger.warning('info.yaml is being replaced by label_names.txt')
info = dict(label_names=label_names)
with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
yaml.safe_dump(info, f, default_flow_style=False)
logger.info('Saved to: {}'.format(out_dir))
训练代码参考:修改train_shapes.ipynb
其中
ROOT_DIR = os.path.abspath("../../")#根目录地址
#显存设置
GPU_COUNT = 2
IMAGES_PER_GPU = 1
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")#权重文件地址
NUM_CLASSES = 1 + 80 # 背景加类别
#图片像素大小(用自己数据中最低的分辨率)
IMAGE_MIN_DIM = 768
IMAGE_MAX_DIM = 1024
#训练次数
model.train(dataset_train, dataset_val,
learning_rate=config.LEARNING_RATE,
epochs=300,
layers='heads')
self.add_class("shapes", 1, "box")#逐个添加每个类别
#逐个添加每个类别
if labels[i].find("box")!=-1:
labels_form.append("box")
dataset_root_path=os.path.join(ROOT_DIR, "C:\\Users\\LARA\\Desktop\\Mask_RCNN-master\\train_data_test1")#数据集目录
#图片尺寸
width = 1024
height = 768
dataset_train.load_shapes(count, 768, 1024, img_floder, mask_floder, imglist,dataset_root_path)
dataset_val.load_shapes(count, 768, 1024, img_floder, mask_floder, imglist,dataset_root_path)
改写train.py中的init_with=““last””,下次训练时会接着上一次的epoch继续训练。
运行问题
1>No module named ‘xxx‘
下载对应安装包
2>load() missing 1 required positional argument: ‘Loader‘
降低yaml版本到5.4.1
3>‘str‘ object has no attribute ‘decode‘
报错位置修改decode('utf-8')为encode('utf-8').decode('utf-8')
降级h5py到3以下版本