你的颜值打几分?——基于tensorflow实现人脸打分模型

前言

用神经网络评价颜值高低,基于CNN实现人脸打分。这个项目一周前发布在GitHub上面,后经本人使用新的公开的数据集(原项目数据集未公布),重新设置网络结构,最后跑出模型,可通过访问GitHub获得代码及训练好的模型:https://github.com/roguesir/DL-project/tree/master/FaceScoring

项目介绍

数据获取

训练数据集为华南理工大学实验室公布的数据集,下载地址为: http://www.hcii-lab.net/data/SCUT-FBP/EN/download.html。这个数据集里面都是女生的图片及打分。
这个数据及包含500张女生图片,由70人进行打分,最终取平均值即为该图片的打分情况。从1到5分不等。如下图所示:

预处理

原始数据集中图片和评分是分开的,为了项目方便,我们将图片名称命名为:评分-编号.jpg,我们的目标是使最终训练的模型能够对图片进行1-9的评分,因此需要对得分进行处理,使评分为1-9之间的整数。可以参考我的GitHub项目中rename.py脚本文件,如下:
for i in range(0,500):
	score = str(round(col_score[i])*2)
	for image in os.listdir(path):
		#print(image)
		if os.path.isfile(os.path.join(path, image)):
			id_tag = image.find("j")
			score_tag = image.find("-")
			#print(id_tag)
			name=image[score_tag+1:id_tag-1]
			#print(name)
			#print(i+1)
			if name == str(i+1):
				os.rename(path + os.sep + image, path + os.sep + score + '-' + name + '.jpg')
之后,需要使用face_recognition库将图片中的人脸进行提取,不得不说,face_recognition这个库真的挺强大的,处理效果也很好(只要你正经点。。。见下图)

用face_recognition库处理好图片,结果如下所示:

最后,将提取出来的人脸图片重新设置大小,同意成128*128尺寸。即可完成数据准备。

网络设计

这个项目,最初的作者给出了原始的CNN代码,我重新设置了两个模型,提高了准确率,介绍如下:
原始模型:含有三层卷积层和两层全连接层的CNN网络,网络结构较简单, 点击进入
Alex模型:类似AlexNet分类模型,含有五层卷积层和三层全连接层的CNN网络, 点击进入
VGG-16模型:类似VGG-16模型,含有13层卷积层和三层全连接层的CNN网络。
模型中加入BN,防止梯度爆炸。

训练

训练过程如下:
1.在GitHub上面clone代码
2.运行rename.py脚本将数据重新命名
3.运行find_faces_in_picture.py,通过face_recognition库提取人脸图片
4.运行resize_image.py将提取的人脸图片设置为128*128
5.运行train.py训练原始模型,train_alex.py训练AlexNet模型,train_vgg.py训练VGG-16模型
6.运行test.py、test_alex.py、test_vgg.py即可对上述三个模型进行测试 
说明:test脚本文件对应的模型结构一致,在train脚本文件中将训练的模型存储,以方便test文件调用

模型输出

输出结果如下:

猜你喜欢

转载自blog.csdn.net/roguesir/article/details/77164578