做者:十歲的小男孩html
QQ:929994365java
心之安處便是吾鄉。python
本文主要的方向是終端移植。其主要又分兩個小方向,理論和實踐,即模型優化和模型移植。下文爲前期寫的,較爲潦草,如今基本框架思路已經搭起來了,如今沒有時間,後期會更新完善。c++
-----------------------------------------------------------------------------後期更新-------------------------------------------------------------------------------------------網絡
本文對MACE當前的學習作一個總結,重心放在數據流的邏輯過程。首先經過對模型移植針對的問題解答爲何咱們須要學習mace,和咱們在學習mace過程當中遇到的最主要的矛盾,以及咱們如何解決這些矛盾。對mace的學習主要分兩個重點:框架
1、模型優化機器學習
模型優化是模型移植的重心,最主要矛盾在於資源和性能的平衡,有限的資源狀況下使得性能最大化。如今的模型都在電腦端進行訓練,資源充足性能較好,可是在終端資源較少運算速率較低的前提下性能不能損失太多,這須要平衡。這個矛盾兩種解決方法:工具
第一種:模型放在服務端,經過在終端獲取數據和展現數據,模型放在服務端進行運算,這樣獲得的性能較好,可是須要網絡傳輸,浪費時間。性能
第二種:將模型直接在終端運行,終端資源cpu/gpu,gpu運算較快,可是電腦端的模型如何在終端使用並且可以使用gpu加速計算?答案是小米mace,TensorFlow Lite,百度的paddle-mobile,還有騰訊的ncnn。因爲mace可以採用gpu加速計算和社區活躍度較高,因此本文主要學習mace,其餘的框架了解不深。學習
模型壓縮優化這是重心中的重心,要掌握更多的機器學習深度學習的概念知識,如下連接是我當前掌握壓縮優化的一些信息,這在後期重點學習。
2、模型工程化
模型工程的重心在於掌握工程開發經驗,熟練應用Java,Android和c++語言涉及NDK編譯。如下三個連接是mace學習過程的分步總結,針對mace官方提供的mobilnet v2例子進行學習。
如下的內容根據個人理解從數據流的角度串下整個過程。首先咱們採用python語言構建模型model.pb,進行模型的壓縮和優化後,將model.pb打包在yaml文件中配置,這一步是上面連接的第二步,主要講解了如何撰寫yaml文件。以後在mace環境下進行編譯生成靜態庫和頭文件庫,實際上是轉換成了c++文件了,這步完成後就和mace沒有什麼關係了,接下來的難題是這些生成的庫如何在工程中使用,這個工做是上面連接的第三步,重點是NDK編譯,在c++端實如今java聲明的native方法。
文中介紹有可能侷限我的的實踐以及理解水平,存在不正確或不合理的地方,歡迎討論。