小白视角看ros_openvino_toolkit
計(jì)算機(jī)科學(xué)領(lǐng)域的任何問(wèn)題都可以通過(guò)增加一個(gè)間接的中間層來(lái)解決
Any problem in computer science can be solved by anther layer of indirection.
1. 背景
在AI落地應(yīng)用的重要關(guān)口,機(jī)器人在成本控制、批量生產(chǎn)、AI功能應(yīng)用等方面面臨著諸多挑戰(zhàn)。如何在降低機(jī)器人成本的同時(shí),滿(mǎn)足其工業(yè)生產(chǎn)和生活中的性能需求?如何平衡機(jī)器人現(xiàn)有成本和性能,是每個(gè)機(jī)器人AI從業(yè)者都需要仔細(xì)思考的問(wèn)題。
Intel針對(duì)AI實(shí)際應(yīng)用場(chǎng)景,推出了Intel? OpenVINO Toolkit開(kāi)源工具包。Intel? OpenVINO Toolkit是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)提供的一整套深度學(xué)習(xí)推斷和神經(jīng)網(wǎng)絡(luò)優(yōu)化的工具鏈和方法集,并提供了接口統(tǒng)一的跨Intel硬件及其加速器的異構(gòu)計(jì)算框架,將DL算力水平發(fā)揮到最大,獲得了業(yè)界認(rèn)可。
ROS(機(jī)器人操作系統(tǒng))是最流行的開(kāi)源機(jī)器人軟件框架,為機(jī)器人(特別是移動(dòng)機(jī)器人)提供了一整套接口統(tǒng)一、分布式、功能齊全的全棧軟硬件解決方案,擁有健全的生態(tài)系統(tǒng)和高度活躍的貢獻(xiàn)者社區(qū)。
因此,搭載intel硬件的機(jī)器人使用ROS+OpenVINO是一個(gè)很好的選擇。
然而,在實(shí)際開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員需要面對(duì)以下問(wèn)題:
在ROS機(jī)器人上部署OpenVINO并實(shí)現(xiàn)對(duì)應(yīng)的AI功能,首先需要有接口上的支持:代碼如何調(diào)用OpenVINO的底層接口?如何將AI視覺(jué)相關(guān)功能封裝成ROS所能實(shí)現(xiàn)的接口?
智能機(jī)器人需要處理的數(shù)據(jù)是多種多樣的。以AI視覺(jué)為例,機(jī)器人可能要處理視頻、圖片、多種圖像傳感器(RGB攝像頭、深度相機(jī))數(shù)據(jù)。由于機(jī)器人數(shù)據(jù)采集的多樣性,如何將所有的相關(guān)數(shù)據(jù)統(tǒng)一整合成機(jī)器人需要的結(jié)構(gòu)化輸入數(shù)據(jù),并將整合后的數(shù)據(jù)導(dǎo)入給 OpenVINO Toolkit 來(lái)進(jìn)行底層處理?
針對(duì)不同的業(yè)務(wù)場(chǎng)景,進(jìn)行AI推理的硬件也有可能不同。能否只在軟件層面上進(jìn)行極少量的修改,即可快速切換機(jī)器人AI推理的硬件,使開(kāi)發(fā)和驗(yàn)證更具有效率?
OpenVINO可以選定使用同步/異步推理。針對(duì)于不同的機(jī)器人業(yè)務(wù)場(chǎng)景,能否選用不同的策略模式,拓展 OpenVINO 使用過(guò)程中標(biāo)準(zhǔn)化、流水(批量)化處理的實(shí)現(xiàn)?
對(duì)于用戶(hù)而言,總是希望能夠自主開(kāi)發(fā)和擴(kuò)展,針對(duì)自身產(chǎn)品進(jìn)行功能定制。那么如何給用戶(hù)提供標(biāo)準(zhǔn)的軟件實(shí)現(xiàn)接口和歸納,讓機(jī)器人開(kāi)發(fā)人員能對(duì)產(chǎn)品功能快速迭代和更新?
之前工程中編寫(xiě)好的代碼和新版本OpenVINO的接口API不兼容,進(jìn)行代碼更新和維護(hù)需要花費(fèi)很多精力和時(shí)間。如何針對(duì)新版本的OpenVINO進(jìn)行快速二次開(kāi)發(fā)?
…
正如《程序員的自我修養(yǎng)——鏈接、裝載和庫(kù)》一書(shū)中所提到,計(jì)算機(jī)系統(tǒng)軟件體系結(jié)構(gòu)采用一種層的結(jié)構(gòu),計(jì)算機(jī)科學(xué)領(lǐng)域的任何問(wèn)題都可以通過(guò)增加一個(gè)間接的中間層來(lái)解決(Any problem in computer science can be solved by anther layer of indirection.) 對(duì)于大批量的開(kāi)發(fā)而言,OpenVINO的接口依賴(lài)會(huì)非常多,工程需要不斷的理解、修改、擴(kuò)展和維護(hù),需要花費(fèi)大量的時(shí)間和精力。因此機(jī)器人開(kāi)發(fā)人員期望將ROS和OpenVINO以及普通的深度學(xué)習(xí)框架進(jìn)行隔離,在軟件層次上進(jìn)行提煉,使其更專(zhuān)注于機(jī)器人感知和控制決策開(kāi)發(fā)。
因此,ros_openvino_toolkit應(yīng)運(yùn)而生,為上述問(wèn)題提供解決方案。
2. ros_openvino_toolkit應(yīng)用流程:
ros_openvino_toolkit會(huì)遵循OpenVINO的基本操作模式:通過(guò)第三方的方法,訓(xùn)練出一個(gè)模型(train a model),然后基于 OpenVINO 的模型優(yōu)化器,可將模型轉(zhuǎn)化成 OpenVINO 可識(shí)別的IR格式。隨后基于OpenVINO推理引擎(Inference Engine)來(lái)做出目標(biāo)識(shí)別,這個(gè)流程是標(biāo)準(zhǔn)的OpenVINO流程。
從流程圖中橙色部分可以看出, ros_openvino_toolkit作為OpenVINO到其他ROS應(yīng)用的一個(gè)中間環(huán)節(jié),需要起到了很好的抽象和隔離作用。
3. ros_openvino_toolkit功能簡(jiǎn)介與優(yōu)勢(shì)分析
ros_openvino_toolkit實(shí)現(xiàn)了OpenVINO Toolkit與ROS之間的功能封裝并實(shí)現(xiàn)接口。
ros_openvino_toolkit對(duì) OpenVINO 進(jìn)行技術(shù)上的隔離、封裝,完成對(duì)ROS環(huán)境的接口支持,提供對(duì)應(yīng)接口。
支持多種數(shù)據(jù)輸入方式,例如普通USB攝像頭、Intel Realsense深度攝像頭、ROS Image topic、圖片或視頻文件等等。
支持多種常見(jiàn)的視覺(jué)推斷功能,例如人臉識(shí)別(表情、年齡、性別、頭部朝向等等)、物體識(shí)別、基于交通場(chǎng)景的車(chē)輛、行人和道路識(shí)別以及物體分割等等功能。
推斷結(jié)果的多種結(jié)構(gòu)化輸出,包括ROS Topic,OpenCV的image window,Rviz 機(jī)器人視覺(jué)呈現(xiàn)工具等等。
硬件加速與軟件優(yōu)化:ros_openvino_toolkit繼承自 OpenVINO ,實(shí)現(xiàn)了硬件加速功能和軟件編程思路上的優(yōu)化。
靈活的推理流水線(xiàn)管理及用戶(hù)擴(kuò)展:可以在工程中選擇流水線(xiàn)的同/異步運(yùn)行機(jī)制,針對(duì)于不同的機(jī)器人業(yè)務(wù)場(chǎng)景,可以選擇不同的應(yīng)對(duì)策略。
模塊化設(shè)計(jì),即插即用 :ROS 本身即是一個(gè)基于模塊化的設(shè)計(jì)。ros_openvino_toolkit把 OpenVINO 做成一個(gè)模塊化的設(shè)計(jì),提高功能模塊的內(nèi)聚度并降低耦合度,使開(kāi)發(fā)更加簡(jiǎn)單和高效,更有利于其推廣使用,也體現(xiàn)出其擴(kuò)展方面的靈活性。
基于配置文件的流水線(xiàn)化模塊管理,用戶(hù)只需要修改yaml配置文件,即可對(duì)整個(gè)pipeline的運(yùn)行機(jī)制進(jìn)行重新定義,這樣可以輕松響應(yīng)多變的場(chǎng)景、部署需求。
4. ROS + OpenVINO 的應(yīng)用場(chǎng)景
對(duì)于常見(jiàn)深度學(xué)習(xí)應(yīng)用場(chǎng)景而言來(lái)說(shuō),最標(biāo)準(zhǔn)和常見(jiàn)的輸入數(shù)據(jù)來(lái)自于攝像頭(RGB,3D點(diǎn)云等),從攝像頭輸入的數(shù)據(jù)經(jīng)過(guò)ros_openvino_toolkit的pipeline機(jī)制,傳遞給深度學(xué)習(xí)推理硬件(比如CPU、GPU、FPGA、NCS2等)。得到的推理結(jié)果再經(jīng)過(guò) ros_openvino_toolkit的封裝成ROS topic、ROS Service、Rviz、Image Window等輸出,推理結(jié)果可以被廣泛運(yùn)用于機(jī)器人、機(jī)械臂、無(wú)人機(jī)、自動(dòng)駕駛等應(yīng)用場(chǎng)景…
參考資料
總結(jié)
以上是生活随笔為你收集整理的小白视角看ros_openvino_toolkit的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安装ROS环境时的常见问题及解决办法
- 下一篇: TDD代码驱动测试基础