FS2K人脸素描属性识别,如何应用于长尾词识别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1844个文字,预计阅读时间需要8分钟。
根据FS2K数据集,使用VGG16、DenseNet、ResNet进行训练和测试,实现输入一张图片(手绘和普通照片),输出该图片的属性特征信息、人脸要素特征识别和代码:https://github.com/linkcao/FS2K_extract
根据FS2K数据集,利用VGG16,DenseNet,ResNet进行训练和测试,实现输入一张图片(简笔画和普通照片),输出该图片的属性特征信息 人脸素描属性识别代码:github.com/linkcao/FS2K_extract
问题分析- 需要根据FS2K数据集进行训练和测试,实现输入一张图片,输出该图片的属性特征信息,提取属性特征包括
hair(有无头发)、hair_color(头发颜色)、gender(图像人物性别)、earring(是否有耳环)、smile(是否微笑)、frontal_face(是否歪脖)、style(图片风格),详细信息均可通过FS2K的anno_train.json和anno_test.json获取,本质是一个多标签分类问题。
- 首先对于FS2K数据集用官方的数据划分程序进行划分,之后对划分后的数据进行预处理,统一图片后缀为jpg,之后自定义数据加载类,在数据加载过程中进行标签编码,对图片大小进行统一,并转成tensor,在处理过程中发现存在4个通道的图片,采取取前3个通道的方案,之后再对图像进行标准化,可以加快模型的收敛,处理完成的数据作为模型的输入,在深度学习模型方面,首先需要进行模型选择,使用了三个模型,分别为VGG16,ResNet121以及DenseNet121,在通过pytorch预训练模型进行加载,并修改模型输出层,输出数量为图片属性特征数,之后在设定模型训练的参数,包括Batch,学习率,epoch等,在每一轮训练完成后,都需要对预测出的特征进行处理,在二分类标签设定概率阈值,多分类标签特征列则进行最大概率类别组合,取预测概率最大的类别作为当前属性的预测结果,每一轮训练都在测试集上进行性能评估,并根据F1指标择优保存模型。训练完成后,在测试集上预测属性提取结果,对每一个属性进行性能评估,最后取平均,得到平均的性能指标。
整体的处理流程如下图所示:
数据预处理- 数据划分,根据FS2K官方给出的数据划分得到训练集和测试集
- 统一图片后缀为jpg,通道数为3
- 所给数据集分为三个文件夹,每个文件夹图片的像素各不相同,分别为250*250、475 *340、223 *318,这里统一变换成256 * 256,便于后序处理
- 将图片数据转成tensor
- 逐channel的对图像进行标准化,可以加快模型的收敛
- 由于目标属性集中存在
hair_color、style两个多分类标签,因此对这两个标签做编码处理 - 采用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类
- 在和其他的5个二分类标签拼接组成标签向量,共13维
模型结构参数
由于VGG16最后一层全连接输出1000维特征,因此在本题中需要在加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数,在得到每一类预测的概率后,针对编码过的hair_color、style的8列,对各自的编码后的对应列计算概率最大的列下标,作为该属性的预测值。
训练参数
photo数据集上模型训练Loss
结果 「方法一」
模型结构参数
模型修改 ,模型最后加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数
训练参数
photo数据集上模型训练Loss
photo数据集结果 「方法二」
Sketch数据集上模型训练Loss
sketch数据集结果 「方法三」
模型结构参数
训练参数
photo数据集上模型训练Loss
photo数据集结果 「方法四」
Sketch数据集上模型训练Loss
sketch数据集结果 「方法五」
本文共计1844个文字,预计阅读时间需要8分钟。
根据FS2K数据集,使用VGG16、DenseNet、ResNet进行训练和测试,实现输入一张图片(手绘和普通照片),输出该图片的属性特征信息、人脸要素特征识别和代码:https://github.com/linkcao/FS2K_extract
根据FS2K数据集,利用VGG16,DenseNet,ResNet进行训练和测试,实现输入一张图片(简笔画和普通照片),输出该图片的属性特征信息 人脸素描属性识别代码:github.com/linkcao/FS2K_extract
问题分析- 需要根据FS2K数据集进行训练和测试,实现输入一张图片,输出该图片的属性特征信息,提取属性特征包括
hair(有无头发)、hair_color(头发颜色)、gender(图像人物性别)、earring(是否有耳环)、smile(是否微笑)、frontal_face(是否歪脖)、style(图片风格),详细信息均可通过FS2K的anno_train.json和anno_test.json获取,本质是一个多标签分类问题。
- 首先对于FS2K数据集用官方的数据划分程序进行划分,之后对划分后的数据进行预处理,统一图片后缀为jpg,之后自定义数据加载类,在数据加载过程中进行标签编码,对图片大小进行统一,并转成tensor,在处理过程中发现存在4个通道的图片,采取取前3个通道的方案,之后再对图像进行标准化,可以加快模型的收敛,处理完成的数据作为模型的输入,在深度学习模型方面,首先需要进行模型选择,使用了三个模型,分别为VGG16,ResNet121以及DenseNet121,在通过pytorch预训练模型进行加载,并修改模型输出层,输出数量为图片属性特征数,之后在设定模型训练的参数,包括Batch,学习率,epoch等,在每一轮训练完成后,都需要对预测出的特征进行处理,在二分类标签设定概率阈值,多分类标签特征列则进行最大概率类别组合,取预测概率最大的类别作为当前属性的预测结果,每一轮训练都在测试集上进行性能评估,并根据F1指标择优保存模型。训练完成后,在测试集上预测属性提取结果,对每一个属性进行性能评估,最后取平均,得到平均的性能指标。
整体的处理流程如下图所示:
数据预处理- 数据划分,根据FS2K官方给出的数据划分得到训练集和测试集
- 统一图片后缀为jpg,通道数为3
- 所给数据集分为三个文件夹,每个文件夹图片的像素各不相同,分别为250*250、475 *340、223 *318,这里统一变换成256 * 256,便于后序处理
- 将图片数据转成tensor
- 逐channel的对图像进行标准化,可以加快模型的收敛
- 由于目标属性集中存在
hair_color、style两个多分类标签,因此对这两个标签做编码处理 - 采用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类
- 在和其他的5个二分类标签拼接组成标签向量,共13维
模型结构参数
由于VGG16最后一层全连接输出1000维特征,因此在本题中需要在加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数,在得到每一类预测的概率后,针对编码过的hair_color、style的8列,对各自的编码后的对应列计算概率最大的列下标,作为该属性的预测值。
训练参数
photo数据集上模型训练Loss
结果 「方法一」
模型结构参数
模型修改 ,模型最后加一层全连接输入1000维特征,输出13维特征,最后再加上一层sigmoid激活函数
训练参数
photo数据集上模型训练Loss
photo数据集结果 「方法二」
Sketch数据集上模型训练Loss
sketch数据集结果 「方法三」
模型结构参数
训练参数
photo数据集上模型训练Loss
photo数据集结果 「方法四」
Sketch数据集上模型训练Loss
sketch数据集结果 「方法五」

