wxmp-tensorflow
Solusi rekayasa TensorFlow
terbaru yang berjalan di bawah applet WeChat memiliki karakteristik sebagai berikut
- Jalankan balzeface Android √, IOS √
- Jalankan landmark wajah Android √, IOS √
- TfjsPlugin terintegrasi, mudah digunakan, tidak memerlukan referensi sekunder√
- Mendukung backend wasm √ PR yang dikirimkan ke tfjs telah digabungkan
- Jalankan posenet (contoh mobilenet 0.50 stride16) √
- tfjs khusus mengurangi ukuran paket contoh blazeface√
- Jalankan pose tangan √
- Jalankan movenet √
- Jalankan blazepose-tfjs √
Catatan: Paddle.js telah diadaptasi ke mini-program Baidu dan mini-program WeChat, https://github.com/PaddlePaddle/Paddle.js
Data kinerja
mesin | Model | FPS | Bagian belakang |
---|
iPhone 7 | Wajah Blaze | 12 | WebGL |
iPhone 7 | Wajah Blaze | 1 | WASM |
MI 8 | Wajah Blaze | 20 | WebGL |
MI 8 | Wajah Blaze | 17 | WASM |
MI 8 | Tanda Tanah Wajah | 20 | WebGL |
MI 8 | Tanda Tanah Wajah | 10 | WASM |
MI 8 | PoseNet | 20 | WebGL |
MI 8 | PoseNet | 5 | WASM |
MI 8 | Pose Tangan | 14 | WebGL |
MI 8 | Pose Tangan | 1 | WASM |
MI 8 | PindahNet | 14 | WebGL |
MI 8 | PindahNet | 2.5 | WASM |
Catatan: WASM adalah versi non-SIMD. Applet WeChat Android menjalankan SIMD WASM dan melaporkan kesalahan. Meskipun dapat berjalan, ada banyak masalah dengan WeChat dan IOS. gl setidaknya memenuhi standar dan tidak ada masalah memori.
pertanyaan
- Versi ios async akan terjebak dengan async menunggu, sehingga diubah ke versi sinkronisasi, dan penggunaan async menunggu lainnya juga dapat terjadi (Janji di bawah IOS disimulasikan oleh setTimeout, lihat situasi dukungan JavaScript applet). lebih mudah untuk membuat inisialisasi terjebak di bawah ios
- wasm lebih baik dari webgl hanya di ponsel Huawei (hasil tes 2,7)
Pengalaman optimasi
- Gunakan FrameAdapter untuk melewati frame secara dinamis
- Sebelum memproses data secara formal, panaskan terlebih dahulu bingkai kosong dan kompilasi shader yang digunakan.
- Gunakan profil untuk menghasilkan tfj khusus guna mengoptimalkan ukuran paket
- ArrayBuffer dari applet CameraFrame digunakan kembali. Mungkin setelah inferensi selesai, kontennya diperbarui, jadi latar belakangnya digambar terlebih dahulu, lalu hasil inferensi digambar 0~5ms untuk iPhone7, kebanyakan 1ms)
TODO
- Hasil: Beautifikasi UI yang dilakukan menunjukkan tampilan normal
- wajah-api.js
- pemanasan digeneralisasikan, pemanasan dilakukan berdasarkan registerKernel yang terdaftar
berlari
> 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
Gunakan custom_tfjs untuk lebih mengoptimalkan ukuran paket
Silakan merujuk ke
- [962K -> 347K] TensorflowJS TreeShaking berdasarkan hasil Runtime
- https://github.com/mattsoulanille/tfjs_custom_module_demo
- https://github.com/deepkolos/tfjs-treeshaking-test
tfjs-models async ke metode sinkronisasi
Anda hanya perlu mengubah metode async dalam membaca data, seperti Tensor.array()
menjadi Tensor.arraySync()
, atau Tensor.buffer()
menjadi Tensor.bufferSync()
, lalu mengubah async
dan await
, Promise.all
dan kata kunci lain hapus saja
sponsor
Jika proyek ini bermanfaat bagi Anda atau memiliki kebutuhan adaptasi, silakan memberi tip.