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

    文章

    4572

    浏览量

    98737
  • 人脸识别
    +关注

    关注

    76

    文章

    3955

    浏览量

    80556

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

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

收藏 人收藏

    评论

    相关推荐

    人工神经网络原理及下载

    人工神经网络是根据人的认识过程而开发出的一种算法。假如我们现在只有些输入和相应的输出,而对如何由输入得到输出的机理并不清楚,那么我们可以把输入与输出之间的未知过程看成是个“
    发表于 06-19 14:40

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

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

    容差模拟电路软故障诊断的小波与量子神经网络方法设计

    能力是无法解决的。而量子神经网络被认为是一种具有固有模糊性的网络,它的隐层单元采用多量子能级变换函数,每个多能级变换函数是系列具有量子间隔偏移的S型函数之和,能将决策的不确定性数据合
    发表于 07-05 08:06

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

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

    【案例分享】基于BP算法的前馈神经网络

    `BP神经网络首先给出只包含个隐层的BP神经网络模型(两层神经网络): BP神经网络其实由两部分组成:前馈
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    一种常用的无监督学习策略,在使用改策略时,网络的输出神经元相互竞争,每时刻只有个竞争获胜的神经
    发表于 07-21 04:30

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

    人工神经网络(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

    如何使用STM32F4+MPU9150去实现一种神经网络识别手势呢

    如何使用STM32F4+MPU9150去实现一种神经网络识别手势呢?其过程是怎样的?
    发表于 11-19 06:38

    神经网络移植到STM32的方法

    神经网络移植到STM32最近在做的个项目需要用到网络进行拟合,并且将拟合得到的结果用作控制,就在想能不能直接在单片机上做神经网络计算,这样就可以实时计算,不依赖于上位机。所以要解决
    发表于 01-11 06:20

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

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

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

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

    一种基于高效采样算法的时序图神经网络系统介绍

    成为了非常重要的问题。 基于以上问题,本文提出了一种基于高效采样算法的时序图神经网络系统 。首先我们介绍用于时序图神经网络采样的高效采样方法。采样常常被用于深度学习中以降低模型的训练时
    发表于 09-28 10:34