NCNN源碼編譯及Android Demo跑通

前幾天看到鵝廠放出了NCNN源碼熟丸,去GITHUB上搞下來光羞,一堆CMAKE的腳本和幾段源碼纱兑,還有一個CAFFEMODEL和幾個不知名文件化借。README里是一堆吹牛逼的廢話,對編譯src蓖康、tools和example完全沒有指導(dǎo)意義铐炫∷夂福看來要自己摸索了倒信。

其實編譯src里的東西不難泳梆,這里就寫一下在Linux系統(tǒng)下的源碼編譯過程和Android Demo跑通過程堤结。(Windows用戶可以開啟Linux子系統(tǒng)然后一塊編譯鸭丛,其實我就是受人鄙視的Windows用戶竞穷。??)

需要編譯的目標(biāo)有4個(括號內(nèi)為所需工具):

1. src源碼(cmake make gcc g++)

2. Android/iOS所需的鏈接庫(cmake make gcc g++ zip NDK)

3. example源碼(gradle/ant NDK Android-SDK)

4. tools源碼(protobuf ncnn)

如果沒有protobuf,那么需要先去github上把Protobuf的源碼給搞下來鳞溉,然后根據(jù)Protobuf安裝指南安裝這個工具瘾带。

安裝了protobuf以后上述工具基本上都已經(jīng)齊備熟菲。

編譯源碼SRC

進(jìn)入src目錄看政,創(chuàng)建build目錄允蚣,然后執(zhí)行cmake嚷兔,具體執(zhí)行順序如下

mkdir build

cd build

cmake ..

make

sudo make install

在build目錄下就可以得到一個大小1.4M不到的libncnn.a靜態(tài)庫

此外冒晰,默認(rèn)的SRC編譯是不會把ncnn的完整屬性打入包內(nèi)的(少了一些方法),這時編譯tools中的轉(zhuǎn)換工具會出現(xiàn)錯誤。如果需要編譯加入這些方法蒋情,在cmake中……不知道咋辦埠况,在cmake之后build目錄中有platform.h文件,把其中

#define NCNN_STDIO 0

#define NCNN_STRING 0

#define NCNN_OPENCV 0

改為

#define NCNN_STDIO 1

#define NCNN_STRING 1

#define NCNN_OPENCV 1

即可

編譯Android鏈接庫

這部分比較簡單棵癣,直接在ncnn的根目錄執(zhí)行

bash build.sh

bash package.sh

就行

在執(zhí)行完一堆編譯(編譯過程中如果沒有配置IOS專門的OC編譯器询枚,IOS庫無法產(chǎn)出,不過沒關(guān)系浙巫,咱們說的是Android Demo跑通嘛。)后會得到:build-android-aarch64 build-android-armv7兩個文件夾

以及ncnn.framework.zip ncnn-android-lib.zip兩個壓縮包

我們只要把ncnn-android-lib.zip這個壓縮包搞出來就行了

編譯example源碼

Example里的squeezencnn是一個Ant工程刷后,這里以WIndows編譯為例的畴,Mac用戶雷同(Linux可以直接下載ant編譯工具,修改ant.properties然后編譯):

直接備份導(dǎo)入到Android Studio中游桩,升級為Gradle工程(AS會自動創(chuàng)建build.gradle等文件)

咱們采用原始方法加入NDK支持:

經(jīng)過一系列等待需五,會告訴你NDK錯誤

在根目錄下創(chuàng)建

gradle.properties

內(nèi)容為

android.useDeprecatedNdk=true

修改根目錄中的build.gradle里gradle的版本到一個比較新的版本

修改app/build.gradle的內(nèi)容(AS會自動調(diào)整目錄結(jié)構(gòu))

主要修改兩項內(nèi)容勾习,增加兩項內(nèi)容:

修改

compileSdkVersion 9

compileSdkVersion 14或者更高

修改

buildToolsVersion XXX

buildToolsVersion '24.0.2'或更高

增加

sourceSets {

? ?main {

? ? ? jniLibs.srcDirs = ['libs']

? ?}

}

增加

dependencies {

? ?compile fileTree(dir: 'libs', include: ['*.so'])

}

然后進(jìn)入app/src/main/jni

修改

Android.mk中

NCNN_INSTALL_PATH到你編譯出的build-android-XXX目錄的install目錄下

修改Application.mk中

APP_ABI := all

APP_PLATFORM := android-14

然后在jni目錄下直接執(zhí)行

ndk-build

就會在上層目錄得到一個libs文件夾,里面包含了所有編譯輸出的so庫

我們把libs文件夾移動到app的目錄下

然后直接gradle build install

跑起來煎娇,應(yīng)該就沒問題了。

這是一個圖片分類的demo贪染,啟動后會發(fā)現(xiàn)無論什么圖片都不能識別分類(顯示一個神秘路徑)

反查app\src\main目錄下的asserts中放的squeezenet_v1.1.bin文件內(nèi)容是一個路徑缓呛,synset_words.txt也是所以我們要用原始example目錄下

squeezenet_v1.1.bin

squeezenet_v1.1.param

以及

synset_words.txt

替換同名文件。

再次運行杭隙,就有結(jié)果了哟绊。。痰憎。雖然結(jié)果看起來不太理想票髓,不過效果還不錯攀涵。。洽沟。


運行效果

編譯工具TOOLS

工具的編譯也非常簡單以故,去tools目錄下直接創(chuàng)建build文件夾然后:

cd build

cmake ..

make

sudo make install

即可得到caffe2ncnn和ncnn2mem這兩個工具,

caffe2ncnn接受2個裆操、4個或者5個參數(shù)

依次是:

caffe的模型prototxt文件

caffe的模型caffemodel文件

輸出的

ncnn模型bin文件名

ncnn模型的param文件名

以及量化深度

支持(0怒详,256,65536)三種跷车,默認(rèn)是0(完全)

結(jié)尾

從執(zhí)行的效果和代碼的快速瀏覽來看棘利,NCNN的目標(biāo)在于輕量級的更注重CPU運算優(yōu)化的方向(包括這兩天的更新都是在針對不同的硬件架構(gòu)進(jìn)行代碼優(yōu)化),和TensorFlow on Android還是有一些差別的朽缴。感覺這個項目要成熟起來還有很長的路要走善玫。

再增加一些其他平臺的模型轉(zhuǎn)換工具吧。

有空會寫代碼閱讀理解報告的密强。茅郎。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末或渤,一起剝皮案震驚了整個濱河市系冗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薪鹦,老刑警劉巖掌敬,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異池磁,居然都是意外死亡奔害,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門地熄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华临,“玉大人,你說我怎么就攤上這事端考⊙盘叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵却特,是天一觀的道長扶供。 經(jīng)常有香客問我,道長裂明,這世上最難降的妖魔是什么诚欠? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上轰绵,老公的妹妹穿的比我還像新娘粉寞。我一直安慰自己,他們只是感情好左腔,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布唧垦。 她就那樣靜靜地躺著,像睡著了一般液样。 火紅的嫁衣襯著肌膚如雪振亮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天鞭莽,我揣著相機(jī)與錄音坊秸,去河邊找鬼。 笑死澎怒,一個胖子當(dāng)著我的面吹牛褒搔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喷面,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼星瘾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惧辈?” 一聲冷哼從身側(cè)響起琳状,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盒齿,沒想到半個月后念逞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡边翁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年翎承,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒彰。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莱睁,靈堂內(nèi)的尸體忽然破棺而出待讳,到底是詐尸還是另有隱情,我是刑警寧澤仰剿,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布创淡,位于F島的核電站,受9級特大地震影響南吮,放射性物質(zhì)發(fā)生泄漏琳彩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望露乏。 院中可真熱鬧碧浊,春花似錦、人聲如沸瘟仿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劳较。三九已至驹止,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間观蜗,已是汗流浹背臊恋。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工墓捻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留抖仅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓岸售,卻偏偏與公主長得像凸丸,于是被迫代替她去往敵國和親袱院。 傳聞我的和親對象是個殘疾皇子忽洛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容