人脸素描属性识别:深度学习模型探索与性能评估

人脸素描属性识别:深度学习模型探索与性能评估

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.jsonanno_test.json获取,本质是一个多标签分类问题。

  • 本文探索了三种深度学习模型:VGG16、ResNet18和DenseNet121在该任务下的性能表现。
  • 实验数据集FS2K数据集与实验结果均可在所给github仓库中获取,其中photo代表原图,Sketch代表素描图,数据集如下图所示:
    在这里插入图片描述

处理方案

​ 首先对于FS2K数据集用官方的数据划分程序进行划分,之后对划分后的数据进行预处理,统一图片后缀为jpg,之后自定义数据加载类,在数据加载过程中进行标签编码,对图片大小进行统一,并转成tensor,在处理过程中发现存在4个通道的图片,本文采取取前3个通道的方案,之后再对图像进行标准化,可以加快模型的收敛,处理完成的数据作为模型的输入,在深度学习模型方面,首先需要进行模型选择,本文使用了三个模型,分别为VGG16,ResNet121以及DenseNet121,在通过pytorch预训练模型进行加载,并修改模型输出层,输出数量为图片属性特征数,之后在设定模型训练的参数,包括Batch,学习率,epoch等,在每一轮训练完成后,都需要对预测出的特征进行处理,在二分类标签设定概率阈值,多分类标签特征列则进行最大概率类别组合,取预测概率最大的类别作为当前属性的预测结果,每一轮训练都在测试集上进行性能评估,并根据F1指标择优保存模型。训练完成后,在测试集上预测属性提取结果,对每一个属性进行性能评估,最后取平均,得到平均的性能指标。

整体的处理流程如下图所示:

在这里插入图片描述

数据预处理

  1. 数据划分: 根据FS2K官方给出的数据划分得到训练集和测试集
  2. 图片统一后缀和通道数: 统一图片后缀为jpg,通道数为3
  3. 统一图片大小:所给数据集分为三个文件夹,每个文件夹图片的像素各不相同,分别为250*250、475 *340、223 *318,这里统一变换成256 * 256,便于后序处理
  4. 转换为Tensor: 我们将图片数据转换为PyTorch的Tensor格式
  5. 图像标准化:逐channel的对图像进行标准化,可以加快模型的收敛

标签编码

  1. 二分类标签编码: 对于二分类属性(如hairearring等),我们将标签编码为0和1
  2. 多分类标签编码: 对于多分类属性(如hair_colorstyle等),我们采用One-Hot编码进行处理,以便模型能够正确识别多个类别,例如:
    • hair_color中0 对应 [1,0,0,0,0], 1对应[0,1,0,0,0], 2对应[0,0,1,0,0],以此类推,共5类
    • style中 0 对应 [1,0,0],1对应[0,1,0], 2对应[0,0,1],以此类推,共3类
  3. 标签向量拼接: 将所有属性标签拼接成一个长度为13的标签向量,方便模型训练和预测。

实验模型

  1. 模型选择: 我们选择了VGG16、ResNet121和DenseNet121三种预训练模型作为候选模型
  2. 模型加载和修改: 使用PyTorch加载预训练模型,并根据任务需求修改输出层,使其输出属性特征数
  3. 训练参数设置: 设定训练参数,包括Batch大小、学习率、epoch等
  4. 性能评估: 每轮训练后,在测试集上进行性能评估,并根据F1指标选择最佳模型进行保存

VGG16

模型结构参数

在这里插入图片描述

​ 由于VGG16最后一层全连接输出1000维特征,因此在本题中需要在加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数,在得到每一类预测的概率后,针对编码过的hair_color、style的8列,对各自的编码后的对应列计算概率最大的列下标,作为该属性的预测值。

训练参数

batch64
epoch20
optimizer (优化器)SGD(随机梯度下降)
criterion (损失函数)BCELoss(二分类交叉熵损失)
学习率0.01

photo数据集上模型训练Loss

在这里插入图片描述

VGG16 实验结果 「方法一」

f1precisionrecallaccuracy
hair0.9260640.9030450.9502870.950287
gender0.5980460.6112820.593690.59369
earring0.740610.6744080.8212240.821224
smile0.5130380.5806210.6395790.639579
frontal_face0.7580240.6949760.8336520.833652
hair_color0.3515960.3871320.3891010.389101
style0.4604690.5261450.4435950.443595
average0.6684810.6722010.7088910.708891

结果分析

  • 在hair、frontal_face和earring属性上取得了较高的性能,分别达到了95.03%、83.37%和82.12%的准确率。
  • 对于gender和smile属性,性能较差,分别只达到了59.37%和63.96%的准确率。
  • 在hair_color和style属性上的性能也较为一般,分别只达到了38.91%和44.36%的准确率。
  • 平均性能指标为约66.85%,整体表现中等。

ResNet18

模型结构参数

在这里插入图片描述

模型修改 ,模型最后加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数

训练参数

batch64
epoch20
optimizer (优化器)SGD(随机梯度下降)
criterion (损失函数)BCELoss(二分类交叉熵损失)
学习率0.01

photo数据集上模型训练Loss

在这里插入图片描述

ResNet18 photo数据集结果 「方法二」

f1precisionrecallaccuracy
hair0.9260640.9030450.9502870.950287
gender0.6578740.6571950.65870.6587
earring0.7441850.7648090.8212240.821224
smile0.6341350.632980.6520080.652008
frontal_face0.7580240.6949760.8336520.833652
hair_color0.4988040.5159160.5468450.546845
style0.5082020.579170.4827920.482792
average0.7159110.7185110.7431880.743188

结果分析:

  • 相较于VGG16,在gender和smile属性上取得了更好的性能,分别达到了65.87%和65.20%的准确率。
  • 在hair、earring和frontal_face属性上性能相近,分别达到了95.03%、82.12%和83.37%的准确率。
  • 对于hair_color和style属性,性能仍然较差,分别只达到了54.68%和48.28%的准确率。
  • 平均性能指标为约71.59%,略优于VGG16模型。

Sketch数据集上模型训练Loss

在这里插入图片描述

sketch数据集结果 「方法三」

f1precisionrecallaccuracy
hair0.9260640.9030450.9502870.950287
gender0.8119820.8137210.8145320.814532
earring0.7434950.7200110.8135760.813576
smile0.5731690.5730850.6147230.614723
frontal_face0.7580240.6949760.8336520.833652
hair_color0.3585760.3394810.4196940.419694
style0.8425750.9429950.8030590.803059
average0.7517360.7484140.781190.78119

DenseNet121

模型结构参数

在这里插入图片描述

训练参数

batch64
epoch20
optimizer (优化器)SGD(随机梯度下降)
criterion (损失函数)BCELoss(二分类交叉熵损失)
学习率0.01

photo数据集上模型训练Loss

在这里插入图片描述

DenseNet photo数据集结果 「方法四」

f1precisionrecallaccuracy
hair0.9260640.9030450.9502870.950287
gender0.9356690.9360430.9359460.935946
earring0.8373580.8371940.8537280.853728
smile0.7849840.7874450.7906310.790631
frontal_face0.7804360.8326820.84130.8413
hair_color0.6852420.6659040.7189290.718929
style0.5154210.5678960.4971320.497132
avg0.8081470.8162760.8234940.823494

结果分析:

  • 在gender和smile属性上取得了最佳性能,分别达到了93.57%和78.50%的准确率。
  • 对于其他属性的性能也较为优秀,在hair、earring和frontal_face属性上达到了92.60%、83.73%和78.04%的准确率。
  • 在hair_color属性上的性能相对较差,但仍然达到了68.52%的准确率。
  • 在style属性上取得了最低的性能,仅为51.54%的准确率。
  • 平均性能指标为约80.81%,在三个模型中表现最佳。

Sketch数据集上模型训练Loss

在这里插入图片描述

DenseNet sketch数据集结果 「方法五」

f1precisionrecallaccuracy
hair0.9260640.9030450.9502870.950287
gender0.8837730.8866390.8852770.885277
earring0.7431960.7347330.8193120.819312
smile0.6109520.6618470.6711280.671128
frontal_face0.7580240.6949760.8336520.833652
hair_color0.3725960.3602520.4235180.423518
style0.9445350.960710.9388150.938815
avg0.7798920.7752750.8152490.815249

整体结果对比

FS2K Photo数据集下各模型F1值

在这里插入图片描述

FS2K Sketch数据集下各模型F1值

在这里插入图片描述

  1. VGG16 vs. ResNet18 vs. DenseNet121
    • 在对比三种不同的预训练模型在相同数据集上的性能时,可以观察到 DenseNet121 在大多数属性上取得了最佳性能,其次是 ResNet18,最后是 VGG16。这表明了在相同的任务上,更深层次的模型结构往往能够更好地提取图像特征,从而提高模型的性能。
  2. 属性性能差异
    • 在所有模型中,对于一些属性如 hair、frontal_face 和 earring,模型性能普遍较好,这可能是因为这些属性在图像中具有明显的特征,容易被模型学习和识别。相比之下,像 gender 和 smile 这样的属性可能更为主观和抽象,因此模型的性能相对较低。
    • 特别是在 hair_color 和 style 属性上,模型性能普遍较差,这可能是因为这些属性的识别更为复杂,受到光照、姿势、背景等因素的影响较大。
  3. 平均性能指标对比
    • 在三种模型中,DenseNet121 在平均性能指标上取得了最佳表现,这意味着它在多个属性的识别上具有更稳定和优秀的性能。ResNet18 次之,VGG16 表现最差。
  • 32
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值