小米開源框架mace android案例調試

小米開源框架mace android案例調試

1. 準備工作

編譯環境準備:請參照小米官方的文檔:

https://mace.readthedocs.io/en/latest/installation/env_requirement.html

Required dependencies

SoftwareInstallation commandTested version
Python 2.7
Bazelbazel installation guide0.13.0
CMakeapt-get install cmake>= 3.11.3
Jinja2pip install -I jinja2==2.102.10
PyYamlpip install -I pyyaml==3.123.12.0
shpip install -I sh==1.12.141.12.14

Optional dependencies

SoftwareInstallation commandRemark
Android NDKNDK installation guideRequired by Android build, r15b, r15c, r16b
ADBapt-get install android-tools-adbRequired by Android run, >= 1.0.32
TensorFlowpip install -I tensorflow==1.6.0Required by TensorFlow model
Dockerdocker installation guideRequired by docker mode for Caffe model
Numpypip install -I numpy==1.14.0Required by model validation
Scipypip install -I scipy==1.0.0Required by model validation
FileLockpip install -I filelock==3.0.0Required by Android run
2. 克隆源碼
修改最外層mace文件夾 爲mace_new


3. 克隆mace model zoo

附上 mace-models與mace的源碼,直接獲取是最新的代碼,可能後期與本篇博客的教程不一致,這裏放上我調試時用的源碼:
https://download.csdn.net/download/qq_27063119/10537143

4. 編譯mace library
cd mace_new
bash tools/build-standalone-lib.sh




5.如果想要保護模型不被盜用,可以在轉化靜態庫時將模型轉化爲C++代碼,轉化有兩種方式
(1)將模型圖轉換爲代碼,將模型權重轉換爲具有以下模型配置的文件
model_graph_format: codemodel_data_format: file

(2)將模型圖和模型權重轉換爲下面的模型配置代碼
model_graph_format: codemodel_data_format: code
修改對應的yml文件


以使用mobilenet-v2爲例,修改mace-models/mobilenet-v2 文件夾下的mobilenet-v2.yml和mobilenet-v2-host.yml


model_graph_format: filemodel_data_format: file
修改爲
model_graph_format: codemodel_data_format: code
並保存


6.將模型轉化爲mace格式的模型
python tools/converter.py convert --config=/media/root/B/python/mace_0711/mace-models/mobilenet-v2/mobilenet-v2.yml



轉化後會生成以下文件,其中include,lib,mobilenet-v2是需要用的


使用android studio打開 mace中的安卓項目


首先選擇自己的ndk路徑


選擇好後,在android項目中的macelibrary/src/main/cpp 文件夾下
-- 新建include/mace/public文件夾
-- 新建lib文件夾
-- 新建model文件夾
如圖所示:

接着:
(1)將builds/include/mace/public/ 下的mace.h 以及 mace_runtime.h拷貝進去macelibrary/src/main/cpp/include/mace/public中
(2)將builds/mobilenet-v2/include/mace/public/ 下的mace_engine_factory.h 以及 mobilenet_v2.h拷貝至 macelibrary/src/main/cpp/include/mace/public中
(3)將builds/mobilenet-v2/model 下的mobilenet-v2.a 拷貝至 macelibrary/src/main/cpp/model中,並修改mobilenet-v2.a 爲 mobilenet.a
(4)將builds/lib下的文件都拷貝至macelibrary/src/main/cpp/lib中
(5)修改macelibrary/src/main/cpp/include/mace/public下所有.h文件中引入的文件地址
以mace_engine_factory.h爲例:修改成下圖所示,mace_runtime.h,mobilenet_v2.h文件內都要改

全部改完後,由於這個測試的app默認是使用mobilenet_v1的模型的,所以我們更改一下代碼讓他使用mobilenet_v2,修改com.xiaomi.mace.demo.result下的InitData.java文件中的
model = MODELS[0];
改爲:
model = MODELS[1];
即可

run,手機上安裝後同意授權相機等,效果如圖所示:


測試手機爲:
小米6
高通驍龍835處理器,6G運行內存
mobilenet_v2的cpu運行速度平均爲:1張圖片/65ms
mobilenet_v2的gpu運行速度平均爲:1張圖片/20ms
很明顯,檢測的速度非常快,小米的mace網絡調優很明顯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章