一、常规的mmlab系列框架更改
- 新建mmseg/dataset/my_dataset.py,修改如下:
class MyDataset(BaseSegDataset):
METAINFO = dict(
classes=('background','xxx'),
palette=[[120, 120, 120], [6, 230, 230]])
def __init__(self,
img_suffix='.JPG',
seg_map_suffix='.png',
- mmseg/dataset/init.py, 增加自己的类
- configs/danet/danet_r50-d8.py, 修改自己的分类数,我为二分类,把num_classes为2.
decode_head=dict(num_classes=2),
auxiliary_head=dict(num_classes=2))
- 新建configs/base/datasets/my_dataset.py,主要改自己数据集的路径。
二、数据的清洗及源码的更改
5. 由于是二分类,mask对应的是实例分割,所以我需要把背景像素为0,目标像素为255. 代码如下,把数据清理一下:
import numpy as np
import PIL.Image as Image
src= Image.open("./masks/xx.png")
mat = np.array(src)
mat = mat.astype(np.uint8)
dst = Image.fromarray(mat, 'P')
bin_colormap = [0,0,0] + [255,255,255]*254 # 二值调色板
dst.putpalette(bin_colormap)
dst.save('xx.png')
src.close()
- 改源码。mmseg框架下默认背景像素为0,目标像素为1,所以改源码。mmseg/datasets/tranforms/loading.py , 这样,目标id为255
gt_semantic_seg[gt_semantic_seg_copy == old_id*255] = new_id
三、训练的效果图
- 训练成功图,由于训练时间短,准确率暂时还不高,22%,后续改。
- 预测,用的demo/image_demo_with_inferencer.py