文章目录
- 简介
- CelebA数据集下载
- 基于Python和PyTorch读取CelebA数据并可视化
- torchvision.datasets.CelebA介绍
- root根目录文件夹下CelebA文件存储方式如下
- 可视化以及代码
- 参考资料
简介
CelebA数据集是由香港中文大学多媒体实验室发布的大规模人脸属性数据集,包含超过 20 万张名人图像,每张图像有 40 个属性注释。CelebA数据集全拼是Large-scale CelebFaces Attributes (CelebA) Dataset。 该数据集中的图像涵盖了丰富的人体姿势变化和复杂多样的背景信息。涵盖了分类、目标检测和关键点检测等数据。本篇博客将详细介绍CelebA数据集的 下载 和 可视化。
注意:
- CelebA数据集并非一直不变,作者可能会根据需要添加一些新的数据。但基本上不会改变原有的数据,这个大家不同太担心。⭐️⭐️
- 香港中文大学多媒体实验室并不具备CelebA数据集中所有图像的版权,大家能切仅能将其作为学术研究和学习的用途。🔥🔥
CelebA数据集下载
CelebA官方网站【https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html】提供两种下载方式:1、谷歌云盘下载;2、百度云盘下载。
这里将两个云盘的下载链接放在下方,大家可根据自身情况选择任意一个下载,下载内容均相同。
- 谷歌云盘连接:https://drive.google.com/drive/folders/0B7EVK8r0v71pWEZsZE9oNnFzTm8?resourcekey=0-5BR16BdXnb8hVj6CNHKzLg&usp=sharing
- 百度云盘链接【密码:rp0s,若需要!】:https://pan.baidu.com/s/1eSNpdRG#list/path=%2F【推荐使用🚀🚀】
下载后大家将会得到如下三个文件夹和一个txt文件。
其中每个文件夹中的文件内容大体上如下所示:
-
Anno文件夹:
-
identity_CelebA.txt:身份信息记录文件。该txt文件包含两列数据:1、人脸图像名;2、图像对应的名人身份ID。
-
list_attr_celeba.txt:裁剪对对齐后的人脸标签属性记录文件。该txt文件第一行为图片数量,第二行为属性标签,后面的每一行分别是图片名+标签值。其中标签值为1表示具有改标签属性,为-1则不具备。
-
list_bbox_celeba.txt:裁剪对对齐后的人脸标注框记录文件。该txt文件第一行为数据集图片数量,第二行为image_id、x_1、y_1、width height分别表示人脸标注框左上角像素坐标以及标注框的宽和高。后续所有行则为图片名和标注框的具体数据值。注意:这里的标注框对应原始图像!!
-
list_landmarks_align_celeba.txt:裁剪对对齐后关键信息点数据记录文件。该txt文件第一行为数据集图片数量,第二行为lefteye_x、lefteye_y、righteye_x、righteye_y、nose_x、nose_y、leftmouth_x、leftmouth_y、rightmouth_x、rightmouth_y关键点标签,分别表示左眼横像素坐标、左眼纵像素坐标、右眼横像素坐标、右眼纵像素坐标、鼻子横像素坐标、鼻子纵像素坐标、左嘴角横像素坐标、左嘴角纵像素坐标、右嘴角横像素坐标、右嘴角纵像素坐标。后续所有行则为图片名和特征点的具体数据值。
-
list_landmarks_celeba.txt:为裁剪对对齐前原始图像中关键信息点数据记录文件。具体内容解释详见上方的list_landmarks_align_celeba.txt说明。
-
-
Eval文件夹:
- list_landmarks_celeba.txt:该txt文件包含两列数据的,第一列数据对应图片名称,第二列数据对同一行的图片所属数据集。其中,0表示训练集training set,1表示验证集validation set,2表示测试集test set。
-
Img文件夹:注意这里的后缀为’7z.0xx’的文件需要用7-zip压缩软件解压到本地。
-
img_align_celeba_png.7z:解压该7z压缩文件后,将会得到16个新的7z压缩文件【如下图所示】,全部解压后你将会得到202,599 张原始网页人脸图像。
-
img_celeba.7z:解压该7z压缩文件后,同样将会得到16个新的7z压缩文件【如下图所示】,全部解压后你将会得到202,599 张对齐和裁剪的脸部图像。对齐和裁剪过程为:首先根据两眼位置使用相似变换对图像进行粗略对齐;然后,将对齐后的图片大小裁剪为218*178。【注意区分和img_align_celeba_png.7z压缩文件的区别】。注意这里的后缀为’7z.0xx’的文件需要用7-zip压缩软件解压到本地。
-
img_align_celeba.zip:解压后将得到一个同名的文件夹,里面包含了202599张JPEG已经对齐和裁剪好的名人头像图片。
-
-
README.txt:数据集的英文介绍,英文不错的朋友建议阅读,英文差的同学也推荐使用翻译软件学习一下,这有助于帮助大家了解CelebA数据集。
基于Python和PyTorch读取CelebA数据并可视化
大家从百度云盘或者谷歌云盘下载得到的CelebA数据集包括三个文件夹和一个README.txt文件。具体的说明详见上一小节。
解压后的ClelebA数据集中图片为jpg或者png图片,通过OpenCV或者PIL等Python软件包就可以直接加载。对应的数据标签文件为txt文件,需要手动写一下读取脚本,当然也可以直接使用torchvision.datasets.CelebA这个API直接读取,但需要将数据集按照下面的方式进行存储。
此处讲解通过PyTorch的API加载相关数据集进行说明。首先下载下来的CelebA数据集并不能通过torchvision.datasets.CelebA接口进行直接读取和调用,要解压对齐和裁剪后的图片以及标签和数据集划分txt文件到统一的celeba文件夹下【注意:文件夹名称需为全小写英文字母】,方可通过torchvision.datasets.CelebA这个API接口进行读取和操作。
torchvision.datasets.CelebA介绍
torchvision.datasets.CelebA原型定义如下:
torchvision.datasets.CelebA(
root: str,
split: str = “train”,
target_type: List[str] | str = “attr”,
transform: ((…) -> Any) | None = None,
target_transform: ((…) -> Any) | None = None,
download: bool = False
)
输入参数介绍:
参数 | 类型 | 介绍 |
---|---|---|
root | 下载文件存储的根目录 | 下载时会在此根目录中穿件一个全小写celeba 文件夹,并将所有的文件存储在新创建的文件夹中。若无需下载,及download参数为False,则自动加载该根目录下中的数据集文件,此时需要所有的文件按照一定的规则存储,据图详见此表后的图解 |
split | 加载时对对应的数据集。 | 此参数为一个字符串,可选参数为’train’,‘valid’,‘test’,‘all’,分别代表训练集、验证集、测试集和所有数据集。注意:无论此处怎么设置均会下载所有数据集,只是加载进当下实例的数据会有所区别。 |
target_type | 目标标签数据类型。 | 字符串或者字符串列表,可选参数有’attr’、‘bbox’、‘identity’、'lanmarks‘’。分别对应属性数据、标注框数据、身份数据和特征点数据 |
transform | 图片的转换 | 相关转换会应用到对应的图像上 |
target_transform | 目标类型的转换 | 相关转换会应用到相应的标签数据相 |
download | 是否下载,布尔类型 | True表示下载,自动在根目录root下面创建一个cleleba的文件夹,并将数据集文件下载在其中。为False则不下载,会自动加载root根目录下面cleleba文件夹下面的文件。若组织方式错误,或者相关文件不存在则会报错 |
root根目录文件夹下CelebA文件存储方式如下
root
| - cleleba
| – img_align_celeba
| – img_align_celeba.zip
| – list_attr_celeba.txt
| – list_bbox_celeba.txt
| – identity_CelebA.txt
| – list_bbox_celeba.txt
| – list_eval_partition.txt
| – list_landmarks_align_celeba.txt
| – list_landmarks_celeba.txt
| – README.txt
可视化以及代码
-
数据集前四张图片以及对应的身份标签(图片标题)、属性标签(X标签值)、关键点(图片中的小蓝点)。因为标注框看对应的原图,不能在对齐裁剪后的图片中进行展示,下方将单独给出标注框的可视化结果!
-
第2张图片原图对对应的标注框
-
可视化的代码
注意:在工程目录下应该有一个专门存储CelebA数据集的datasets文件夹,datasets文件夹下应该有celeba文件夹用于单独存放所有的CelebA图片和标签文件。
即./datasets/celeba/
目录下的内容如下:
目录中的内容除了’img_celeba’文件夹下面存储了原始图像,其他和torchvision.datasets.CelebA
所需目录组织方式相同!
#!/usr/bin/env python3
# -*- encoding utf-8 -*-import numpy as np
np.set_printoptions(suppress=True, precision=4)
from torchvision.datasets import CelebA
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 12
import cv2
from PIL import Imageif __name__ == "__main__":root_dir = './datasets'celeba = CelebA(root=root_dir, split='all',target_type=['attr', 'identity', 'bbox', 'landmarks'],download=False)attr_names = celeba.attr_namesattr_names.pop()attr_names = np.array(attr_names) fig = plt.figure(figsize=(14, 7))for idx in range(4):img, (attr, identity, bbox, landmarks) = celeba[idx] # 读取图片和相关标签值ax = fig.add_subplot(1, 4, idx + 1)# 不显示刻度标签和边框ax.set_xticks([])ax.set_yticks([])ax.set_frame_on(b=False) # 将CelebA数据集读取到的PIL图片格式转换成OprnCV所需格式img_cv2 = cv2.cvtColor(src=np.asanyarray(img), code=cv2.COLOR_RGB2BGR)# 特征点landmarks = landmarks.numpy()for idx, point in enumerate(landmarks):if idx % 2 == 0:cv2.circle(img=img_cv2, center=(point, landmarks[idx + 1]),radius=1, color=(255, 0, 0), thickness=2)attr_list = attr.numpy()attrs = attr_names[attr_list==1]label = '' # 属性标签for att in attrs:label = label + att + '\n'ax.set_xlabel(label)# 身份IDcele_id = identity.numpy()ax.set_title(f'ID: {cele_id}')# 将OpenCV图片再次转成成Pillow图片格式img_pil = Image.fromarray( cv2.cvtColor(src=img_cv2,code=cv2.COLOR_BGR2RGB,))ax.imshow(img_pil)plt.savefig(root_dir + '/' + 'celeba.jpg', dpi=600, format='jpg',bbox_inches='tight')fig = plt.figure()img, (attr, identity, bbox, landmarks) = celeba[1] # 获取第一张图片的标注框bbox = bbox.numpy()ax = fig.add_subplot(1, 1, 1)# 不显示刻度标签和边框ax.set_xticks([])ax.set_yticks([])ax.set_frame_on(b=False)# 标注框img_cv2 = cv2.imread(filename=root_dir + '/' \+ 'celeba/img_celeba/000002.jpg')cv2.rectangle(img=img_cv2, pt1=(bbox[0], bbox[1]),pt2=(bbox[0] + bbox[2], bbox[1] + bbox[3]),thickness=1,color=(0, 0, 255))img = cv2.cvtColor(src=img_cv2, code=cv2.COLOR_BGR2RGB)ax.imshow(img)plt.savefig(root_dir + '/' + 'origin_celeba.jpg', dpi=600, format='jpg',bbox_inches='tight')
参考资料
- 官网:Large-scale CelebFaces Attributes (CelebA) Dataset
收集整理和创作不易, 若有帮助🉑, 请帮忙点赞
👍➕收藏
❤️, 谢谢!✨✨🚀🚀