技術(shù)背景
如今,人工智能的熱潮正在席卷各行各業(yè),而計算力和數(shù)據(jù)、算法一同支撐著人工智能的蓬勃發(fā)展。作為人工智能的一個重要分支, 深度學(xué)習(xí)以其良好的表現(xiàn),越來越受到業(yè)界的廣泛關(guān)注。深度學(xué)習(xí)模型包含海量的參數(shù),需要強大的計算力進(jìn)行大規(guī)模的神經(jīng)網(wǎng)絡(luò)矩陣運算;而終端和物聯(lián)網(wǎng)設(shè)備往往更多考慮小體積和功耗的要求,以至于很難兼顧滿足高性能神經(jīng)網(wǎng)絡(luò)計算力和低功耗的要求。英特爾在去年發(fā)布的針對神經(jīng)網(wǎng)絡(luò)矩陣運算優(yōu)化的Movidius神經(jīng)元計算棒 (NCS) 就很好的適應(yīng)了這一應(yīng)用領(lǐng)域的需求。本文將向您介紹基于 Movidius NCS 的ROS開發(fā)包的功能及其使用方法,您可以輕松地將深度學(xué)習(xí)技術(shù)引入項目,和其他ROS節(jié)點無縫連接,為您的機器人裝上人工智能的利器。
與Movidius神經(jīng)元計算棒一同發(fā)布的還有NCSDK和NCAppZoo,為用戶在Movidius 神經(jīng)元計算棒之上開發(fā)各自的應(yīng)用提供了良好的軟件支持。
NCSDK目前提供了C和Python兩種語言的編程的接口,通常應(yīng)用開發(fā)者通過調(diào)用這些接口就能操作NCS做深度學(xué)習(xí)方面的圖像預(yù)測工作。然而,在機器人研究領(lǐng)域,人們廣泛采用ROS框架,這一框架下的各個應(yīng)用通常采用消息(message)和話題(topic)的方式進(jìn)行通信。在這種特殊情況下,機器人應(yīng)用開發(fā)者不得不對NCSDK做進(jìn)一步的封裝才能使其無縫工作在ROS系統(tǒng)中。針對NCSDK到ROS系統(tǒng)的銜接問題,我們提出并實現(xiàn)了一種基于ROS系統(tǒng)的對NCSDK的封裝。該項目目前已經(jīng)在github上面開源(github 地址)。
項目介紹
1. 軟件架構(gòu)設(shè)計
本項目主體由一個ROS發(fā)布節(jié)點和一個ROS服務(wù)節(jié)點組成,以適應(yīng)不同的應(yīng)用場景。ROS發(fā)布節(jié)點用于處理來自相機的視頻流數(shù)據(jù),預(yù)測結(jié)果以消息(message)的形式發(fā)布到相應(yīng)的話題(topic)中,供上層應(yīng)用調(diào)用。ROS服務(wù)節(jié)點用于處理單張圖片數(shù)據(jù),預(yù)測結(jié)果直接返回給上層消費服務(wù)的節(jié)點做進(jìn)一步處理。為了更好的演示這兩個節(jié)點的使用方法,我們還開發(fā)了多個客戶端節(jié)點,最終處理結(jié)果會以圖像的形式展現(xiàn)出來。
目前項目可以支持物體分類和物體識別兩種應(yīng)用。物體分類可以采用不同的CNN模型,例如,GoogleNet, AlexNet和SqueezeNet等。物體識別可以支持TinyYolo, mobilenet-SSD等。

Figure 1. ROS NCS structure
2. 運行條件
· 運行Ubuntu16.04的x86_64計算機
· ROS Kinetic
· Movidius神經(jīng)元計算棒(NCS)
· NCSDK和NCAppZoo
· RGB相機
具體環(huán)境配置可以參考這里。
3. 編譯與安裝
下載源碼到本地ROS工作區(qū),切換到最新發(fā)布,編譯、安裝。
復(fù)制CNN標(biāo)簽文件到指定目錄。

4. 運行演示程序
目前本項目可以支持一般的USB camera和Intel RealSense camera。也允許用戶根據(jù)需要配置不同的相機。以下以一般USB Camera和RealSense D400系列為例進(jìn)行說明。其他使用方式請參考文檔。
· 物體分類
視頻流處理
在一個終端啟動視頻流處理節(jié)點:

在另一個終端啟動demo節(jié)點顯示分類結(jié)果:

靜態(tài)圖像處理
在一個終端啟動圖像處理節(jié)點:

在另一個終端啟動demo節(jié)點顯示分類結(jié)果,例如:

ROS客戶端軟件的輸出效果如下圖所示.

· 物體識別 (不僅給出物品分類,還給出物體所在圖像中的二維坐標(biāo))
視頻流處理
在一個終端啟動視頻流處理節(jié)點:

在另一個終端啟動demo節(jié)點顯示物體識別結(jié)果:

靜態(tài)圖像處理
在一個終端啟動圖像處理節(jié)點:

在另一個終端啟動demo節(jié)點顯示物體識別結(jié)果,例如:

ROS客戶端軟件的輸出效果如下圖所示.

應(yīng)用領(lǐng)域
本項目提供的物體分類和物體檢測的能力,可以運用于多種機器人使用場景,例如:
1. 3D物體識別與追蹤
基于已經(jīng)識別出的2D物體信息,結(jié)合深度傳感器采集到的深度信息,可以定位到物體在三維空間當(dāng)中的位置,從而對物體進(jìn)行3D識別與跟蹤。
2. 機器人智能避障
傳統(tǒng)的機器人避障對于障礙物不加以區(qū)分,采取相同的策略。而基于物體識別的避障,能夠根據(jù)識別出的物體信息,通過指定不同的策略來應(yīng)對不斷變化的場景,使機器人避障更加智能。
3. 基于語義的同步定位與建圖(SLAM)
通過將識別出的物體標(biāo)注在SLAM得到的地圖上,可以極好地提高地圖的可讀性。
展望
本項目目前開發(fā)到v0.5.0版本,基于Movidius NCSDK 的不斷演進(jìn),本產(chǎn)品在不斷迭代開發(fā)當(dāng)中。一方面,由于ROS2相對ROS具有更好的安全性和實時性,我們計劃移植項目到ROS2中。另一方面,深度學(xué)習(xí)正經(jīng)歷著快速發(fā)展,所以我們希望能支持更多的CNN模型以適應(yīng)不同的機器人使用場景的需要。