CelebA数据集介绍以及预处理代码

目录

        • 数据地址:
        • 文件类别:
          • Anno文件夹
          • Eval文件夹
          • img文件夹
        • 数据处理及详细代码

数据地址:

官网地址:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html

文件类别:

我是从官网的百度云连接里下载的,下载之后一共四个文件
下面我们一 一看过文件内容
CelebA数据集介绍以及预处理代码_第1张图片

Anno文件夹

第一个文件夹Anno,存放的是各类标签

比如第一个identity_CelebA.txt是图片与 所对应的身份id
list_bbox标签,是人脸标注框坐标注释文件,包含每一张图片对应的bbox起点坐标及其宽高
list_landmarks_align_celeba.txt则是对应人脸对齐后 的landmark坐标
CelebA数据集介绍以及预处理代码_第2张图片

Eval文件夹

这里是将数据集分成了三部分

train(标0的部分)
valid(标1的部分)
test(标2的部分)
CelebA数据集介绍以及预处理代码_第3张图片
CelebA数据集介绍以及预处理代码_第4张图片

img文件夹

文件包括这三部分

img_align_celeba 是裁剪过的并以.jpg结尾的图片,占内存较小
img_align_celeba_png.7z
img_celeba.7z是未经裁剪的图片,故称野生照片
CelebA数据集介绍以及预处理代码_第5张图片
CelebA数据集介绍以及预处理代码_第6张图片

数据处理及详细代码

  • 因为我这里需要将每个人的图片放到对应的id文件下,所以我需要通过代码进行预处理,下面就直接贴代码了,以及效果图
# -*- coding: utf-8 -*-
# !/usr/bin/env python3

'''
Divide face accordance CelebA Id type.
'''


import shutil
import os

output_path_train = r"C:\Users\rugu\Desktop\train"
output_path_valid = r"C:\Users\rugu\Desktop\valid"
output_path_test = r"C:\Users\rugu\Desktop\test"
image_path = r"C:\Users\rugu\Desktop\img_align_celeba"  #原始图片文件夹的路径
CelebA_Id_file = r"C:\Users\rugu\Desktop\identity_CelebA.txt"  #identity_CelebA.txt文件的路径


def main():
    count_N = 0

    with open(CelebA_Id_file, "r") as Id_file:

        Id_info = Id_file.readlines()
        for line in Id_info:
            count_N += 1   #计数
            info = line.split()
            filename = info[0]
            file_Id = info[1]
            Id_dir_train = os.path.join(output_path_train,file_Id)
            Id_dir_valid = os.path.join(output_path_valid, file_Id)
            Id_dir_test = os.path.join(output_path_test, file_Id)
            filepath_old = os.path.join(image_path,filename) #原始照片所在的位置
            if count_N<=170000:   #这里170000是我随便写的一个数字,具体可以去文件中查看,大该16万多,不影响
                if not os.path.isdir(Id_dir_train):
                    os.makedirs(Id_dir_train)
                else:
                    pass
                train = os.path.join(Id_dir_train,filename)
                shutil.copyfile(filepath_old,train)        #这句代码是复制的意思
            elif count_N>170000 and count_N<182636: #在这区间的都是valid
                if not os.path.isdir(Id_dir_valid):
                    os.makedirs(Id_dir_valid)
                else:
                    pass
                valid = os.path.join(Id_dir_valid, filename)
                shutil.copyfile(filepath_old, valid)
            else :                                     #这里的是test
                if not os.path.isdir(Id_dir_test):
                    os.makedirs(Id_dir_test)
                else:
                    pass
                test = os.path.join(Id_dir_test, filename)
                shutil.copyfile(filepath_old, test)
    Id_file.close()
    print(" have %d images!" % count_N)

if __name__ == "__main__":
    main()

我只用了12张,为写这个博客做个测试
CelebA数据集介绍以及预处理代码_第7张图片
桌面也生成了相应的文件 这里数字代表标签
CelebA数据集介绍以及预处理代码_第8张图片

你可能感兴趣的:(数据集)