# VOC数据集中对应的标签
classes = ['background','aeroplane','bicycle','bird','boat',
'bottle','bus','car','cat','chair','cow','diningtable',
'dog','horse','motorbike','person','potted plant',
'sheep','sofa','train','tv/monitor']
# 各种标签所对应的颜色
colormap = [[0,0,0],[128,0,0],[0,128,0], [128,128,0], [0,0,128],
[128,0,128],[0,128,128],[128,128,128],[64,0,0],[192,0,0],
[64,128,0],[192,128,0],[64,0,128],[192,0,128],
[64,128,128],[192,128,128],[0,64,0],[128,64,0],
[0,192,0],[128,192,0],[0,64,128]]
cm2lbl = np.zeros(256**3)
# 枚举的时候i是下标,cm是一个三元组,分别标记了RGB值
for i, cm in enumerate(colormap):
cm2lbl[(cm[0]*256 + cm[1])*256 + cm[2]] = i
# 将标签按照RGB值填入对应类别的下标信息
def image2label(im):
data = np.array(im, dtype="int32")
idx = (data[:,:,0]*256 + data[:,:,1])*256 + data[:,:,2]
return np.array(cm2lbl[idx], dtype="int64")
通过哈希函数形成颜色到标签的一一对应关系。该哈希函数使用类似256进制的方法将color map中的每一个像素点映射到相应的类别。
哈希函数:(cm[0]×256+cm[1])×256+cm[2]等价于256×256×x+256×y+z,256进制
哈希映射:cm2lbl[(cm[0]×256+cm[1])×256+cm[2]]=i,使得每一个(x,y,z)都有唯一的一个i与之对应,这样的(x,y,z)共有256×256×256个。
哈希表:cm2lbl