日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM+Movidius VPU 目标识别调试笔记(一)

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM+Movidius VPU 目标识别调试笔记(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

寫在前面

Movidius 是一家被Intel收購的計算機視覺創業公司。Intel收購Movidius之后,在AI和邊緣計算方面的布局又增加了一支生力軍。Movidius的AI芯片分為Myriad x VPU和Myriad 2 VPU兩種。

最近我用Myraid VPU做了一個項目,目標是開發一款目標識別的智能相機。硬件方面使用的是海思3516D做為主芯片,VPU作為深度學習加速芯片。硬件使用的是桐燁科技的智能相機,在此感謝桐燁科技老總的友情贊助以及朋友們的幫助。首先我們可以看看桐燁科技這款相機的技術分析,然后我們再看看這款相機的產品說明。有興趣的朋友們千萬要認準桐燁科技哦。

?

功能設計

通過查看前面的一些鏈接和技術博客,使我們對硬件信息有了基本的了解。

那么如果要在這個智能相機上實現目標識別的應用,我們大致需要研究完成以下幾件工作:

1、實現主芯片Hi3516D和VPU之間的通信。

2、將目標識別的算法模型導入到VPU上運行。

3、從VPU中獲取目標識別的結果。

4、實現目標識別結果的可視化。

5、算法耗時、準確率、召回率等指標的測試。

所以,下文的調試筆記我也準備按照以上這幾個階段來記錄。

?

通信功能

我們看硬件通信鏈路,硬件上,Hi3516D和VPU通過USB2.0通信。既然是使用的USB,那這樣就比較方便調試了,支持熱插拔,調試時可以隨意在PC端和嵌入式端切換。實際上在調試的過程中,我也多次這樣切換后進行對比,先保證VPU板在PC端運行正常,然后再往嵌入式端進行移植。

軟件上,要實現通信功能,首先需要安裝SDK、看demo、運行demo。只有先把官方的demo跑通,才能確保后面的工作順利進行。

?

SDK環境搭建

說到Movidius的SDK,很容易能搜索到,文末列出的參考鏈接[1]中就詳細記錄了VPU的NCSDK的安裝過程以及環境搭建過程。另外就是,前段時間聽說Intel有一套叫做OpenVino Toolkit,這套工具庫提供了一套邊緣計算的解決方案,為Intel的幾套用于邊緣計算的芯片方案搭建了一個集成的中間件平臺。它囊括的硬件AI芯片包括:FPGA、Atom、GPU和Moviduis,我暫時還沒去花精力研究這套解決方案,所以暫時也不太清楚能否用在我手頭上的這套智能相機上。看得出Intel在邊緣計算方面確實是煞費苦心。

言歸正傳,說回到Movidius Ncsdk環境搭建。

網上搜索一下,發現很多人在樹莓派上面搭建環境,基本操作都是先從python安裝開始,在python環境之上安裝Ncsdk的python版本。但是,其實Ncsdk是有C語言版本的,而且,如果我們要在智能相機上面移植一個python3,很顯然是不切實際的。既然Ncsdk支持C語言版本,那么移植python3就完全沒有必要了。

下面來說說SDK移植的詳細步驟:

1、安裝Ncsdk

Ncsdk linux版本需要安裝在ubuntu 64位版本上,所以我使用的是ubuntu 16.04虛擬機來進行安裝,安裝過程參考文末的參考鏈接[1]或者[2],整個安裝過程是基于python3的環境進行自動安裝,基本上安裝問題不大,如果出現問題應該就是一些依賴庫版本不匹配之類的問題導致的。

安裝后的目錄結構如下圖一所示:

其中NCSDK-2.05.00.02.tar.gz壓縮包是安裝過程中自動下載的,真正的SDK源碼和工具等都在這里面。

api目錄:這個目錄是從?NCSDK-2.05.00.02.tar.gz 包中解壓出來的api源碼;

docs目錄:這個目錄是幫助文檔的存儲路徑;

examples目錄:這個目錄是官方demo的存儲路徑;

extras目錄:這個是docker存儲路徑;

同時,默認在/opt路徑下面生成一個名為 movidius 的目錄,目錄結構如下圖二所示:

其中NCSDK目錄里面存放了一些api和編譯計算圖的工具,這些工具在后面會用到,其他的兩個文件夾暫不關注,因為我在項目中使用的是tensorflow作為深度學習模型開發框架,所以沒有關注caffe部分。

至此,基于ubuntu的Ncsdk就安裝完成了,此時我們就可以運行一些demo了。demo的驗證部分我放到后面去說,因為我們最終是要將sdk運行在Hi3516D上面,所以需要移植出基于armv7l的sdk,下面就說說移植過程。

2、移植SDK

將SDK移植到ARM上需要編譯出兩個庫文件:libmvnc.so、libusb.so。

libmvnc.so:這個庫是提供了VPU的相關調用接口的實現,這個庫是通過Ncsdk下面api目錄中的src編譯生成。

libusb.so:這個庫是提供的usb設備調用接口,Ncsdk中直接通過調用該庫來實現usb通信,所以我們使用開源庫編譯即可。

移植過程時需要使用Hi3516D的SDK,Hi3516的SDK需要在ubuntu 32位系統下安裝和編譯目標程序。

所以,我需要切換到一個32的ubuntu虛擬機去編譯mvnc庫文件,編譯配置如下:

1、安裝的是060版本的SDK,使用的交叉編譯器為arm-hisiv400-linux-gcc。

2、進入到圖一所示的Ncsdk根目錄,編譯命令為:

make api ARCH=arm CC=arm-hisiv400-linux-gcc

3、編譯過程中會因為C庫的原因出現一些編譯錯誤,所以需要稍微改動改動Makefile文件和源文件,解決編譯報錯即可。

4、我們的目標是編譯出libmvnc.so庫即可,在沒安裝python環境時,會出現一些其他的報錯信息,如下:

/bin/sh: python3: command not found Traceback (most recent call last):File "<string>", line 1, in <module> AttributeError: 'module' object has no attribute 'getsitepackages'

這些錯誤信息都可以忽略。

編譯完成之后會生成一個libmvnc.so,大小大概在100KB左右。

有了這兩個動態庫,我們就可以將SDK中的demo程序拷貝到板端進行驗證了。

3、驗證SDK

軟件的世界,從HelloWorld開始,所以理所當然Ncsdk中提供了一個hello_ncs_cpp的demo程序。

進入到圖一所示的路徑,在 examples\app\hello_ncs_cpp 中,我們編譯出?hello_ncs_cpp 程序即可。運行該程序需要三個依賴文件:

1、libmvnc.so

2、libusb.so?

3、MvNCAPI-ma2450.mvcmd:VPU 的固件,默認的程序在打開設備,獲取設備handle時需要先將固件燒錄到VPU中。固件文件存放在?api/src/mvnc 目錄,如果固件不存在,會出現如下圖三所示的錯誤打印:

# ./hello_ncs_cpp ncDeviceOpen: 506, File path ./mvnc/MvNCAPI-ma2450.mvcmd W: [ 0] ncDeviceOpen:510 ncDeviceOpen() XLinkBootRemote returned error 3 Error- ncDeviceOpen failed ncStatus value: -2 D: [ 0] XLinkConnect:782 XLinkConnect() device name 1.4-ma2450 usb 1-1.4: new high-speed USB device number 11 using hiusb-ehci when arch is arm D: [ 0] dispatcherStart:673 dispatcherStart() starting a new thread - schedulerId 0 D: [ 0] dispatcherAddEvent:531 receiving event USB_PING_REQ 0 D: [ 0] addNextQueueElemToProc:371 received event USB_PING_REQ 0 D: [ 0] eventSchedulerRun:432 eventSchedulerRun() schedulerId 0 D: [ 0] dispatcherRequestServe:288 ------------------------UNserved USB_PING_REQ D: [ 0] dispatcherEventSend:726 sending 5 10 D: [ 0] eventReader:234 Reading USB_WRITE_REQ (scheduler Id 0, fd 0x1d14330) usbdev114 -> /dev/usbdev1.11

如果需要屏蔽加載過程,需要把Makefile中的 #CFLAGS+=-DXLINK_NO_BOOT 注釋打開。

如果以上三個文件都正確,程序會順利執行。

經過以上這些調試工作,我們就調通了主芯片和VPU之間的通信,接下來就針對算法導入功能進行詳細地說明。請看參考鏈接[3]中的內容。

?

參考鏈接

[1]、Movidius NCS SDK環境搭建

[2]、Movidius 官網

[3]、ARM+Movidius VPU 目標識別調試筆記(二)

總結

以上是生活随笔為你收集整理的ARM+Movidius VPU 目标识别调试笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。