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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

?

寫在前面

Movidius 是一家被Intel收購(gòu)的計(jì)算機(jī)視覺創(chuàng)業(yè)公司。Intel收購(gòu)Movidius之后,在AI和邊緣計(jì)算方面的布局又增加了一支生力軍。Movidius的AI芯片分為Myriad x VPU和Myriad 2 VPU兩種。

最近我用Myraid VPU做了一個(gè)項(xiàng)目,目標(biāo)是開發(fā)一款目標(biāo)識(shí)別的智能相機(jī)。硬件方面使用的是海思3516D做為主芯片,VPU作為深度學(xué)習(xí)加速芯片。硬件使用的是桐燁科技的智能相機(jī),在此感謝桐燁科技老總的友情贊助以及朋友們的幫助。首先我們可以看看桐燁科技這款相機(jī)的技術(shù)分析,然后我們?cè)倏纯催@款相機(jī)的產(chǎn)品說明。有興趣的朋友們千萬要認(rèn)準(zhǔn)桐燁科技哦。

?

功能設(shè)計(jì)

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

那么如果要在這個(gè)智能相機(jī)上實(shí)現(xiàn)目標(biāo)識(shí)別的應(yīng)用,我們大致需要研究完成以下幾件工作:

1、實(shí)現(xiàn)主芯片Hi3516D和VPU之間的通信。

2、將目標(biāo)識(shí)別的算法模型導(dǎo)入到VPU上運(yùn)行。

3、從VPU中獲取目標(biāo)識(shí)別的結(jié)果。

4、實(shí)現(xiàn)目標(biāo)識(shí)別結(jié)果的可視化。

5、算法耗時(shí)、準(zhǔn)確率、召回率等指標(biāo)的測(cè)試。

所以,下文的調(diào)試筆記我也準(zhǔn)備按照以上這幾個(gè)階段來記錄。

?

通信功能

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

軟件上,要實(shí)現(xiàn)通信功能,首先需要安裝SDK、看demo、運(yùn)行demo。只有先把官方的demo跑通,才能確保后面的工作順利進(jìn)行。

?

SDK環(huán)境搭建

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

言歸正傳,說回到Movidius Ncsdk環(huán)境搭建。

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

下面來說說SDK移植的詳細(xì)步驟:

1、安裝Ncsdk

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

安裝后的目錄結(jié)構(gòu)如下圖一所示:

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

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

docs目錄:這個(gè)目錄是幫助文檔的存儲(chǔ)路徑;

examples目錄:這個(gè)目錄是官方demo的存儲(chǔ)路徑;

extras目錄:這個(gè)是docker存儲(chǔ)路徑;

同時(shí),默認(rèn)在/opt路徑下面生成一個(gè)名為 movidius 的目錄,目錄結(jié)構(gòu)如下圖二所示:

其中NCSDK目錄里面存放了一些api和編譯計(jì)算圖的工具,這些工具在后面會(huì)用到,其他的兩個(gè)文件夾暫不關(guān)注,因?yàn)槲以陧?xiàng)目中使用的是tensorflow作為深度學(xué)習(xí)模型開發(fā)框架,所以沒有關(guān)注caffe部分。

至此,基于ubuntu的Ncsdk就安裝完成了,此時(shí)我們就可以運(yùn)行一些demo了。demo的驗(yàn)證部分我放到后面去說,因?yàn)槲覀冏罱K是要將sdk運(yùn)行在Hi3516D上面,所以需要移植出基于armv7l的sdk,下面就說說移植過程。

2、移植SDK

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

libmvnc.so:這個(gè)庫是提供了VPU的相關(guān)調(diào)用接口的實(shí)現(xiàn),這個(gè)庫是通過Ncsdk下面api目錄中的src編譯生成。

libusb.so:這個(gè)庫是提供的usb設(shè)備調(diào)用接口,Ncsdk中直接通過調(diào)用該庫來實(shí)現(xiàn)usb通信,所以我們使用開源庫編譯即可。

移植過程時(shí)需要使用Hi3516D的SDK,Hi3516的SDK需要在ubuntu 32位系統(tǒng)下安裝和編譯目標(biāo)程序。

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

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

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

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

3、編譯過程中會(huì)因?yàn)镃庫的原因出現(xiàn)一些編譯錯(cuò)誤,所以需要稍微改動(dòng)改動(dòng)Makefile文件和源文件,解決編譯報(bào)錯(cuò)即可。

4、我們的目標(biāo)是編譯出libmvnc.so庫即可,在沒安裝python環(huán)境時(shí),會(huì)出現(xiàn)一些其他的報(bào)錯(cuò)信息,如下:

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

這些錯(cuò)誤信息都可以忽略。

編譯完成之后會(huì)生成一個(gè)libmvnc.so,大小大概在100KB左右。

有了這兩個(gè)動(dòng)態(tài)庫,我們就可以將SDK中的demo程序拷貝到板端進(jìn)行驗(yàn)證了。

3、驗(yàn)證SDK

軟件的世界,從HelloWorld開始,所以理所當(dāng)然Ncsdk中提供了一個(gè)hello_ncs_cpp的demo程序。

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

1、libmvnc.so

2、libusb.so?

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

# ./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 注釋打開。

如果以上三個(gè)文件都正確,程序會(huì)順利執(zhí)行。

經(jīng)過以上這些調(diào)試工作,我們就調(diào)通了主芯片和VPU之間的通信,接下來就針對(duì)算法導(dǎo)入功能進(jìn)行詳細(xì)地說明。請(qǐng)看參考鏈接[3]中的內(nèi)容。

?

參考鏈接

[1]、Movidius NCS SDK環(huán)境搭建

[2]、Movidius 官網(wǎng)

[3]、ARM+Movidius VPU 目標(biāo)識(shí)別調(diào)試筆記(二)

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。