图像处理-为图像阵列分配一个热编码标签以进行训练

时间:2018-10-13 13:22:03

标签: python-3.x csv numpy image-processing cntk

我正在遵循CNTK中的this教程,该教程适用于我自己的数据。

我有一个数据集,每个观察点包含2张图像,并且我将火车标签存储在csv中,如下所示:

id,appliance
1000,8
1001,1
1002,8
1003,1

我每次观察得到的2张图像的标签都相同。如果我只使用2种图像类型中的一种并将它们存储在数组中,我将得到形状为(988,128,118)的数组,并且转换为array的标签csv的sahpe为(988,2),即可以将每个标签映射到图像。

问题是,现在我决定拍摄自己拥有的所有图像(每个观测值2个,而不是一个)现在我有一个图像数组(1976、128、118),但是我的标签数组仍然是( 988,2)由于标签的长度,标签分配将无法进行。我该如何克服这个问题?

要进行标签分配,我在这里使用此功能,该功能为每个15104个像素分配标签:

# Save the data files into a format compatible with CNTK text reader
def savetxt(filename, data, hasLabels=True, labels=0):
    dir = os.path.dirname(filename)

    if not os.path.exists(dir):
        os.makedirs(dir)

    print("Saving", filename )
    with open(filename, 'w') as f:
        print("opened....")
        labels_ohe = list(map(' '.join, np.eye(11, dtype=np.uint).astype(str))) #for one hot encoding
        index = 0
        for row in data:            
            row_str = row.astype(str)
            if hasLabels:                               
                label_str = labels_ohe[int(labels[index])]               

            feature_str = ' '.join(row_str)

            if hasLabels:
                f.write('|labels {} |features {}\n'.format(label_str, feature_str))
            else:
                f.write('|features {}\n'.format(feature_str))

            index = index + 1 

我们非常感谢您的帮助。预先感谢。

1 个答案:

答案 0 :(得分:1)

cntk中的地图文件定义为:

file_path_to_image, class_label
D:/image1.jpg, 1
D:/image2.jpg, 2
D:/image3.jpg, 1
D:/image4,jpg, 0

您可以为整个数据集构建地图文件,无论您有多少观测值。

或者,如果原始图像阵列和标签阵列已在第一轴(批处理轴)上对应。然后将它们堆叠在其自身上将使对应关系保持在第一轴上。