0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种用神经网络从真实照片中生成苹果Memoji表情的方法

zhKF_jqr_AI 来源:未知 作者:李倩 2018-11-05 15:19 次阅读

在今年六月份举行的WWDC18大会上,苹果介绍了全新的升级版“Animoji”——Memoji,用户可以选择不同的发型、五官和肤色来定制自己专属的表情符号,例如选择不同的肤色、发型甚至雀斑,并且有多种颜色。

但是,选择毕竟是有限的,在多种样式中对比查找也有一定难度,那么是否有一种算法可以根据照片生成Memoji呢?

在这篇博文中,我们将介绍一种用神经网络从真实照片中生成苹果Memoji表情的方法。具体来说,我测试了用于人脸识别的网络VGG16 Face,将真实照片与Memoji进行对比。之后我用它选择各种特征,为新目标创造Memoji表情。本文原作者为Pat Niemeyer,以下是论智的编译。

上图是神经网络生成的两个结果。在实际操作过程中,我们的工作会受到以下几点因素的影响:

人像卡通化

第一个问题就是:某人的“卡通版本”是什么样的。卡通漫画通常会放大某人最明显的特征,但是类似发型之类的其他特征区别不是很明显,并且发型的类型非常多。经过训练辨认人脸的神经网络会以抽象方式捕捉到某人的发型信息,从而进行转化。反过来说,这也意味着从抽象信息中生成发型并不是一个理想的好方法。

肤色和发色

在不同光线条件下推测照片中人物的肤色非常困难,在我的测试中,网络通常会选择肤色更浅的区域,并且不能区分现实和非现实情况。同样,虽然测试设备在分辨暗色和亮色头发的任务中表现不错,但是当照片中的头发颜色更鲜艳,这一方法或多或少地可能失败。

这里推荐一篇文章,其中用到的对人脸特征和肤色进行规范化的工具非常酷:Synthesizing Normalized Faces from Facial Identity Features。

No API

想用Memoji做实验遇到的最大挑战就是,目前没有可用的API能够程序化创造它们(没有直接的方法可以让我们在iOS中自动进行创造)。所以,当我们想搜索可能的Memoji作为生成过程的一部分时,这一过程变得极为低效。理想状态下,我们想用一个通用算法彻底调整各特征的组合,而不是独立处理,但这在简单的实验上是无法做到的。

照片选择

选择哪张照片作为参考材料对结果有很大的影响,在有些情况下,一些照片会比其他的生成更好的结果。理想的照片应该是裁剪合理、脸朝向前方、最具代表性的照片。对于每一特征,我都会根据至少四张人脸图像进行打分。

网络设置

VGG

VGG是图像识别中常用的卷积神经网络架构,VGG Face是该架构经过人脸识别训练后的工具。它的创作者已将完全训练后的网络开源,大大方便了我们的实验,因为从零训练一个这样的网络通常需要大量数据和计算时间。

VGG Face

Torch

另外在测试时,我用到了Torch科学计算框架。Torch提供了运行VGG模型所需要的环境,并且基于Lua提供了脚本环境,同时还有用于数学计算的库和基础搭建模块,可用于神经网络的图层。

Torch可以自动下载VGG Face模型,并且只需几行代码就能运行一张图片。基础流程如下:

-- Load the network

net = torch.load('./torch_model/VGG_FACE.t7')

net:evaluate()

-- Apply an image

img = load_image(my_file)

output = net:forward(img)

其中下载图像和对图像规范化的步骤代码可以在源代码中找到。

图层

如上图所示,VGG有很多不同类型的图层,首先是一个能保存RGB图像数据的Tensor,它应用了多种卷积、池化、权重和其他类型的变换,随着每个图层学习更多抽象特征,数据的“形状”和维度都在变化。最终网络会在最后一层生成一个一维的、有2622个元素的预测向量。该向量表示真人与网络训练结果匹配成功的概率。

在我们的案例中,我们不关心这些预测结果,而是想利用网络比较自己数据集中的抽象人脸。为了做到这一点,我们可以利用预测图层下的图层的输出,该图层包括了4096个元素向量,对人脸特征进行组合定制。

output = net.modules[selectedLayer].output:clone()

虽然VGG16的标准是16层的框架,但实际上在Torch中实施后生成的是具有40个模块的设置。

相似度

接下来,我们会向网络中输入成对的图片,然后用一种简单的相似度尺度比较它们的输出。其中比较两个大型数字向量的方法是利用点积:

torch.dot(output1, output2)

这就生成了一个表示向量在高维空间中“对齐”程度的标量值。

对于这一测试,我们想将生成的Memoji和多张参考图像对比,生成最终结果。所以我只需将每一对图像的值进行正则化,取平均分数。

sum = 0

for i = 1, #refs do

localref = refs[i]

local dotself = torch.dot(ref , ref)

sum = sum + torch.dot(ref, target) / dotself

end

...

return sum / #refs

正则化表示将一张图像和它本身相比的分数为1,那么之后的分数越接近于1,说明相似度越大。

除此之外,我们还能用到很多其他类型的衡量尺度。常用的两种可能是欧几里得距离或计算两输入之间的平均方差。

首次测试——The Lineup

首先我想知道,这一人脸网络能否在所有照片上生成对应的Memoji。首先,我随机收集了63张Memoji图像,大部分是苹果的设计原型。

之后我选择了一个Memoji,然后让网络选出前三名相似度最高的表情。

结果非常不错!不仅仅它能找到完全一样的Memoji(得分为1),第二第三名看起来也很相像。

真实照片

现在我们要进行“真实性”检测:我们让网络根据真实相片找到相似的Memoji,结果如下:

由于只能在有限的数据集中选择,所以结果并不如我们期待的那样好,可以看到分数都很低。

生成过程

接下来,我尝试让网络挑选特征创造全新的Memoji。正如上文提到的,在iOS中并没有能自动创建Memoji的途径,所以我决定编写脚本促进Memoji的生成。

我将手机电脑连接,用QuickTime Player的录制功能将这一过程保留下来。

但这一方法并不理想。首先,操作起来很复杂,光发型就有93种,运行一遍需要大量时间。更重要的是,我们每次只能评估一个特征的不同。理论上,我们可以不断地重复选择树,进行迭代,知道网络认为没有什么变化时才能停止。但是这种方法也不完美,很有可能只是一个“部分最小值”。

另外,照片中人物头像细微的移动就会影响分数。最后,我发现了一个简单的解决方法。

结果

在文章未完成前,我其实没有采用网络得出的川普中的发型,而是手动选择了一个分数最高的,觉得那个更适合他。但是最后我还是坚持展示出所有网络得出的结果。

所以,有的时候排名前三的将结果并不总是相似的。例如,以下就是川普发型的排名:

但是,奥巴马耳朵的排名却很靠谱,又大到小分数逐渐降低:

不过眼睛的选择却有些不同:

但是川普的眼睛就比较一致了:

发色

前面说到,头发的颜色因为光线问题会难以确定。川普和奥巴马的头发还比较好确定,但是有些情况下,网络总会把很亮的颜色看作灰色:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4759

    浏览量

    100445
  • 人脸识别
    +关注

    关注

    76

    文章

    4004

    浏览量

    81698

原文标题:用神经网络根据照片创建专属Memoji表情

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【PYNQ-Z2试用体验】神经网络基础知识

    学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量的人工
    发表于 03-03 22:10

    一种基于经优化算法优化过的神经网络设计FIR滤波器的方法介绍

    定程度上改善了传统方法的局限性,但这些方法自身也存在着些不足。之后,曾喆昭等人提出了一种基于余弦基
    发表于 07-08 07:16

    人工神经网络实现方法有哪些?

    人工神经网络(Artificial Neural Network,ANN)是一种类似生物神经网络的信息处理结构,它的提出是为了解决些非线性,非平稳,复杂的实际问题。那有哪些办法能实现
    发表于 08-01 08:06

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反
    发表于 07-12 08:02

    分享一种400×25×2的三层BP神经网络

    本文首先简单的选取了少量的样本并进行样本归化,这样就得到了可供训练的训练集和测试集。然后训练了400×25×2的三层BP神经网络,最后对最初步的模型进行了误差分析并找到了一种效果显著的提升
    发表于 07-12 06:49

    一种基于综合几何特征和概率神经网络的HGU轴轨识别方法

    摘要故障诊断是保证水轮发电机组安全运行的重要环节。轴心轨迹辨识是HGU故障诊断的一种有效方法。提出了一种基于综合几何特征和概率神经网络(CGC-PNN)的HGU轴轨识别
    发表于 09-15 08:18

    隐藏技术: 一种基于前沿神经网络理论的新型人工智能处理器

    ,而且计算量较小。利用所提出的片上模型结构,即权重生成和“超级掩码”扩展相结合,Hiddenite 芯片大大减少了外部存储器访问,提高了计算效率。深层神经网络一种复杂的人工智能机器学习体系结构,需要
    发表于 03-17 19:15

    卷积神经网络模型发展及应用

    十余年来快速发展的崭新领域,越来越受到研究者的关注。卷积神经网络(CNN)模型是深度学习模型中最重要的一种经典结构,其性能在近年来深度学习任务上逐步提高。由于可以自动学习样本数据的特征表示,卷积
    发表于 08-02 10:39

    基于人工免疫网络神经网络集成方法

    提出基于人工免疫网络神经网络集成方法AINEN。在用Bagging生成神经网络集成之后,将人工免疫网络
    发表于 04-10 08:49 18次下载

    一种基于RBF神经网络的传感器故障诊断方法

    针对传感器故障, 提出了一种基于RBF 神经网络的集成故障诊断方法RBF 神经网络建立传感器故障模型, 对系统的状态和故障参数进行在线估
    发表于 07-14 11:58 13次下载

    一种基于傅里叶基神经网络的频谱分析方法

    该文提出了一种递推最小二乘法训练傅里叶基神经网络权值的频谱分析方法。其主要思想是采用递推最小二乘法训练傅里叶基神经网络权值,根据权值获得信
    发表于 11-11 15:52 16次下载

    BP神经网络的电路最优测试集的生成设计

    BP神经网络的电路最优测试集的生成设计 1 引言   人工神经网络是基于模仿生物大脑的结构和功能而构成的一种信息处理系统。国际著名 的神经网络
    发表于 02-02 10:35 1270次阅读
    BP<b class='flag-5'>神经网络</b>的电路最优测试集的<b class='flag-5'>生成</b>设计

    一种改进的深度神经网络结构搜索方法

    为提升网络结构的寻优能力,提岀一种改进的深度神经网络结构搜索方法。针对网络结构间距难以度量的问题,结合
    发表于 03-16 14:05 3次下载
    <b class='flag-5'>一种</b>改进的深度<b class='flag-5'>神经网络</b>结构搜索<b class='flag-5'>方法</b>

    cnn卷积神经网络模型 卷积神经网络预测模型 生成卷积神经网络模型

    cnn卷积神经网络模型 卷积神经网络预测模型 生成卷积神经网络模型  卷积神经网络(Convolutional Neural Network
    的头像 发表于 08-21 17:11 1187次阅读

    人工神经网络模型是一种什么模型

    人工神经网络(Artificial Neural Networks,简称ANNs)是一种受生物神经网络启发而产生的数学模型,用于模拟人脑处理信息的方式。它由大量的节点(或称为神经元)相
    的头像 发表于 07-04 16:57 707次阅读