用deeplab 训练Pascal VOC2012数据集时需注意的一些问题
1 segmentation_dataset.py中类别数目的设置
num_class=自己的标签数目+2
比如我训练的时候只需要person这一类标签,那么我的num_class就是3,这三类分别为:person,background以及ignore_label
2 单通道mask中标签像素值设置
生成的mask必须为单通道(灰度图),建议为png格式。
注意,在制作mask时,对所有object的灰度像素值有要求。
对于所有object包括background在内,在mask中要将灰度值标注为0~n,虽然产生的图片很难看出区别,但是这对训练是有效的。注意,不要把object的灰度值标注成10,20,100…(这样代码会直接将灰度值和class匹配,这在调整权重等操作会有麻烦~)
总的来说就是:“background”类中的像素值应为0,第一个类的像素值应为1,因为第二个类的像素值应为2,依此类推…不要将类保存为其他值,如100或 224,必须要按照从1到N的顺序保存标签
3 权重不平衡问题
如果你的问题是二分类或者和我的数据集类似,存在object之间imablance,这需要在train_utils.py中修改权重.
这里重点说我个人数据集,因为是3分类问题,ignore_label权重设为0,其中background占了非常大的比例,person类所占比例较小,故background和person权重分别设为1和10,假如是4分类问题,并且object2比object1要稍微少一点,那么最终的设置的权重比例为ignore_label权重设为0,background,object1,object2分别设为1,10,15(比例越大权重越小)