1. 程式人生 > >基於ncnn的深度學習演算法優化(一)

基於ncnn的深度學習演算法優化(一)

實驗環境:Ubuntu14.04+cmake+protobuf(可選,protobuf僅用於編譯caffetoncnn轉換工具,若無需求可不安裝)
一、下載ncnn程式碼並編譯

git clone https://github.com/Tencent/ncnn.git

ncnn是為手機端即(Android、IOS)等ARM處理器進行了良心級NEON優化,速度提升明顯。

1.1 編譯x86架構的ncnn

cd ncnn
mkdir build_x86
cd build_x86
cmake ..

此時,需觀察一下是否安裝有protobuf,在cmake生成日誌中可看到。如下圖:

若沒有,或者不需要使用protobuf可修改ncnn根目錄下CMakeLists.txt配置檔案,僅進行ncnn庫編譯。配置檔案如下圖所示:
這裡寫圖片描述


之後,直接make即可編譯完成。執行make install即可在install資料夾下得到x86架構的ncnn靜態庫和標頭檔案。
但ncnn在x86架構下速度提升不明顯,所以我們真正想要的是在arm下的ncnn庫檔案,下面我就介紹一下,我的一些修改過程。

1.2 Arm下編譯ncnn
首先,在ncnn根目錄下建立一個新的build資料夾。

mkdir build_arm

修改ncnn根目錄下CMakeLists.txt,在cmake_minimum_required(VERSION 2.8.10)下面新增以下四條命令set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) add_definitions(-D__ARM_NEON) add_definitions("-mfpu=neon")


這裡寫圖片描述
然後,進入src資料夾下,修改該資料夾下的CMakeLists.txt檔案。刪除如下圖所示程式碼:
這裡寫圖片描述
最後,進入buidl_arm資料夾下進行
cmake ..
make
make install

即可。至此,編譯ncnn已經完成,下面附上兩張測試效果圖,硬體平臺都為orangepi win plus,模型一致,測試圖片一致,測試時間為迴圈1000次,取平均時間。
第一張為未使用ncnn優化的效果圖,平均時間139.574ms;第二張為使用ncnn優化的效果圖,平均時間35.198ms。
這裡寫圖片描述
這裡寫圖片描述

相關推薦

基於ncnn深度學習演算法優化

實驗環境:Ubuntu14.04+cmake+protobuf(可選,protobuf僅用於編譯caffetoncnn轉換工具,若無需求可不安裝) 一、下載ncnn程式碼並編譯 git clone https://github.com/Tencent/n

深度學習之tensorflow

spa 計算 put range mst reduce logs 分析 pen 一、TensorFlow簡介 1.TensorFlow定義: tensor :張量,N維數組 Flow : 流,基於數據流圖的計算 TensorFlow : 張量從圖像

Elam的吳恩達深度學習課程筆記

記憶力是真的差,看過的東西要是一直不用的話就會馬上忘記,於是乎有了寫部落格把學過的東西儲存下來,大概就是所謂的集鞏固,分享,後期查閱與一身的思想吧,下面開始正題 深度學習概論 什麼是神經網路 什麼是神經網路呢,我們就以房價預測為例子來描述一個最簡單的神經網路模型。   假設有6間

深度學習基礎概念科普入門

1、深度學習(Deep Learning): 是建立在計算機神經網路理論和機器學習理論上的系統科學,它使用建立在複雜的機器結構上的多處理層,結合非線性轉換方法演算法,對高層複雜資料模型進行抽象。 深度學習有兩大要素: (1)資料表示:資料是機器學習

深度學習影象分類——AlexNet論文理解

0. 寫作目的 好記性不如爛筆頭。 1. 論文理解 1.1 ReLU 啟用函式的使用 Rectified Linear Units(ReLU) 使用ReLU比使用tanh(或者sigmoid)啟用函式收斂速度更快。下圖來自AlexNet論文中給出的在CIFAR-10

深度學習基礎系列| 文看懂用kersa構建模型的各層含義掌握輸出尺寸和可訓練引數數量的計算方法

      我們在學習成熟神經模型時,如VGG、Inception、Resnet等,往往面臨的第一個問題便是這些模型的各層引數是如何設定的呢?另外,我們如果要設計自己的網路模型時,又該如何設定各層引數呢?如果模型引數設定出錯的話,其實模型也往往不能運行了。   所以,我們需要首

深度學習筆記篇VGG + 動量法

新開個坑,作為最近一直忙不寫部落格的一個補償。 在筆記篇中,主要會以流水賬(日記)的形式,覺得囉嗦的朋友可以關注我的後續篇節,有一些Project會單獨拿出來說。 先講個題外話。 因為經常需要更新github上老師的程式碼,於是很多人想要在本地與專案保持更新 通過 g

深度學習筆記——深度學習框架TensorFlow

一. 學習網站: 1. Introduction:https://www.tensorflow.org/versions/r0.12/get_started/index.html 2. Tutorials:https://www.tensorflow.org/

斯坦福深度學習課程筆記

影象分類 ppt 1 資料驅動方法 人眼和計算機看到的圖片不同,計算機看到的圖片是由很多代表畫素點的數字表示的陣列,所以人眼和計算機的視覺識別存在著Semantic Gap(語義鴻溝)。 同時,讓計算機能夠有效地識別圖片中的物體之前,還存在很多挑戰:比如 一些

深度學習環境搭建-win10子系統啟用Linux

(一)啟用win10下子系統Linux  Win10一週年版推出了用於Windows的Linux子系統這一功能,經實驗室師兄驗證,對於日常開發已經足矣,故選擇開啟子系統,避免了雙系統的麻煩。 step

基於深度學習的目標檢測演算法綜述截止20180821

參考:https://zhuanlan.zhihu.com/p/40047760 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技

基於深度學習的目標檢測演算法綜述

前言 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初2013年提出的R-CNN、OverFeat

深度學習筆記——理論與推導之概念,成本函式與梯度下降演算法初識

前情提要 一、神經網路介紹 概念:Learning ≈ Looking for a Function 框架(Framework): What is Deep Learning? 深度學習其實就是一個定義方法、判斷方法優劣、挑選最佳的方法的過程:

MATLAB學習之路 實現簡單的基於歐式距離的新型聚類演算法Clustering by fast search and find of density peaksd

大學本科三年,眨眼而已,對於一個考研黨來說,本科時間已所剩不多,大三上學期初次接觸到MATLAB。的確如大牛們所說,強大的計算能力,充足的數學工具,帶來使用者極大的便利。 在大資料的學習過程中,MAT

學習《selenium2自動化測試基於python》遇到的問題

pypi tools bsp sel dir python 解決方案 打不開 什麽 問題一: 通過cmd,用Python安裝setuptools時,報錯no module named ‘six‘等類似情況時,解決方案: 翻譯過來就是缺少SIX的模塊,直接到官網打開,下載

JVM學習記錄-線程安全與鎖優化

多線程 image @param decimal 屬於 資源分配 try 可能 例如 前言 線程:程序流執行的最小單元。線程是比進程更輕量級的調度執行單位,線程的引入,可以把一個進程的資源分配和執行調度分開,各個線程既可以共享進程資源(內存地址、文件I/O等),又可以獨立

系統學習機器學習之總結--常見分類演算法優缺點

主要是參考網上各種資源,做了整理。其實,這裡更多的是從基礎版本對比,真正使用的時候,看資料,看改進後的演算法。 1. 五大流派 ①符號主義:使用符號、規則和邏輯來表徵知識和進行邏輯推理,最喜歡的演算法是:規則和決策樹 ②貝葉斯派:獲取發生的可能性來進行概率推理,最喜歡的演算法是:樸素貝葉

AI聖經-深度學習-讀書筆記-深度模型中的優化

這一樣整理的內容非常少,以後會補上的。由於水平有限,實在看不懂。目前只是《深度學習》的第一版筆記,以後會以專欄的形式從新整理,不再是簡單的摘錄,更多的加上自己的思考。 深度模型中的優化 0 簡介 深度學習演算法在很多情況下都涉及優化。本章主要關

《機器學習實戰》knn演算法

K最近鄰(k-Nearest Neighbor,KNN)分類演算法可以說是最簡單的機器學習演算法了。它採用測量不同特徵值之間的距離方法進行分類。它的思想很簡單:存在一個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一個數據與所屬分類的對應關係。輸入沒有標

機器學習實戰--K近鄰演算法實現

KNN演算法的工作原理為: 存在一個樣本資料的集合,也稱作訓練樣本集合,並且樣本集的每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似的分類標籤,一般只選擇樣本集中前K個最相似的資料,前K個相似資