当我们拿到一个数据集后,我们需要先从标注文件中读取数据,然后对其进行打乱(shuffle),我们那celeba数据集为例进行说明
1.标注文件说明
202599
image_id x_1 y_1 width height
000001.jpg 95 71 226 313
000002.jpg 72 94 221 306
000003.jpg 216 59 91 126
000004.jpg 622 257 564 781
000005.jpg 236 109 120 166
000006.jpg 146 67 182 252
可以看到第一行为图片数量,总共202599张图片,第二行是标注说明,依次分别为:
- image_id:图片名称,用来组装图片路径
- x_1:人脸左上角x坐标
- y_1:人脸左上角y坐标
- width :人脸宽度
- height:人脸高度
2.读取标注文件
def load_anno_file(path):
with open(path, "r") as f:
annotations = f.readlines()
return annotations[2:]
1.排序打乱
anno_bbox_list = load_anno_file(anno_bbox_file)
# 数据总数
data_len = len(anno_bbox_list)
# 打乱数据,创建从0 到 data_len 的数组
index = np.arange(data_len)
# 将数组打乱
np.random.shuffle(index)
# 循环调用
for i in tqdm(data_len):
anno_bbox = anno_bbox_list[index[i]]
...
2.切片打乱
ase_num = 150000
negative_keep = np.random.choice(len(negative_lists), size=base_num * 3, replace=False)
negative_lists = np.asarray(negative_lists)[negative_keep]