赞
踩
CELEBA 数据集(CelebFaces Attributes Dataset)是一个大规模的人脸图像数据集,旨在用于训练和评估人脸相关的计算机视觉模型。该数据集由众多名人的脸部图像组成,提供了丰富的人脸属性标注信息。
以下是 CELEBA 数据集的一些详细信息:
CELEBA 数据集的丰富性和规模使其成为人脸相关算法的重要基准数据集之一。研究人员和开发者可以利用该数据集来训练和评估人脸相关的深度学习模型,推动人脸识别、人脸属性分析等领域的进展。
需要注意的是,CELEBA 数据集的具体细节和使用方式可能会有更新和改变。建议在使用数据集时查阅最新的文档和数据集发布者的说明。
CELEBA 数据集每一部分的解释和名称如下:
CELEBA 数据集由多个部分组成,每个部分包含不同的信息和用途。以下是 CELEBA 数据集的一些主要部分及其解释和名称:
这些部分是 CELEBA 数据集中常用的部分,用于获取图像、属性标注、划分信息以及人脸边界框和关键点信息。使用这些部分的数据,可以进行各种人脸相关任务的训练、评估和分析。
import clip
import torch
import torchvision
import time
device = "cuda" if torch.cuda.is_available() else "cpu"
def model_load(model_name):
# 加载模型
model, preprocess = clip.load(model_name, device) #ViT-B/32 RN50x16
return model, preprocess
def data_load(data_path):
# 加载数据集和文字描述
celeba = torchvision.datasets.CelebA(root = './39.AIGC/CELEBA', split = 'test', download = True)
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in celeba.attr_names]).to(device)
return celeba, text_inputs
def test_model(start, end, celeba, text_inputs, model, preprocess):
# 测试模型
length = end - start + 1
face_accuracy = 0
face_score = 0
for i, data in enumerate(celeba):
face_result = 0
if i < start:
continue
image, target = data
image_input = preprocess(image).unsqueeze(0).to(device)
with torch.no_grad():
image_features = model.encode_image(image_input)
text_features = model.encode_text(text_inputs)
image_features /= image_features.norm(dim = -1, keepdim = True)
text_features /= text_features.norm(dim = -1, keepdim = True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim = -1)
top_score, top_label = text_probs.topk(6, dim = -1)
for k, score in zip(top_label[0], top_score[0]):
if k.item() < 40 and target[k.item()] == 1:
face_result = 1
face_score += score.item()
print('Predict right! The predicted is {}'.format(celeba.attr_names[k.item()]))
else:
print('Predict flase! The predicted is {}'.format(celeba.attr_names[k.item()]))
face_accuracy += face_result
if i == end:
break
face_score = face_score / length
face_accuracy = face_accuracy / length
return face_score, face_accuracy
if __name__ == '__main__':
start = 0
end = 1000
model_name = 'ViT-B/32'
data_path = 'CELEBA'
time_start = time.time()
model, preprocess = model_load(model_name)
celeba, text_inputs = data_load(data_path)
face_score, face_accuracy = test_model(start, end, celeba, text_inputs, model, preprocess)
time_end = time.time()
print('The prediction:')
print('face_accuracy: {:.2f} face_score: {}%'.format(face_accuracy, face_score * 100))
print('runing time: %.4f' % (time_end - time_start))
import clip
import torch
import torchvision
import time
这段代码导入了 clip、torch、torchvision 和 time 库。这些库提供了用于计算机视觉和深度学习任务的功能和工具。
device = "cuda" if torch.cuda.is_available() else "cpu"
这行代码用于选择设备(device),可以是 CUDA 加速的 GPU 设备或者 CPU 设备。它使用了条件表达式(if-else)来检查系统是否有可用的 CUDA 设备。如果有可用的 CUDA 设备,将设备设置为 “cuda” ;否则,将设备设置为 “cpu”。
def model_load(model_name):
# 加载模型
model, preprocess = clip.load(model_name, device) #ViT-B/32 RN50x16
return model, preprocess
这个函数用于加载 CLIP 模型和预处理函数。
具体解读如下:
def data_load(data_path):
# 加载数据集和文字描述
celeba = torchvision.datasets.CelebA(root = './39.AIGC/CELEBA', split = 'test', download = True)
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in celeba.attr_names]).to(device)
return celeba, text_inputs
这个函数用于加载数据集和生成与数据集相关的文字描述。
def test_model(start, end, celeba, text_inputs, model, preprocess):
# 测试模型
length = end - start + 1
face_accuracy = 0
face_score = 0
for i, data in enumerate(celeba):
face_result = 0
if i < start:
continue
image, target = data
image_input = preprocess(image).unsqueeze(0).to(device)
with torch.no_grad():
image_features = model.encode_image(image_input)
text_features = model.encode_text(text_inputs)
image_features /= image_features.norm(dim = -1, keepdim = True)
text_features /= text_features.norm(dim = -1, keepdim = True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim = -1)
top_score, top_label = text_probs.topk(6, dim = -1)
for k, score in zip(top_label[0], top_score[0]):
if k.item() < 40 and target[k.item()] == 1:
face_result = 1
face_score += score.item()
print('Predict right! The predicted is {}'.format(celeba.attr_names[k.item()]))
else:
print('Predict flase! The predicted is {}'.format(celeba.attr_names[k.item()]))
face_accuracy += face_result
if i == end:
break
face_score = face_score / length
face_accuracy = face_accuracy / length
return face_score, face_accuracy
这个函数用于测试模型的性能。
总的来说,这个函数的作用是对模型进行测试,并计算人脸识别的平均得分和平均准确率。在测试过程中,它遍历 CelebA 数据集中的图像,计算图像与文字特征之间的相似度,并根据预测的结果评估模型的性能。
if __name__ == '__main__':
start = 0
end = 1000
model_name = 'ViT-B/32'
data_path = 'CELEBA'
time_start = time.time()
model, preprocess = model_load(model_name)
celeba, text_inputs = data_load(data_path)
face_score, face_accuracy = test_model(start, end, celeba, text_inputs, model, preprocess)
time_end = time.time()
print('The prediction:')
print('face_accuracy: {:.2f} face_score: {}%'.format(face_accuracy, face_score * 100))
print('runing time: %.4f' % (time_end - time_start))
这段代码是整个程序的入口点,它实现了整个流程的控制和输出结果。
总的来说,该部分代码是整个程序的入口,它负责加载模型、加载数据集、测试模型并输出结果。通过设定的参数对模型进行测试,并打印出人脸识别的准确率、得分和程序运行时间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。