模型部署到移动端_使用 TFLite 在移动设备上优化与部署风格转化模型

2023-11-17

以下文章来源于TensorFlow,作者Google

风格转化 (Style Transfer) 是一种优化技术,用于采集两张图像,一张内容图像(如建筑物),一张风格图像(如著名画家的作品),并将其融合交织在一起,使输出图像看起来就像是以参考风格图像中的风格“画出”了内容图像。

  • 风格转化https://tensorflow.google.cn/tutorials/generative/style_transfer

现在,我们很高兴和大家分享一个用 TensorFlow Lite 针对移动设备优化的预训练风格转化模型,以及在 Android 和 iOS 上的示例应用,可用来为任何图像转换风格。

  • 模型https://tensorflow.google.cn/lite/models/style_transfer/overview
  • Androidhttps://github.com/tensorflow/examples/tree/master/lite/examples/style_transfer/android
  • iOShttps://github.com/tensorflow/examples/tree/master/lite/examples/style_transfer/ios

本文中,我们将向您介绍如何优化大型 TensorFlow 模型以进行移动部署,以及如何通过 TensorFlow Lite 在移动应用中高效使用该模型。我们希望您可在您的应用中使用我们的预训练风格转化模型,或受此启发,创建更加有趣的应用。

背景

风格转化的示例

风格转化在《一种艺术风格的神经网络算法》(A Neural Algorithm of Artistic Style) 中首次发布。但是初始技术的计算量相当大,即使采用高端 GPU,也需要几秒钟才能转换一张图像的风格。接下来几位作者的工作(如:fast-style-transfer)展示了如何加速风格转化。

  • 一种艺术风格的神经网络算法https://arxiv.org/abs/1508.06576
  • fast-style-transferhttps://github.com/lengstrom/fast-style-transfer

评估几种模型架构后,我们决定一开始先在样本应用中采用来自 Magenta 的预训练的自由风格转化模型。该模型将内容和风格图像作为输入,然后使用前馈神经网络生成风格化的输出图像。与 Gatys 论文中的技术相比,此模型的风格转化速度明显提升,但模型参数量仍然较大 (44 MB),且速度仍然偏慢(Pixel 4 CPU 上为 2340 毫秒)。因此,我们需要继续优化模型,在移动应用中也适合使用。本文将会分享我们的优化经验,并提供一些资源供您在工作中使用。

  • Magentahttps://github.com/tensorflow/magenta/tree/master/magenta/models/arbitrary_image_stylization
  • Gatys 论文https://arxiv.org/abs/1508.06576

优化模型架构

风格转化模型的结构

Magenta 的自由风格转化模型由两个子网组成:

  • 风格预测网络:将风格图像转换为风格嵌入矢量。
  • 风格转换网络:对内容图像应用风格嵌入矢量,以生成风格化的图像。

Magenta 的风格预测网络采用的是 InceptionV3 骨干网,我们可以将其替换为 MobileNetV2 骨干网,以此来对移动设备进行优化。风格转换网络包含几个卷积层。我们运用 MobileNet (https://arxiv.org/abs/1704.04861) 中宽度缩放因子的思路,将所有卷积层的输出通道数缩小为原来的 1/4。

然后,我们必须决定如何训练模型。我们试验了几种方案:从头开始训练移动模型,或者从预训练的 Magenta 模型中提取参数。我们发现:在固定 MobileNetV2 宽度的同时,从头开始优化其他参数得到的结果最好。

这样能达到与原模型相近的效果,而模型的大小显著缩小,速度也大幅提升。

* 基于 Pixel 4 CPU 的 2 线程 TensorFlow Lite 的基准测试,2020 年 4 月。

* 请参阅此论文 (https://arxiv.org/abs/1705.06830),了解此风格转化模型中所用的损失函数定义的详情。

量化

敲定模型架构后,我们使用 TensorFlow 模型优化工具包,通过量化来进一步缩小移动模型。量化是适用于大多数 TensorFlow 模型移动部署的一项重要技术,在本例中,它可将模型大小缩小为原来的 1/4,在大幅加速模型推理的同时,对质量的影响很小。

  • 量化https://tensorflow.google.cn/lite/performance/model_optimization#model_quantization

在 TensorFlow 提供的多个量化选项中,我们决定使用训练后整型量化,因其能做到简单性和模型质量二者兼顾。在将 TensorFlow 模型转换为 TensorFlow Lite 时,我们只需提供一小部分训练数据集即可。

  • 训练后整型量化https://tensorflow.google.cn/lite/performance/post_training_integer_quant

与初始模型相比,量化后,我们的模型大小不止缩小了一个量级,速度也不止提升了一个量级,同时将风格和内容损失程度维持在同等水平。

* 基于 Pixel 4 CPU 的 2 线程 TensorFlow Lite 的基准测试,2020 年 4 月。

移动部署

我们通过一款 Android 应用来展示如何使用风格转化模型。此应用通过采集一张风格图像与一张内容图像,输出将输入图像的风格和内容相融合的图像。

通过手机摄像头的 Camera2 API 拍摄内容图像后,应用提供了一系列名画作为风格图像的可选项。如上所述,通过两个步骤将风格应用于内容图像。首先,我们利用风格预测网络将风格提取为浮点数组。然后,我们利用风格转换网络对内容图像应用此风格。

  • Camera2 API https://developer.android.com/reference/android/hardware/camera2/package-summary

为了在 CPU 和 GPU 上都能达到最佳性能,我们创建了针对每种芯片进行了优化的两组 TensorFlow Lite 模型。我们用 int8 量化模型进行 CPU 推理,用 float16 量化模型进行 GPU 推理。GPU 通常能比 CPU 达到更好的性能,但 GPU 目前仅支持浮点模型,获得的模型 size 比经 int8 量化的模型稍大。以下是 int8 和 float16 模型的表现:

* 基于 Pixel 4 的 TensorFlow Lite 基准测试,2020 年 4 月。

  • int8 量化https://tensorflow.google.cn/lite/performance/post_training_integer_quant
  • float16 量化 https://tensorflow.google.cn/lite/performance/post_training_float16_quant

另一种可能提升性能的方式是:缓存风格预测网络的结果,如果您的移动应用仅计划支持一组固定的风格图像。这将进一步缩小您的应用,无需再包含风格预测网络(占总网络大小的 91%)。这是此流程分为两个模型,而不仅仅是一个模型的主要原因。

我们在 GitHub 中提供了示例,应用风格的主类为 StyleTransferModelExecutor。

  • GitHubhttps://github.com/tensorflow/examples/tree/master/lite/examples/style_transfer/android
  • StyleTransferModelExecutorhttps://github.com/tensorflow/examples/blob/master/lite/examples/style_transfer/android/app/src/main/java/org/tensorflow/lite/examples/styletransfer/StyleTransferModelExecutor.kt

因为计算量庞大,我们不会对界面线程运行风格转化,这一点很重要。我们改为使用 AndroidX 中的 ViewModel 类和 Coroutine 来对专用的后台线程运行风格转化,并轻松更新视图。此外,在使用 GPU delegate 运行模型时,TF Lite 解释器初始化、GPU 代理初始化和推理必须在同一线程上运行。

  • GPU delegatehttps://tensorflow.google.cn/lite/performance/gpu

生产中的风格转化

Google Arts & Culture 应用中最近添加了 Art Transfer,将利用 TensorFlow Lite 在设备上运行风格转化。所用模型与上述模型相似,但相较于速度和模型大小,该模型更注重质量。对生产环境中的风格转化模型有兴趣的话,您可以试用一下该应用。

  • Art Transferhttps://www.blog.google/outreach-initiatives/arts-culture/transform-your-photo-style-iconic-artist/

轮到您了

如果要在自己的应用中添加 Style Transfer,可以来下载移动示例模型。TensorFlow Hub 中提供了 float16(预测网络、转换网络)和 int8 量化版本(预测网络、转换网络)两种模型版本。我们迫不及待地想要看看您的作品!不要忘了与我们分享您的创作。

资源

在设备上运行机器学习模型具有以下优势:保护用户数据隐私,且功能启用时延迟较低。

本文中,我们已经展示了如何将 TensorFlow 模型直接转换为 TensorFlow Lite 模型,但这可能只是迈出的第一步。若要获得良好的性能,开发者应通过量化来优化模型,并权衡好模型质量、模型大小和推理时间之间的关系。

我们通过以下资源来创建模型,也许也适用于您的设备端机器学习用例:

  • Magenta 模型库 (https://magenta.tensorflow.google.cn/)
    Magenta 是一个由 TensorFlow 支持的开源项目,使用机器学习来创作音乐和绘画作品。许多模型均可转换为 TensorFlow Lite,如风格转化模型。
  • TensorFlow 模型优化工具包 (https://tensorflow.google.cn/model_optimization)
    模型优化工具包提供多种方法来优化模型,包括量化和剪枝。
  • TensorFlow Lite delegate (https://tensorflow.google.cn/lite/performance/delegates)
    TensorFlow Lite 可利用设备上提供的多种不同类型的硬件加速器(包括 GPU 和 DSP)来加速模型推理。

如果您想详细了解 TensorFlow 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

  • 移动示例模型https://github.com/tensorflow/examples/tree/master/lite/examples/style_transfer/android
  • TensorFlow Hub http://tfhub.dev
  • float16
    • 预测网络https://tfhub.dev/google/lite-model/magenta/arbitrary-image-stylization-v1-256/fp16/prediction/1
    • 转换网络https://tfhub.dev/google/lite-model/magenta/arbitrary-image-stylization-v1-256/fp16/transfer/1
  • int8
    • 预测网络https://tfhub.dev/google/lite-model/magenta/arbitrary-image-stylization-v1-256/int8/prediction/1
    • 转换网络https://tfhub.dev/google/lite-model/magenta/arbitrary-image-stylization-v1-256/int8/transfer/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型部署到移动端_使用 TFLite 在移动设备上优化与部署风格转化模型 的相关文章

随机推荐

  • 快手通过标签添加你什么意思_你知道快手标签是什么吗?钓号网告诉你

    你知道快手标签是什么吗 钓号网告诉你 通俗来讲 标签就是你想做的领域的标签 比如说 当你喜欢美食 经常点赞评论美食的视频 系统就会给你贴上美食的标签 这个我们是看不到的 是记录在后台的 标签的作用在于可以帮助系统把视频分发给有相同标签的人
  • select实现串口阻塞读取数据

    文章目录 前言 一 包含串口编程必要的头文件 二 串口初始化 三 串口写数据 四 串口阻塞读取数据 五 RS485与RS232编程和TTL的区别 六 完整代码 前言 串口编程分为这么几类 lt 1 gt 普通的TTL 一对一通信 lt 2
  • SQL中的DQL(数据查询)语言

    SQL语句分类 通常分为五类 DDL 数据定义语言 create alter drop等 DQL 数据查询语言 select等 DML 数据操纵语言 insert delete update等 TCL 事务操纵语言 commit rollb
  • 我的创作纪念日---Look back on the past year of hard work

    哈 今天在CSDN的站内信收到了通知 为了纪念我在CSDN度过的日日夜夜 故简单写点东西记录一下 分享给可能和我有相同经历的计算机专业的大学生 以此来勉励大家 缘起 嗨 大家好 我是一个内向的计算机小白 在 CSDN 已经度过了 100 多
  • IJKPlayer 编译及运行Demo 教程(详细)

    IJKPlayer 编译及运行Demo 教程 编译环境准备 1 Ubuntu安装 2 工具安装 安装JDK SDK NDK 1 安装JDK 2 安装SDK 3 安装NDK 下载ijkplayer及修改其中配置 编译 android stud
  • [培训-DSP快速入门-8]:C54x DSP汇编语言之寻址方式

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119023151 目录 第1章
  • Java Timer定时器schedule()函数

    TimerTask task new TimerTask Override public void run 逻辑处理 Timer timer new Timer timer schedule task 0 此处delay为0表示没有延迟 立
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • Android列表组件ListView子项的点击事件与子项中组件的点击事件

    点击ListView子项时进行相关的逻辑操作 为ListView组件添加子项点击事件 设置ListView子项的点击事件 testLv setOnItemClickListener new AdapterView OnItemClickLi
  • React 组件根据数据动态渲染

    数据驱动的UI界面 import React from react import as componentLib from components index import dataMap from data dataMap function
  • Error: Cannot find module ‘timers/promises‘

    这个错误很要命 他会导致你本机所有的npm 命令全部报错 首先 这个错误是因为 npm 与 node版本不匹配导致的 最简单的办法就是 查一下你安装的这个npm 的版本适配那个版本的 node 然后将本地的node删除 控制面板写在node
  • 月满中秋夜|中秋和 Jina AI 一起过

    Jina AI 祝您中秋快乐 用开源社区的方式打开别样中秋节 Jina AI 社区准备了两个小任务和精美周边礼物 等你来挑战 活动时间 即日起 9 13号中午12 00 参与方式 Step 1 到 Jina 全家桶的 GitHub 页面 给
  • 使用虚拟机VMware Workstation安装ubuntu22.04

    下载准备 VMwareWorkstation 地址 Download VMware Workstation Pro 我是在windows系统安装 所以选择这个下载按钮 试用版可以在网上找到对应版本的密钥进行破解 一般都不影响使用 iso镜像
  • Warning: Ignoring WAYLAND_DISPLAY on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.Ca

    一 问题描述 centos stream9 安装了多个 qt creator 版本 Qt5 14 1 qt creator 9 0 qt creator 6 0 在调试platforminputcontexts 解决中文无法输入时 在修改
  • 奇迹暖暖服务器不稳定,奇迹暖暖怎么换服务器

    剑雨江湖6月15日服务器互通公告 合服充值大返利 剑雨江湖 6月15日将进行部分服务器互通操作 为了避免不必要的损失 玩家请关注官方公告 详细的 剑雨江湖 15日服务器互通公告 一起来看 服务器级战争爆发 热血三国2 染血战斗檄文呈上 热血
  • lwip接收文件 stm32_LWIP移植文件介绍

    在介绍文件之前首先介绍一下DMA描述符 stm32以太网模块接收 发送FIFO和内存之间的以太网传输是通过以太网DMA使用DMA描述符完成的 一共有两个描述符列表 一个用于接收 一个用于发送 两个列表的基址分别写入ETH DMARDLAR
  • iOS16新特性及开发适配

    一 新特性 iOS 16 满载全新的个性化功能 更具深度的智能技术 以及更多无缝的沟通与共享方式 让 iPhone 的体验更进一步 详细的系统新特性请查看 Apple 发布iOS16预览 中文版 二 开发者适配 IDE环境相关升级 Xcod
  • java: 无法从静态上下文中引用非静态 方法

    Java中静态上下文中无法引用非静态变量的解决办法 一 为什么不能引用 今天编写代码遇到 non static variable mainframe cannot be referenced from a static context 经过
  • 如何将多张图片合成mp4视频格式,并加入背景音乐...

    阅读全文 实现的思路 将准备好的图片通过opencv读取出来 并将其设置好帧数等参数后合成为无声视频 最后通过moviepy编辑视频将背景音乐加入到视频中 开始之前还是需要说明一下非标准库的来源 因为有些库的名称和需要导入模块的名称不一定就
  • 模型部署到移动端_使用 TFLite 在移动设备上优化与部署风格转化模型

    以下文章来源于TensorFlow 作者Google 风格转化 Style Transfer 是一种优化技术 用于采集两张图像 一张内容图像 如建筑物 一张风格图像 如著名画家的作品 并将其融合交织在一起 使输出图像看起来就像是以参考风格图