1. 程式人生 > >Tensorflow深度學習網路應用——英特爾神經計算棒編譯

Tensorflow深度學習網路應用——英特爾神經計算棒編譯

      因為偶然的機會,我接觸到從事嵌入式開發的團隊的英特爾神經計算棒專案,得以熟悉英特爾神經計算棒的使用過程。本篇部落格主要是記錄我5天來的除錯工作,為將來從事嵌入式開發,有可能應用到神經計算棒做影象處理的同志留一些經驗。

      首先來介紹英特爾這款神經計算棒。英特爾這款計算棒,利用自己開發的Movidius視覺處理單元(VPU)來加速計算,使得處理影象分類任務的深度學習網路可以方便快速的移植到嵌入式開發板上,它之於嵌入式開發板類似於GPU於電腦主機,但是本身這個計算棒還是和GPU有很大差距的。目前這款計算棒只支援Ubuntu16.04等以上的系統,支援c語言、c++和python開發。團隊開發的環境正好是搭載Ubuntu16.04 的嵌入式板,因此我完全是在Ubuntu16.04的電腦上使用python3.5完成了神經計算棒的整個開發,移植到嵌入式板上毫無差別。而英特爾神經計算棒的開發,主要就是將深度學習網路固化成計算棒可識別的graph格式,需要明確網路的輸入節點和輸出節點以便編譯器識別。

  1.  開始開發工作,首先要安裝計算棒本身的軟體工具下載。有兩個版本,因為版本2功能更多,支援的網路更多,所以這裡我安裝的是2.0.5的版本。
  2. 確定深度學習網路使用的深度學習框架。計算棒支援TensorFlow、caffe兩大網路框架,在這裡我使用的是TensorFlow。TensorFlow開發指南
  3. 確定要使用的網路結構和編譯方法。這一步是很容易出現bug的,一般剛上手計算棒的人很難通過編譯,這也和計算棒本身編譯資料少,使用者少,相關排錯帖子少有關,我在開發的時候,也花了大量的時間在編譯上。首先,在TensorFlow的網路開發指南上,將TensorFlow編寫的網路分為3種編譯方法:
  • 基於TensorFlow的幾個典型網路,有收入計算棒的示例網路中的網路比如mobilenet等,可以直接下載TensorFlow的原始碼和weight儲存檔案,將其固化成graph使用。具體的操作方法在指南中有附。可以在GitHub上查詢支援的網路
    支援網路
  • 基於TensorFlow-slim搭建的網路,slim是TensorFlow的一個API,基於這個API搭建的網路的編譯方法,但是因為我不熟悉Slim這個API,所以我也沒有用
  • 基於TensorFlow自行搭建的網路,多數開發者用的可能是這種網路。自行訓練的網路需要將網路結構和引數儲存成xxx.ckpt 檔案,這個檔案將被轉換成擁有輸入節點和輸出節點的新的網路結構xxx_inference.ckpt,最後再由xxx_inference.meta檔案編譯成graph檔案。在TensorFlow開發指南上有說明網路的修改方法,主要是:

(1)新增輸入節點,並命名(命名這點很重要,因為編譯器是靠名字找到輸入節點和輸出節點的)

(2)修改網路結構,去掉dropout層 

(3)新增輸出節點並命名(輸出節點一定要命名,並且不能將網路的最後一個節點直接作為輸出節點,這個我也不知道為什麼,但是直接將網路的最後一個節點作為輸出節點報錯了) 

(4)重新載入之前網路的.ckpt檔案,生成一個新的有輸入節點和輸出節點的網路的ckpt檔案   

(5)最後編譯(如果你所有的操作都做了,但是不一定能編譯通過,因為計算棒的編譯器並不是支援TensorFlow所有的函式,如果你用了它不支援的函式。。。。。就會報錯找不到此函式-錯誤號5,但是如果通過了,基本上就可以用了)

mvNCCompile mnist_inference.meta -s 12 -in 輸入節點名 -on 輸出節點名 -o xxx.graph

 (6)呼叫自己生成的graph來測試graph,在這裡我們發現了graph檔案只能輸出一維陣列。。。。。所以設計網路時要確定自己的輸出是有效的 

       在這次開發中,我使用的是YOLO_small網路,網路工作是圈出影象中人的位置。這是一個簡單模型,使用TensorFlow自行編寫,選擇第三種編譯方式。本身模型更改並不難,但是在編譯過程中遇到了很多的問題,比如TensorFlow的函式計算棒不支援、找不到輸出節點、輸出的資料格式不支援等等。

        好在使用的編譯器ncsdk2.0.5支援了Tiny_YOLO_V2網路,因此我在Tiny_YOYLO_v2網路上進行了修改編譯,最終生成了可用的grapy。之後會儲存提交整個文件,包含Tiny_YOLO_V2網路的編譯、呼叫檔案,以及自己修改的mnist的示例程式碼以供參考。

最後說一下計算棒的使用體驗。目前來講,我覺得英特爾計算棒的開發工作還在一個起步階段,它的編譯、糾錯等方面還沒有形成系統,使用者遇到問題需要花很大的力氣查錯,而網路上計算棒的使用帖少之又少。而且計算棒支援的網路比較少,應用還比較窄,因此目前還有很多侷限,建議開發者使用計算棒支援的網路進行開發,這樣可以規避很多漏洞。鳴謝和我一起開發的師兄,給了我很多指導。

相關推薦

Tensorflow深度學習網路應用——神經計算編譯

      因為偶然的機會,我接觸到從事嵌入式開發的團隊的英特爾神經計算棒專案,得以熟悉英特爾神經計算棒的使用過程。本篇部落格主要是記錄我5天來的除錯工作,為將來從事嵌入式開發,有可能應用到神經計算棒做影象處理的同志留一些經驗。       首先來介紹英特爾這款神經計算棒。

無人機+深度學習AI技術高效助力文物保護

通過英特爾人工智慧技術、深度學習技術、無人機技術等,如果實現對於箭扣長城的保護與修繕?答案就在視訊裡。 無人機高精度影象採集:因為長城的跨度很大,修繕之前首先需要進行環境勘測。傳統的辦法是通過尺子測量以及目測,很難得到精準的資料。通

與 Facebook 合作採用第三代® 至強® 可擴充套件處理器和支援 BFloat16 加速的® 深度學習加速技術,提高 PyTorch 效能

英特爾與 Facebook 曾聯手合作,在多卡訓練工作負載中驗證了 BFloat16 (BF16) 的優勢:在不修改訓練超引數的情況下,BFloat16 與單精度 32 位浮點數 (FP32) 得到了相同的準確率。現在,英特爾釋出了第三代英特爾® 至強® 可擴充套件處理器(代號 Cooper Lak

TensorFlow深度學習應用實踐》

常用 基本應用 水平 目的 record tar csv 支持 .com http://product.dangdang.com/25207334.html 內容 簡 介 本書總的指導思想是在掌握深度學習的基本知識和特性的基礎上,培養使用TensorFlow進行實際編程以解

中國電信聯合諾基亞、展示5G創新應用,加速5G商用落地

上海2018年11月6日電 /美通社/ -- 在首屆中國國際進口博覽會(China International Import Expo,簡稱“進博會”)上,中國電信聯合諾基亞和英特爾共同演示了一系列基於5G端到端技術的解決方案。這一系列極具突破性的成果展示,旨在將5G引入行業生態系統的創

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證碼

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證碼 參考部落格。 在此基礎上做了小修改。 其中CNN網路部分仿照我們入門實戰六的內容,如果不太清楚CNN可以再去回顧一下。 本博文資料集。 程式碼部分 import os os.environ["KMP_D

[TensorFlow深度學習入門]實戰十二·使用DNN網路實現自動編碼器

[TensorFlow深度學習入門]實戰十二·使用DNN網路實現自動編碼器 測試程式碼 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" import tensorflow as tf from tensorflow

TensorFlow 深度學習框架(9)-- 經典卷積網路模型 : LeNet-5 模型 & Inception-v3 模型

LeNet -5 模型LeNet-5 模型總共有 7 層,以數字識別為例,圖展示了 LeNet-5 模型的架構第一層,卷積層這一層的輸入就是原始的影象畫素,LeNet-5 模型接受的輸入層大小為 32*32*1 。第一個卷積層過濾器的尺寸為 5 * 5,深度為 6,步長為 1

系統學習深度學習(五) --遞迴神經網路原理,實現及應用

      但是大神們說,標準的RNN在實際使用中效果不是很好,真正起到作用的是LSTM,因此RNN只做簡單學習,不上原始碼(轉載了兩篇,第一個是簡單推導,第二個是應用介紹)。 下面是簡單推導,轉自:http://blog.csdn.net/aws3217150/article/details/5076

TensorFlow實現經典深度學習網路(5):TensorFlow實現自然語言處理基礎網路Word2Vec

TensorFlow實現經典深度學習網路(5):TensorFlow實現自然語言處理 基礎網路Word2Vec         迴圈神經網路RNN是在自然語言處理NLP領域最常使用的神經網路結構,和卷積神經網路在影象識別領域的地位相似,影響深遠。而Word2Vec則是將語

TensorFlow深度學習筆記 迴圈神經網路實踐

載入資料 使用text8作為訓練的文字資料集text8中只包含27種字元:小寫的從a到z,以及空格符。如果把它打出來,讀起來就像是去掉了所有標點的wikipedia。 直接呼叫lesson1中maybe_download下載text8.zip用zipfile讀取zip內容

TensorFlow深度學習應用實踐

TensorFlow作為最新的、應用範圍最為廣泛的深度學習開源框架自然引起了廣泛的關注,它吸引了大量程式設計和開發人員進行相關內容的開發與學習。掌握TensorFlow程式設計基本技能的程式設計人員成為當前各組織和單位熱切尋求的熱門人才。他們的主要工作就是利用獲得的資料集設計不同的人工神經模型,利用人工神經網

TensorFlow:實戰Google深度學習框架(七)迴圈神經網路

RNN網路確實可以解決和時間序列有關係的問題,但是,在實際的應用過程中,我們可以看到效能並不是很好。RNN記住了以前輸入的所有資訊,但是有時候並不需要記住以前時刻的所有資訊,增加了很多的系統記憶體負擔;有時候我們的確需要記住很長時間以前資訊,但是又容易出現梯度爆炸或者梯度消失的問題。針對於這個問題,人們開

TensorFlow 深度學習框架 (1)-- 神經網路與前向傳播

基本概念:計算圖,張量,會話計算圖是相互運算不影響的兩個計算模型,是定義計算的執行,且互不影響#在TensorFlow程式中,系統會自動維護一個預設的計算圖,也支援通過tf.Graph 生成新的計算圖 #不同計算圖上的張量和運算都不會共享 import tensorflow

TensorFlow 深度學習框架 (2)-- 反向傳播優化神經網路

訓練神經網路的過程就是設定神經網路引數的過程,只有經過有效訓練的神經網路模型才可以真正的解決分類問題或迴歸問題。使用監督學習的方式設定神經網路引數需要有一個標註好的訓練資料集。監督學習的最重要的思想是,在已知答案的標註資料集上,模型給出的預測結果要儘可能接近真實的答案。在神經

使用的 ixgbe 基礎驅動程式 , 適用於 10 千兆位®網路連線

概述 Linux* 基礎驅動程式支援 2.6.x 核心 , 並且包括對任何受 Linux 支援系統 , 包括 Itanium ® 2 、 x86_64 、 i686, 和 PPC 這些驅動程式僅作為可載入模組支援。 英特爾不對核心源提供進行驅動程式靜態連結的補丁程式。

機器學習:在Android中整合TensorFlow (深度學習,AI,人工智慧,DL,ML,神經網路)

眾所周知,google谷歌有一個名為TensorFlow的開源庫,可用來在Android中實現機器學習。 TensorFlow是一個由google谷歌提供的機器智慧開源軟體庫。我在網上搜索了很多關於在Android端 構建 TensorFlow的簡單簡單方

發布至強可擴展處理器,業界十年來技術最大進步(核心思想:數據洪流出現)

strong 中心 結合 的人 目的 表示 png 高度 最終 集微網 7月12日報道今天,英特爾公司在北京正式發布了至強可擴展處理器。該處理器可為計算、網絡和存儲帶來針對工作負載優化的性能,向下一代雲基礎設施提供堅實基礎,並賦能數據分析、人工智能、高性能計算、網絡轉型等各

電腦誤刪文件資料怎麽恢復

電腦 文件  通常我們會將沒有用的文件刪除,這樣不僅可以減少電腦的存儲內存,而且也能夠方便我們查找那些有用的文件,而且電腦上無用的文件如果太多了,也是不利於我們日常的工作。但是我們在刪除文件的時候,偶爾會遇到文件誤刪的情況,那麽電腦不小心誤刪的文件可以恢復嗎? 如果我們不小心誤刪了電腦上的資料,那麽

李嘉誠、、比亞迪入股的雷蛇,上市後能玩把大的嗎?

雷蛇從去年下半年以來,互聯網、科技行業總是在高喊著“寒潮”已來。並給出諸多所謂的證據,如大批創業公司倒閉、融資困難等。但現實卻是這是一場優勝劣汰的競爭而已,真正具有創新性的企業依然在融資的路上狂奔、高價值企業仍然在股市有著優異的表現。比如不斷融資的共享單車、還有業務多元化的美團,當然還有股價不斷創新高的蘋果、