人脸素描属性识别:深度学习模型探索与性能评估
github代码:https://github.com/linkcao/FS2K_extract
FS2K数据集:https://github.com/DengPingFan/FS2K
项目概述
本项目需要根据FS2K数据集
进行训练和测试,实现输入一张人脸图片(真实图片或者素描图片),输入该图片的属性特征信息,提取属性特征包括hair
(有无头发)、hair_color
(头发颜色)、gender
(图像人物性别)、earring
(是否有耳环)、smile
(是否微笑)、frontal_face
(是否歪脖)、style
(图片风格),详细信息均可通过FS2K的anno_train.json
和anno_test.json
获取,本质是一个多标签分类问题。
- 本文探索了三种深度学习模型:VGG16、ResNet18和DenseNet121在该任务下的性能表现。
- 实验数据集
FS2K数据集
与实验结果均可在所给github仓库中获取,其中photo
代表原图,Sketch
代表素描图,数据集如下图所示:
处理方案
首先对于FS2K数据集用官方的数据划分程序进行划分,之后对划分后的数据进行预处理,统一图片后缀为jpg,之后自定义数据加载类,在数据加载过程中进行标签编码,对图片大小进行统一,并转成tensor,在处理过程中发现存在4个通道的图片,本文采取取前3个通道的方案,之后再对图像进行标准化,可以加快模型的收敛,处理完成的数据作为模型的输入,在深度学习模型方面,首先需要进行模型选择,本文使用了三个模型,分别为VGG16,ResNet121以及DenseNet121,在通过pytorch预训练模型进行加载,并修改模型输出层,输出数量为图片属性特征数,之后在设定模型训练的参数,包括Batch,学习率,epoch等,在每一轮训练完成后,都需要对预测出的特征进行处理,在二分类标签设定概率阈值,多分类标签特征列则进行最大概率类别组合,取预测概率最大的类别作为当前属性的预测结果,每一轮训练都在测试集上进行性能评估,并根据F1指标择优保存模型。训练完成后,在测试集上预测属性提取结果,对每一个属性进行性能评估,最后取平均,得到平均的性能指标。
整体的处理流程如下图所示:
数据预处理
- 数据划分: 根据FS2K官方给出的数据划分得到训练集和测试集
- 图片统一后缀和通道数: 统一图片后缀为jpg,通道数为3
- 统一图片大小:所给数据集分为三个文件夹,每个文件夹图片的像素各不相同,分别为250*250、475 *340、223 *318,这里统一变换成256 * 256,便于后序处理
- 转换为Tensor: 我们将图片数据转换为PyTorch的Tensor格式
- 图像标准化:逐channel的对图像进行标准化,可以加快模型的收敛
标签编码
- 二分类标签编码: 对于二分类属性(如
hair
、earring
等),我们将标签编码为0和1 - 多分类标签编码: 对于多分类属性&#x