祝裕璞 李梓 邵國強 張百順
(大慶師范學院 黑龍江省大慶市 163712)
物體檢測技術,通常是指在一張圖像中檢測出物體出現的位置及對應的類別。
在計算機視覺眾多的技術領域中,物體檢測是一項非常基礎的任務,圖像分割、物體追蹤、關鍵點檢測等通常都要依賴于物體檢測。此外,由于每張圖像中物體的數量、大小及姿態各不相同,也就是非結構化的輸出,這是與圖像分類非常不同的一點,并且物體時常會有遮擋截斷,物體檢測技術也極富挑戰性,從誕生以來始終是研究學者最為關注的焦點領域之一。工欲善其事,必先利其器。對于物體檢測的學習,選擇一個優秀的開發框架是一件十分重要的事情。下面對目前流行的幾種開發框架進行介紹。
OpenCV(Open Source Computer Vision Library)即開放源代碼計算機視覺庫,目前它已經包含了2500 多個算法,主要算法涉及圖像處理、計算機視覺和機器學習相關方法。應用領域覆蓋了工業產品檢測、醫學成像、無人機飛行、無人駕駛、安防、 衛星地圖與電子地圖拼接、信息安全、用戶界面、攝像機標定、立體視覺和機器人等。它可以運行在Linux、Windows、Android 和Mac OS 操作系統上,支持的高級語言包括:C、C++、Python、JS、Ruby、MATLAB 等。
OpenCV 主要特點:
(1)OpenCV使用了兩步PR審核。當開發者提交pull request后,PR 首先需要通過OpenCV Buildbot 的自動測試,包括18 種測試配置。當PR 通過了自動測試后,OpenCV 核心團隊的成員將會對PR進行審核,若通過則此PR 將會被集成進OpenCV 主版本中。
(2)OpenCV 實現不同平臺加速的思想是:寫一份代碼,則可在不同操作系統平臺上運行。對于CPU,OpenCV 使用了parallel_for() 和universal intrinsics API 來實現這個目標;對于GPU,OpenCV 則使用了T-API。用戶不需要針對不同的平臺編寫不同的加速代碼,只需使用OpenCV 提供的這些函數和API 則可實現一份代碼在不同的平臺上運行。OpenCV 內部替用戶實現了不同平臺上的加速代碼。
(3)OpenCV_DNN 模 塊在2017年3.4.x 版本中 從OpenCV contrib 進入主干部分,并且隨后不斷得到改進和更新。DNN 模塊實現了深度學習的前向推理計算,它支持Caffe、Tensoflow、Torch、Darknet 模型,無需用戶安裝對應的深度學習框架,也無需進行模型格式轉換。DNN 模塊包含了大量的單元測試。在進行推理計算時,后端有多種加速方式可以選擇,例如OpenVINO、Vulkan、Tegine、cuDNN 等。DNN 提供了C++/Python 調用接口以及調用實例,比如分類、目標檢測、圖像分割、定制layer等典型應用。
SLAM 是 Simultaneous Localization and Mapping 的縮寫,中文譯作“同時定位與地圖構建”。它是指搭載特定傳感器的主體,在沒有環境先驗信息的情況下,于運動過程中建立環境的模型,同時估計自己的運動。如果這里的傳感器主要為相機,那么這種SLAM被稱為“視覺 SLAM”。
周圍的人七嘴八舌給他出主意給他提醒他都充耳不聞,徑直朝池塘邊走去。突然看見一個和他年紀差不多的中年男人,手握一把菜刀朝他齒牙咧嘴比劃著什么。還看見在那人背后的池塘水中,有一個小女孩水已經淹到了胸口,邊哭邊舉起雙臂,一頭拴在女孩手臂上,一頭被持刀人逮在手上的繩子正在不斷搖晃。
視覺 SLAM 流程分為以下幾步:
(1)傳感器信息讀取。在視覺 SLAM 中主要為相機圖像信息的讀取和預處理。如果在機器人中,還可能有碼盤、慣性傳感器等信息的讀取和同步。
(2)視覺里程計 (Visual Odometry, VO)。視覺里程計任務是估算相鄰圖像間相機的運動,以及局部地圖的樣子,VO 又稱為前端(Front End)。
(3)后端優化(Optimization)。后端接受不同時刻視覺里程計測量的相機位姿,以及回環檢測的信息,對它們進行優化,得到全局一致的軌跡和地圖。由于接在 VO 之后,又稱為后端(Back End)。
(4)回環檢測(Loop Closing)。回環檢測判斷機器人是否曾經到達過先前的位置。如果檢測到回環,它會把信息提供給后端進行處理。
(5)建圖(Mapping)。它根據估計的軌跡,建立與任務要求對應的地圖。
某些使用場合中,我們只截取SLAM 的部分功能應用到實際場景中。舉例來說只使用VO 部分我們可以得到連續的相機相對運動信息,雖然該運動信息存在累計誤差,但應用中對此要求不高甚至不做要求,譬如VR 頭顯中計算頭顯設備運動時的位姿。
在2018年NeurIPS 大會上,Facebook 推出了PyTorch 1.0 版本,該版本吸收了Caffe 2 和ONNX 模塊化及面向生產的特點,使得算法可以從原型快速無縫對接到生產部署中。這意味著,PyTorch 的生態將更加完備,在進行算法原型研究、移動部署時將更加便利。

表1:幾種流行的開發框架的對比
PyTorch 以它良好的擴展性和超高的實現速度,近年來已贏得了不少開發者的喜愛和贊賞。首先,PyTorch 支持 GPU,這就能夠顯著提升代碼的運行效率。同時,相比 TensorFlow 和 Caffe,PyTorch 擁有反向自動求導技術,讓你在調整自定義模型的時候不必從頭開始,幫助你節省不少的開發時間。
此外,PyTorch 的代碼還比 TensorFlow 的代碼更加簡潔直觀、友好易懂,堪稱是非常優質的學習案例,這也能幫助許多開發者更深度地理解機器學習。
幾乎涵蓋所有主流的物體檢測算法,包括VGGNet、ResNet、 FPN、DenseNet 和DetNet 等卷積基礎網絡,以及從Faster RCNN、 HyperNet、Mask RCNN、SSD、RefineDet、YOLO v1 到YOLO v3、 RetinaNet、CornerNet 和CenterNet 等物體檢測算法,呈現給讀者一個完整的知識體系。
2020年,Facebook 開源了PyTorch 3D 計算機視覺庫,這個框架將3D 計算機視覺和深度學習結合,用于對三維數據的預測和計算。PyTorch 3D 實現了以下新特性:
(1)一個可微分的網格生成器。
(2)高效處理三角網格的算子,如投影變換、圖卷積、采樣、損失函數等。
(3)他們提出了新的3D 數據結構——Meshes,這種數據結構可以更好地存儲和修改三角網格的數據。
2015年,谷歌大腦(Google Brain)團隊推出了深度學習開源框架TensorFlow,其前身是谷歌的DistBelief 框架。憑借其優越的性能與谷歌在深度學習領域的巨大影響力,TensorFlow 一經推出就引起了廣泛的關注,逐漸成為用戶最多的深度學習框架。
Tensorflow 實現了“Openpose”人體姿勢估計算法。它還提供了幾種變體,這些變體對網絡結構進行了一些更改,以便在CPU或低功耗嵌入式設備上進行實時處理。
2020年,谷歌AI 推出了 TensorFlow 3D(TF 3D),它是一個開源的、高度模塊化和高效的處理庫,將3D 深度學習能力引入到了TensorFlow 框架中。TF 3D 庫基于 TensorFlow 2 和Keras 構建,使得更易于構建、訓練和部署3D 語義分割、3D 實例分割和3D 目標檢測模型。TF 3D 提供了一系列流行的運算、損失函數、數據處理工具、模型和指標,使得開發、訓練、部署3D 場景模型更加地方便和高效。TF 3D 還包含用于SOTA 3D 語義分割、3D 目標檢測和3D 實例分割的訓練和評估 pipeline,并支持分布式訓練。該庫還支持3D 物體形狀預測、點云配準和點云加密等潛在應用。此外,TF 3D 提供了用于訓練和評估標準3D 場景理解數據集的統一數據集規劃和配置,目前支持Waymo Open、ScanNet 和Rio 三個數據集。
隨著深度學習的快速發展,計算機視覺在多個領域都取得了令人矚目的成就。同時,日新月異的深度學習技術也推動了許多開發框架的快速更新,表1 對幾種流行的開發框架做簡單的對比。
支持物體檢測的開發框架還有很多,例如,MXNet、Keras、Caffe 等,每個框架都有自身的優勢和不足,開發時選擇哪一個框架也沒有一個統一的標準,很多應用往往需要使用2 個或2 個以上框架共同完成開發任務。所以開始一個新項目時,可以根據需要選擇更適合的開發框架。