本文作者:南海一号
现在,很多小姐姐都很在意自己的颜值,毕竟颜值高的女孩子受到万人追捧,宛如公主一般。尤其是在大学校园里,美女是一茬一茬的。不化个妆都不好意思出寝室门。那么,颜值到底要按照怎样的标准评估呢。
随着神经网络的发展,只要有带标签的数据集,我们可以预测评估很多事情,比如人脸识别,图像检索。基于同样的原理,我们为什么不能构建一个神经网络,用于颜值的评估呢?
有人可能会说:没有数据集也没有标签啊,你用什么去训练神经网络。这个不用担心,这个数据集的工作,很久以前就有人做好了,现在比较靠谱的就是华南理工大学的一个数据集,里面有5500张图片,有女性图片,也有男性图片。有黑人,也有白人,当然也有黄种人。还包括阿拉伯人。并且找了很多观察者给这些图片的颜值打分,然后取平均值。打分在0--5分之间,5分颜值最高。0分是最低的。这个数据集是很好的
我先给大家演示一下神经网络的效果
给这个小姐姐的颜值打分是3.29255828。为了节约时间,神经网络神经元设定比较少,训练次数也少,可能给这位小姐姐打分太低了
。不过没关系,加大训练次数是可以的。
由于今天篇幅有限,我今天只能讲一讲怎么提取特征。
为了更好地写这个程序,我专门查询了一篇论文:《基于多特征融合的人脸颜值预测》。里面就提到了特征提取的方法,
首先我们根据人脸识别的特征提取方法,提取出64个人脸特征点的坐标,如下就是提取的人脸特征点
其实,这些特征点不仅可以用于人脸识别,也可以用于颜值评估。我用python代码提取出了这些特征点(用matlab也可以,大家可以尝试一下)
代码语言:javascript复制def get_feature(begin,end):
all_grade=[]
k=0
for i in range(begin,end):
img_name=label1.ix[i,0]
img_grade=label1.ix[i,1]
all_grade.append(img_grade)
path=path1 img_name
img=misc.imread(path)
#获取图像的特征点坐标
#img = cv2.imread(img_name)
#使用python-opencv读取图片
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#使图片转化为灰度图片
rects = detector(img_grey, 0)#返回信息
for i in range(len(rects)):
landmarks = np.matrix([[p.x, p.y]
for p in predictor(img_grey,rects[i]).parts()])
feature_1=np.array(landmarks)#特征
feature=ping_yi(feature_1)
feature=feature.flatten()
feature=autoNorm(feature)
del landmarks
if k==0:
all_64=feature
else:
all_64=np.dstack((all_64,feature)) """实现平移不变性""" del feature_1 del feature k=1 del img del img_grey return all_64,all_grade
其中用到了一个训练好的框架如下
代码语言:javascript复制predictor = dlib.shape_predictor('landmarks.dat')#加载一个自带的分类器
这个框架是可以直接提取出68个特征点的,但是由于图片拍摄的角度,距离和大小不同,为了避免误差,我们还需要对得到的特征点进行平移旋转,归一化等处理。经过这样的处理,我们可以提取的68个特征点就可以进一步运算了,我们将68个坐标点转化为136个数字,输入到神经网络中。
这就是提取特征的步骤。
关于接下来的操作,请期待下一期,再见,朋友们。
参考资料:《基于多特征融合的人脸颜值预测》---蒋婷,沈旭东,陆伟等
封面图片:由Adina Voicu在Pixabay上发布
图片来源: https://picjumbo.com
https://pixabay.com/zh/
数据集:https://download.csdn.net/download/weixin_39220714/10794688