专栏首页大龄程序员的人工智能之路TensorFlow.js 微信小程序插件开始支持模型缓存

TensorFlow.js 微信小程序插件开始支持模型缓存

通常情况下,微信小程序追求的是短小精悍,即开即用,用完即走,适用于一些简单的应用场景。然而,随着微信小程序开放能力的提高,人们发现用微信小程序可以实现越来越多的功能,小程序也越来越复杂,越来越庞大起来。这个可以从小程序的大小限制的变化看出,最开始小程序的大小限制为1M,后来限制为2M,最新微信又给小程序提供了分包加载机制,开发者将小程序划分成不同的子包,用户在使用时按需进行加载,所有分包大小限制提高到8M。

虽然小程序的大小限制已经大大提升,但对于小程序开发者而言,仍然捉襟见肘。随便几个图片资源、js库就可能导致小程序超重,尤其对于人工智能小程序而言,更是如此。现在的深度学习模型,动辄几十M,多则一两百M。这个时候开发人员就需要进行取舍,选择那些模型规模小,但精度不那么高的模型。比如图片分类,我们就不要选择Inception V3或ResNet之类的超大规模模型,而是选择针对移动设备优化的MobileNet,也能取得不错的效果。

不过即使是MobileNet,其模型大小也有好几M,对于精简小程序大小仍是一个很大的负担。一种解决方案是从网络加载模型,不增加小程序的体积,但这并不是一个完美的解决方案,毕竟每次推导都需要从网络下载模型,会有一定的网络延迟。在前端开发中,为了保持系统的流畅,通常会采用一些缓存技巧来避免每次从网络加载图片、JS等文件。那能否将模型也作为资源缓存起来呢?

Google团队显然也意识到了这种需求,先是在TensorFlow.js中增加了对tfjs模型缓存的支持。最近,TensorFlow.js 微信小程序插件也得到了更新,支持微信小程序模型缓存。

模型缓存利用了微信小程序的storage接口,需要注意微信小程序对storage的限制:同一个微信用户,同一个小程序 storage 上限为 10MB。storage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据;不同小程序之间也无法互相读写数据。所以我们只能选用小于10M的模型。

启用模型缓存也非常简单,步骤如下:

  1. 修改app.json文件,将tfjsPlugin的版本修改为0.0.8.
"plugins": {
  "tfjsPlugin": {
    "version": "0.0.8",
    "provider": "wx6afed118d9e81df9"
  }
}

  1. 在app.js中提供localStorageHandler函数.
var fetchWechat = require('fetch-wechat');
var tf = require('@tensorflow/tfjs-core');
var plugin = requirePlugin('tfjsPlugin');
//app.js
App({
  // expose localStorage handler
  globalData: {localStorageIO: plugin.localStorageIO},
  ...
});

  1. 在模型加载时加入localStorageHandler逻辑。
const LOCAL_STORAGE_KEY = 'mobilenet_model';
export class MobileNet {
  private model: tfc.GraphModel;
  constructor() { }

  async load() {

    const localStorageHandler = getApp().globalData.localStorageIO(LOCAL_STORAGE_KEY);
    try {
      this.model = await tfc.loadGraphModel(localStorageHandler);
    } catch (e) {
      this.model =
        await tfc.loadGraphModel(MODEL_URL);
      this.model.save(localStorageHandler);
    }
  }

和浏览器缓存机制有点不同的是,只有在代码包被清理的时候本地缓存才会被清理。如果需要处理缓存,可以通过 wx.setStorage/wx.setStorageSync、wx.getStorage/wx.getStorageSync、wx.clearStorage/wx.clearStorageSync,wx.removeStorage/wx.removeStorageSync 对本地缓存进行读写和清理。

另外需要注意的是,当前tfjs模型托管在tfhub上,需要访问外国网站访问。项目中的说明文件也提及了这个问题,给出了解决方案,但那是针对以前托管在谷歌云上的模型,建立了中国国内用户可以访问到的镜像。耐心等待吧,相信Google的开发人员会解决tfhub的镜像问题的。

本文分享自微信公众号 - 云水木石(ourpoeticlife),作者:陈正勇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 当微信小程序遇上TensorFlow - 本地缓存模型

    从明天开始,我开始休年假,准备去云南逛一逛,估计这段时间又无法更新公众号,还请大家谅解。

    云水木石
  • 我的第一个caffe Android程序

    在上一篇文章《我的第一个caffe C++程序》中,说明了如何编写一个最简单的caffe C++程序,但我的最终目的是希望在Android app中使用caff...

    云水木石
  • 当微信小程序遇上TensorFlow:小程序实现

    首先要吐槽一下微信小程序开发工具没有Linux版本,为了开发微信小程序,我不得不搬出我的娱乐机iMac。对着硕大的屏幕,看着如蚂蚁般的文字,真心想问一下,那些使...

    云水木石
  • 本周最新 8 款小程序,总有一款是你想要的 | 晓榜 #16

    什么是「附近的小程序」?怎么样才能让自己的小程序出现在附近?「知晓程序」为你做了全面的新能力解读。

    知晓君
  • 来不及了,快上车!腾讯做了款小程序,让你秒变「老司机」| 亲儿子 #30

    你会不会,经常因为撞见了低调奢华的车,却又不知道车型而烦恼?作为一个经验十足(刚上路)的老司机,怎么能允许这种情况发生自己的身上!

    知晓君
  • 小程序再次释放新能力,聪明商家已经用起来了!

    近日,微信再次释放了小程序的能力,上线了小程序线下物料模板,商家可以下载并使用这个模版,引导用户快速地获取小程序,培养用户使用小程序的习惯,提升小程序访问量。

    场景录小程序
  • 小程序再次释放新能力,聪明商家已经用起来了!

    近日,微信再次释放了小程序的能力,上线了小程序线下物料模板,商家可以下载并使用这个模版,引导用户快速地获取小程序,培养用户使用小程序的习惯,提升小程序访问量。

    场景录小程序
  • 惊爆!小程序连发7种新能力,开直播、连Wi-Fi、分包加载……你们想要的都来了!

    昨晚沉寂已久的小程序又在深夜向我们发射了四大新能力 ? 1 升级实时音视频录制及播放能力 小程序拥有实时录制音、视频和播放音视频组件啦! 符合类目要求的小程序自...

    企鹅号小编
  • 期待已久的直播能力开放了!年底之前来波大的

    哈喽艾瑞巴蒂~久违的小程序半夜更新又来啦~! 还是熟悉的时间,还是熟悉的躁动。 这次更新有些丰满,小程序更新更多连接能力—— 1、更多硬件连接功能开放 、小程序...

    企鹅号小编
  • PHP 面试知识梳理

    算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

    wangxl

扫码关注云+社区

领取腾讯云代金券