wxmp-тензорный поток
Новейшее инженерное решение TensorFlow
работающее под управлением апплета WeChat, имеет следующие характеристики:
- Запустите balzeface Android √, IOS √
- Запуск ориентиров лица Android √, IOS √
- Встроенный tfjsPlugin, простой в использовании, нет необходимости во вторичной ссылке√
- Поддержка бэкэнда Wasm √ PR, отправленный в tfjs, был объединен.
- Запустите Posenet (пример: mobilenet 0,50 шага 16) √
- Пользовательский tfjs уменьшает размер пакета, пример blazeface√
- Запустить позу руки √
- Запустите Movenet √
- Запустите blazepose-tfjs √
Примечание. Paddle.js адаптирован для мини-программ Baidu и мини-программ WeChat, https://github.com/PaddlePaddle/Paddle.js.
Данные о производительности
машина | Модель | ФПС | Бэкэнд |
---|
айфон 7 | BlazeFace | 12 | ВебГЛ |
айфон 7 | BlazeFace | 1 | ВАСМ |
МИ 8 | BlazeFace | 20 | ВебГЛ |
МИ 8 | BlazeFace | 17 | ВАСМ |
МИ 8 | ЛицоЗемлиЗнаки | 20 | ВебГЛ |
МИ 8 | ЛицоЗемлиЗнаки | 10 | ВАСМ |
МИ 8 | ПосеНет | 20 | ВебГЛ |
МИ 8 | ПосеНет | 5 | ВАСМ |
МИ 8 | РукаПоза | 14 | ВебГЛ |
МИ 8 | РукаПоза | 1 | ВАСМ |
МИ 8 | МовеНет | 14 | ВебГЛ |
МИ 8 | МовеНет | 2,5 | ВАСМ |
Примечание. WASM не поддерживает SIMD. Апплет Android WeChat запускает SIMD WASM и сообщает об ошибке. Хотя он может работать, существует множество проблем с WeChat и IOS. Рекомендуется использовать веб-просмотр или веб-просмотр. Производительность хорошая. gl по крайней мере соответствует стандартам и проблем с памятью нет.
вопрос
- Асинхронная версия iOS будет привязана к асинхронному ожиданию, поэтому она будет изменена на синхронизированную версию, а также могут возникнуть другие варианты использования асинхронного ожидания (Promise под IOS моделируется с помощью setTimeout, см . ситуацию с поддержкой JavaScript апплета). легче застрять при инициализации под iOS
- Wasm лучше, чем webgl, только на мобильных телефонах Huawei (результаты теста 2.7)
Опыт оптимизации
- Используйте FrameAdapter для динамического пропуска кадров.
- Перед формальной обработкой данных предварительно нагрейте пустой кадр и скомпилируйте используемый шейдер.
- Используйте профиль для создания пользовательских tfjs для оптимизации размера пакета.
- ArrayBuffer из апплета WeChat cameraFrame используется повторно. Возможно, после завершения вывода содержимое обновляется, поэтому сначала рисуется фон, а затем рисуется результат вывода. Другое решение — сделать копию при получении кадра камеры (примерно). 0~5 мс для iPhone7, в основном 1 мс)
TODO
- Результат: завершенное улучшение пользовательского интерфейса показывает нормальное отображение.
- лицо-api.js
- прогрев обобщенный, прогрев осуществляется на основе зарегистрированного реестра ядра
бегать
> 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
Используйте custom_tfjs для дальнейшей оптимизации размера пакета.
Пожалуйста, обратитесь к
- [962K -> 347K] TensorflowJS TreeShaking на основе результатов выполнения
- https://github.com/mattsoulanille/tfjs_custom_module_demo
- https://github.com/deepkolos/tfjs-treeshaking-test
tfjs-models асинхронный метод синхронизации
Вам нужно всего лишь изменить асинхронный метод чтения данных, например Tensor.array()
на Tensor.arraySync()
или Tensor.buffer()
на Tensor.bufferSync()
, а затем изменить async
и await
, Promise.all
и другие ключевые слова Просто удалите его
спонсор
Если проект полезен для вас или нуждается в адаптации, оставьте чаевые.