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

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

3天内不再提示

为图像提供预设建议:构建 VSCO 中的“照片专用”功能

Tensorflowers 来源:YXQ 2019-07-26 15:46 次阅读

在 VSCO中,我们为您构建了个性化的创意工具、多种功能空间以及社交网络的链接。除了公开点赞、发表评论及查看粉丝数量等功能外,我们的应用还为用户提供图像视频的创建和编辑、发掘新技巧和新创意,并能够接入充满活力的全球社区。

我们使用机器学习来提供个性化定制,并为每位用户的创意流程提供指导。VSCO 为调整图片效果而提供了一系列多达 160 种预设,甚至还支持胶片相机的模拟图像。

未应用任何滤镜的建筑物照片。Sarah Hollander 所摄图像(左)。应用 AU5 预设后的建筑物照片(右)。

但在我们的研究中发现,这一系列的预设会让用户感到手足无措。因为太多的选择往往会导致用户坚持使用自己所熟悉和偏爱的少数预设,而不会去尝试新的预设。

解决方案

我们的挑战是需要为用户在编辑图片进行创作留有余地的同时,同时给用户提供可靠的建议并且鼓励他们去自行探索。我们的图像团队为了满足不同种类的图形而精心提供了多个预设,这让我们能够为每张照片分别提供个性化的建议。

为解决上述问题,我们决定借助设备端机器的学习和采用深度卷积神经网络 (CNN) 模型来为图像提供预设建议。因为这些模型能够理解图像中的众多细微差别,所以在分类上,相较于传统的计算机视觉算法更为便捷和快速。

基于这种思路,我们开发出了“照片专用(For This Photo)”功能。该功能使用设备端的机器学习来识别所编辑的照片类型进而在策划列表中提供相关的预设建议。“相片专用” 功能深受用户喜爱,现已成为仅次于“All(用于显示所有预设)”的第二大常用功能类。

“相片专用” 功能应用视频

为了让用户了解该功能运作流程,我们将会逐一介绍相关步骤。用户在使用“照片专用”功能进行视图编辑,当加载图像时,模型会立即启动推理作业,并为该图像返回一个类别。随后,模型会将类别 ID 与缓存目录中的 ID 进行匹配,并会返回一个与该类别相符的预设列表。之后在“照片专用”部分中将显示六个预设选项供用户参考,这些预设由免费预设和 VSCO 会员专属预设组成。通过免费和付费预设的对比,为用户提供实用参考。非会员用户在预览 VSCO 会员专属预设之后,便能了解 VSCO 会员服务的价值所在。而会员所能享受的优势在于,他们能够通过会员服务了解可采用会员专属预设的图像类型。

设备端机器学习有助确保可访问性、实现快速编辑并保护隐私

研究伊始,我们便已了解基于服务器的机器学习不适用于此功能。我们希望此功能使用设备端机器学习主要基于三大原因:设备端机器学习支持离线编辑、可实现快速编辑并能保护隐私。

首先,我们并不希望仅在会员在线时才提供此功能,因为这会限制他们的创造力。灵感可以随处迸发:人们可能会在网络连接受限的情况下拍摄和编辑照片,例如沙漠中央或是高山之巅。我们的用户群中有许多人都身处美国境外,因此并非人人都能随时访问高速网络。

其次,我们希望确保实现快速编辑。若我们采用云端机器学习模型并以此提供“相片专用” 功能,需要上传用户图像并进行分类(这会耗费大量时间、带宽和流量),而用户亦需下载预设;即便网络连接状态良好,整个过程亦十分缓慢,如果网络不佳,甚至都无法完成。若在设备端运行机器学习,则表示全部流程都发生在本地,运行速度快且无需网络连接。这对于确保用户捕捉精彩瞬间并保持创意至关重要。

第三,编辑过程不用公开。服务器端解决方案需要我们让用户上传仍在编辑且未发布的照片。设备端机器学习有助于用户在创作期间保护他们的隐私。

为什么选择 TensorFlow

既然我们希望使用自定义模型来开展设备端机器学习,那么 TensorFlow Lite 显然就是最佳之选。因为该框架能够轻松提取基于服务器训练的模型,并能使用 TFLiteConverter 将该模型转换为可与手机兼容的格式(.tflite 格式)。

此外,我们已在服务器端机器学习生产系统中进行验证:TensorFlow 与 TensorFlow Serving 均可成功运行。TensorFlow 库的设计是以在生产环境中运行机器学习为首要重点,因此我们认为 TensorFlow Lite 也不例外。

我们使用 ML Kit(https://developers.google.com/ml-kit) 直接在 TensorFlow Lite 模型上运行推理,并将其无缝整合至我们的应用中。借此,我们便可将原型中的功能快速引入预生产环境。ML Kit 能够为初始化和加载模型及对图像运行推理提供更高级别的 API,这让我们无需直接处理更低级别的 TensorFlow Lite C++ 库,从而能够大幅加快整个开发流程,并能为我们训练模型腾出更多时间。

VSCO 机器学习堆栈概览

在机器学习堆栈方面,我们使用 TensorFlow 来对图像进行深度学习,并使用 Apache Spark 对行为数据进行浅层学习。

在生产环境中,我们有一个基于云端并使用 TensorFlow Serving 的实时推理流水线,该流水线负责处理每一张通过各类卷积神经网络实时上传至 VSCO 的图像。之后,这些模型的推理结果会用于产品中其他功能,如“相关图像”、“搜索”、“为您定制”和“发现”功能等的其他选项卡。对于设备端的机器学习,我们使用 TensorFlow 生态系统中适于移动端的组件(即 ML Kit 和 TensorFlow Lite)。

相关图像

为您定制

搜索

用户建议

我们还拥有一个基于 Spark 的推荐引擎,该引擎可使用数据存储中不同来源的大型数据集来训练模型,而这些来源包括图像元数据、行为事件和关系数据。之后,我们使用这些模型的结果来服务于各种形式的个性化推荐,如用户建议。

为支撑机器学习流水线的其他环节,我们还使用 Elasticsearch实现搜索和相关功能,使用 Apache Kafka处理基于日志的分布式数据流(此数据流亦作为所有机器学习模型的输入),并使用 Kubernetes部署所有微服务。我们使用的语言包括 Python、C++、Go、Scala;在对设备端进行集成时,我们则使用 Java/Kotlin 和 Swift/Object-C。

设备端机器学习:“照片专用”工作原理

第一步:对图像进行分类

为构建能够提供“照片专用” 功能的模型,我们首先需为图像分配一个类别,然后为该类别推荐相应的预设。下图描绘了图像分类过程:

对图像进行分类

我们从公司内部专业人士所标记的图像数据开始入手。这些专业人士均为摄影专家,能够掌握用户行为的第一手资料,因此他们比任何人都更加了解现今分享的内容类型以及未来的发展趋势。他们帮助工程团队构想出了适用于模型的多种图像类别,其中包括艺术、肖像、活力、海岸、自然、建筑、光影、黑白等。俗话说,机器学习 90% 的工作都是在清理数据。这些步骤有助于确保我们拥有基于稳定可靠的数据来训练模型。

在 TensorFlow 中,我们使用与专业人士一同创建的分类数据集,并基于 SqueezeNet(https://arxiv.org/abs/1602.07360)架构训练了一个 CNN 模型。选择此架构是因为其尺寸更小,且准确率更高。通过使用 TFLiteConverter,我们已将训练后的模型从 TensorFlow Saved Model 格式转换为 TensorFlow Lite (.tflite) 格式,以便在 Android 上使用。此阶段中发生了基本错误,其中一个原因在于,我们所使用的 TFLiteConverter 版本与 ML Kit 通过 Maven 引用的 TensorFlow Lite 库版本不相符。ML Kit 团队帮助我们解决了以上问题,并在我们研究期间发挥了巨大作用。

在构建出可为图像分配类别的模型后,我们就可以将该模型捆绑至应用中,然后搭配使用 ML Kit 对图像运行xn。由于我们使用的是自定义训练模型,因此我们采用了 ML Kit 中的 Custom Model API。为获得更高准确率,我们决定放弃模型转换中的量化步骤,转而使用 ML Kit 中的浮点模型。这其中存在一些挑战,因为 ML Kit 会默认采用量化模型。不过,我们轻而易举就成功更改了模型初始化中的一些步骤,从而令其支持浮点模型。

第二步:推荐预设

下一项挑战是基于图像类别提供预设建议。我们与创建预设的内部图像团队进行合作,共同构想出与各类别图像相契合的预设列表。此过程包括对分属各类别的众多图像分辨进行了严格测试,以便我们能够分析出每个预设对不同颜色的影响。此外,我们还拥有一个策划目录,其中包含了与各类别相对应的预设。

为图像提供预设建议

随着我们在会员服务中不断添加新预设,这些策划目录亦将逐步更新。为了便于我们随时更新这些列表,并让用户免于更新应用,我们已将这些目录存储在服务器上,并使用 API 对用户提供服务。

该 API 是由 Go 语言编写的微服务,支持移动客户端定期检查更新,从而确保拥有最新版目录。移动客户端可缓存此目录,并仅在新版目录推出时才开始获取。然而,对于在首次尝试此功能之前尚未连接互联网的用户,此方法会为其带来“冷启动”问题,即应用无法接入 API 并下载这些目录。我们决定在发布应用时随附以上目录的默认版来解决这个问题。借此,所有用户便能在任何网络连接状态下使用该功能,而这也与该功能的初始目标相契合。

结果与结论

通过“照片专用”功能,现在可以顺利地使用预设进行编辑。我们认为,若会员无法从所获的新预设中发掘价值,他们的创意实现亦将遭遇阻碍。我们不仅希望帮助更多用户发掘新预设,还希望他们关注与所编辑的图像最相配的预设。

我们将持续优化“照片专用”功能,根据其他图像特征和用户的社区行为(如关注、收藏和转发)来提供推荐。此外,我们也希望为此类推荐提供更实用的背景信息,同时鼓励我们的社区创作者互相能够积极发掘与激励。

在畅想此功能未来愿景的同时,我们也在反思。我们意识到,若没有 TensorFlow Lite 与 ML Kit,此功能以及 VSCO 的设备端机器学习能力都将无法实现。我们乐于未来在此领域继续投入更多的人力和物力,并利用该技术创造更多的功能。

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

    关注

    26

    文章

    1224

    浏览量

    55807
  • 机器学习
    +关注

    关注

    66

    文章

    8113

    浏览量

    130546

原文标题:为图像提供预设建议:构建 VSCO 中的“照片专用”功能

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

收藏 人收藏

    评论

    相关推荐

    IC上电复位和关断功能建议

    电子发烧友网站提供《IC上电复位和关断功能建议.pdf》资料免费下载
    发表于 11-23 14:36 5次下载
    IC上电复位和关断<b class='flag-5'>功能</b><b class='flag-5'>建议</b>

    重磅!OpenAI在ChatGPT内推出语言和图像功能

    语音和图像为用户在生活中使用 ChatGPT 提供了更多方式。旅行时,拍下地标性建筑的照片,然后就它的有趣之处进行实时对话。当您在家时,拍下冰箱和储藏室的照片,找出晚餐的菜谱(并提出后
    的头像 发表于 09-26 17:05 420次阅读
    重磅!OpenAI在ChatGPT内推出语言和<b class='flag-5'>图像</b><b class='flag-5'>功能</b>

    使用GCC编译器1.0版在DS-5构建裸机应用程序

    DS-5 提供“ Launnchpad ” 编译器 。 然而, 我们建议您使用 Arm 编译器在 DS-5 构建光金属应用程序。 此教程显示您如何设置您的项目使用 Cortex-
    发表于 08-24 07:36

    更改嵌入图像的异常级别和安全状态

    本指南是一系列相关指南中的第四本: •构建您的第一个嵌入式图像 •将输出重新定向到UART •创建事件驱动的嵌入式图像 •更改嵌入图像的异
    发表于 08-08 07:09

    如何在不构建专用硬件的情况下制作充电宝原型

    能否在不构建专用硬件的情况下制作充电宝应用原型?
    的头像 发表于 07-10 09:30 325次阅读
    如何在不<b class='flag-5'>构建</b><b class='flag-5'>专用</b>硬件的情况下制作充电宝原型

    具有智能功能的门铃构建

    电子发烧友网站提供《具有智能功能的门铃构建.zip》资料免费下载
    发表于 07-06 14:31 0次下载
    具有智能<b class='flag-5'>功能</b>的门铃<b class='flag-5'>构建</b>

    基于ADE20K构建沉浸式区域图像分割

    电子发烧友网站提供《基于ADE20K构建沉浸式区域图像分割.zip》资料免费下载
    发表于 06-29 09:08 0次下载
    基于ADE20K<b class='flag-5'>构建</b>沉浸式区域<b class='flag-5'>图像</b>分割

    Android 13.0.0.1.2.0.doc文件上的Android用户指南i.MX 8 QM mek构建了android图像,没有信号和接口的原因?

    我按照 Android 13.0.0.1.2.0.doc 文件上的 Android 用户指南 i.MX 8 QM mek 构建了 android 图像。它是成功的。然后我刷新了
    发表于 06-12 08:49

    怎么做才能通过Jetson Xavier AGX构建android图像呢?

    我正在使用 Nvidia 的 Jetson Xavier AGX 按照“android 用户指南” imx8 qm Mek 套件构建 android 图像(android 13)。当我运行命令
    发表于 06-07 08:58

    如何使用pycoral、tensorflow-lite和edgetpu构建核心最小图像

    如果您能告诉我们如何使用 pycoral、tensorflow-lite 和 edgetpu 构建核心最小图像,我们将不胜感激。
    发表于 06-05 10:53

    Nodejs应用编译构建提速建议

    在编辑机上每次的构建环境都是全新的,完成一次构建比本地需要多一些步骤
    的头像 发表于 06-01 09:22 346次阅读

    Image Converter Plus提供了您需要的所有功能

    ImageConverter Plus 不会让需要复杂功能和大文件支持的专家用户失望。例如,您可以一次对多张照片进行一系列更改。该程序还允许您修改图像元数据或通过 FTP上传照片目录和
    的头像 发表于 05-25 15:43 419次阅读

    骁龙支持Android 14全新Ultra HDR格式照片拍摄

    在2023年Google I/O大会上,Android为照片拍摄引入了一个新的图像格式——Ultra HDR。Android 14中将支持该照片格式,这一格式能够以向后兼容的JPEG格式拍摄
    的头像 发表于 05-16 09:37 336次阅读

    i.MX8M Plus Android构建映像的生产闪存怎么解决?

    我们正在寻求为生产基于 i.MX8M Plus 的产品准备好一切,我遇到了一个障碍,有人可能会提供帮助。目前的计划是在将 eMMC 放到电路板上之前对其进行闪存。这个过程需要一个完整的芯片图像,我
    发表于 05-10 07:51

    如何在yocto linux操作系统上i.MX8 qm调出4k Dart BCON Camera?

    我正在使用带有 yocto linux 的 i.MX8 qm 板。 我已经闪现了 NXP 提供的预构建 yocto 图像(imx-image-multimedia-imx8qmmek.wic.zst) 我已经连接了 4k Dar
    发表于 05-06 08:09