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