微信小程序运行最新 TensorFlowJS 的工程解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
deepkolos
V2EX    分享创造

微信小程序运行最新 TensorFlowJS 的工程解决方案

  •  
  •   deepkolos
    deepkolos 2021-05-17 22:59:11 +08:00 2931 次点击
    这是一个创建于 1674 天前的主题,其中的信息可能已经有所发展或是发生改变。

    wxmp-tensorflow

    微信小程序下运行最新TensorFlowJS(3.6)的工程解决方案,有以下特点

    1. 运行 balzeface 安卓 √,IOS √
    2. 运行 face-landmarks 安卓 √,IOS √
    3. 集成 tfjsPlugin,方便使用,无需二次引用 √
    4. 支持 wasm backend √ 给 tfjs 提的PR已合并
    5. 运行 posenet (例子是 mobilenet 0.50 stride16) √
    6. custom tfjs 减少包体积 blazeface 例子 √
    7. 运行 handpose √

    性能数据

    机器 模型 FPS Backend
    MI 8 BlazeFace 20 WebGL
    MI 8 BlazeFace 17 WASM
    IPhone 7 BlazeFace 12 WebGL
    IPhone 7 BlazeFace 1 WASM

    注:WASM 为非 SIMD 版,安卓微信小程序运行 SIMD WASM 报错 虽说能跑,但是微信 IOS 上面问题多多,建议能 webview 还是 webview,性能好,gl 起码符合标准也无内存问题

    问题

    1. ios async 版本会卡 async await,所以改为 sync 版本,并且其他用到 async await 也可能出现( IOS 下 Promise 是 setTimeout 模拟的,见小程序 Javascript 支持情况目前 ios 下比较容易卡初始化
    2. wasm 只有在华为手机上比 webgl 好 (2.7 测试的结果)

    优化经验

    1. 使用 FrameAdapter 动态跳帧处理
    2. 正式处理数据前,预热处理一个空白帧,把所用到的 shader 编译
    3. 利用 profile 生成 custom tfjs 优化包大小
    4. 微信小程序 cameraFrame 的 ArrayBuffer 是复用的,可能推理完成后,内容就被更新了,所以先绘制背景,再绘制推理结果,另种解法是拿到相机帧时候复制一份(iPhone7 大概 0~5ms, 大部分是 1ms)

    运行

    > pnpm i / npm i / yarn > npm run dev # 使用小程序开发工具打开,替换 appid 为测试 appid,不校验域名 # 使用 custom tfjs 编译,例子是仅仅 blazeface 可用 tf + webgl backend 小程序包从 985KB 下降到 534KB (js 大概下降 234KB) > npm run make-custom > npm run build-custom 

    TODO

    1. 结果 UI 美化
    2. face-api.js
    3. warm up 通用化,根据已注册的 registerKernel 做 warm up

    使用 custom_tfjs 进一步优化包大小

    请参考

    1. [962K -> 347K] TensorflowJS 基于 Runtime 结果的 TreeShaking
    2. https://github.com/mattsoulanille/tfjs_custom_module_demo
    3. https://github.com/deepkolos/tfjs-treeshaking-test

    tfjs-models async 转 sync 方法

    只需要把读取数据部分的 async 方法比如Tensor.array()改为Tensor.arraySync(),或者Tensor.buffer()改为Tensor.bufferSync(),然后把asyncawaitPromise.all等关键字去除,即可

    1 条回复    2021-05-18 13:34:01 +08:00
    terencelau
        1
    terencelau  
       2021-05-18 13:34:01 +08:00   1
    star 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1175 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 17:37 PVG 01:37 LAX 09:37 JFK 12:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86