一、代码链接
本次训练采用的是pytorch版本的BiseNet,代码链接为GitHub - CoinCheung/BiSeNet: Add bisenetv2. My implementation of BiSeNet
二、数据格式
数据集分为原图和对应的MASK,尤其要主要的有两点:1、所有图片要resize到统一大小
2、MASK图为8位的单通道图片,图片中的值从0开始,0代表背景,第一类前景为1,第二类前景为2,依次类推递增。labelme的json转换出来的mask图为16位彩色图,要想办法转成8位。
三、参数配置
我使用的是bisenetv2,配置文件是configs里面的bisenetv2_city.py,
## bisenetv2
cfg = dict(
model_type='bisenetv2',
n_cats=5, # 加上背景一共的类别数目
num_aux_heads=4,
lr_start=5e-3,
weight_decay=5e-4,
warmup_iters=1000,
max_iter=150000, #最大迭代次数
dataset='CityScapes',
im_root='/mnt/sda/qilibin/project/BisenetFinal/BiSeNet/datasets/',
train_im_anns='./datasets/yg/train.txt', ## 训练集路径
val_im_anns='./datasets/yg/val.txt', ## 验证集路径
scales=[0.25, 2.],
cropsize=[512, 512],
eval_crop=[512, 512],
eval_scales=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
ims_per_gpu=8, ## batchsize
eval_ims_per_gpu=2,
use_fp16=True,
use_sync_bn=True,
respth='./res',
)
lib/data/cityscapes_cv2.py 里面也要修改对应参数
class CityScapes(BaseDataset):
'''
'''
def __init__(self, dataroot, annpath, trans_func=None, mode='train'):
super(CityScapes, self).__init__(
dataroot, annpath, trans_func, mode)
self.n_cats = 4 ### 加上背景一共的类别数量
self.lb_ignore = 255
self.lb_map = np.arange(256).astype(np.uint8)
# for el in labels_info:
# self.lb_map[el['id']] = el['trainId']
### 数据集RGB的均值和标准差 可以根据tools里面的checkdatainfo得到
self.to_tensor = T.ToTensor(
mean=(0.4386782673860911, 0.4386782673860911, 0.4386782673860911), # city, rgb
std=(0.20391534352799226, 0.20391534352799226, 0.