简单记录利用hrnetv2训练自有数据时,遇到的问题
1.下载github代码,配置环境;
2.假设已有原始8位图像和8位label图像;
3.修改root/lib/datasets/cityscapes.py中的部分:
self.label_mapping = {-1: ignore_label, 0: ignore_label,
1: ignore_label, 2: ignore_label,
3: ignore_label, 4: ignore_label,
5: ignore_label, 6: ignore_label,
7: 0, 8: 1, 9: ignore_label,
10: ignore_label, 11: 2, 12: 3,
13: 4, 14: ignore_label, 15: ignore_label,
16: ignore_label, 17: 5, 18: ignore_label,
19: 6, 20: 7, 21: 8, 22: 9, 23: 10, 24: 11,
25: 12, 26: 13, 27: 14, 28: 15,
29: ignore_label, 30: ignore_label,
31: 16, 32: 17, 33: 18}
self.class_weights = torch.FloatTensor([0.8373, 0.918, 0.866, 1.0345,
1.0166, 0.9969, 0.9754, 1.0489,
0.8786, 1.0023, 0.9539, 0.9843,
1.1116, 0.9037, 1.0865, 1.0955,
1.0865, 1.1529, 1.0507]).cuda()
由于cityscapes数据集中num_classes为19,上述代码中self.label_mapping字典中的id:trainid字段,除去ignore_label为19个;self.class_weights的长度为19。
需要按照自有数据集的类别个数修改,如训练类别为9:
self.label_mapping = {-1: ignore_label, 0: 0,
1: ignore_label, 2: ignore_label,
3: ignore_label, 4: ignore_label,
5: ignore_label, 6: ignore_label,
7: 1, 8: 2, 9: ignore_label,
10: ignore_label, 11: 3, 12: 4,
13: 5, 14: 6, 15: 7,
16: 8, 17: ignore_label, 18: ignore_label,
19: ignore_label, 20: ignore_label, 21: ignore_label, 22: ignore_label, 23: ignore_label, 24: ignore_label,
25: ignore_label, 26: ignore_label, 27: ignore_label, 28: ignore_label,
29: ignore_label, 30: ignore_label,
31: ignore_label, 32: ignore_label, 33: ignore_label}
self.class_weights = torch.FloatTensor([0.8373, 0.918, 0.866, 1.0345,
1.0166, 0.9969, 0.9754, 1.0489,
0.8786]).cuda()