出品 | 智東西公開課
講師 | 陳超 極智嘉研發總監
課件 | 關注智東西公開課公眾號,並回復關鍵詞「英特爾03」 ,即可獲取課件。
回放 | https://appoSCMf8kb5033.h5.xeknow.com/st/8Nl2ftuYV
導讀:
4月7日,極智嘉研發總監陳超在智東西公開課進行了一場的直播講解,主題為《物流機器人視覺感知和定位技術的創新和實踐》,這也是英特爾AI百佳創新激勵計劃系列專場的第3講。
在本次講解中,陳超老師圍繞物流機器人對視覺感知與定位的要求、智能叉車托盤檢測演算法、利用OpenVINO加速托盤檢測演算法部署,以及極智嘉VXSLAM定位技術與實踐,進行深入地講解。
本文為此次專場主講環節的圖文整理:
正文:
晚上好,我是來自極智嘉的陳超,今天很高興能跟大家一起分享物流機器人視覺感知和定位技術的創新和實踐。本次分享主要包含4個方面:
1、物流機器人對視覺感知與定位的要求
2、極智嘉的智能叉車托盤檢測演算法的解析
3、利用OpenVINO加速托盤檢測演算法部署
4、基於VXSLAM的AMR定位技術與實踐
物流機器人對視覺感知與定位的要求
對於普通的消費者,接觸比較多的是電商快遞,實際上一個完整的物流場景包含工廠物流、倉儲物流、快遞物流以及商業物流。除了電商之外,幾乎所有的實體產業都有一套非常完善的物流體系,它們都需要去解決自己的原材料、半成品的存儲運輸問題。
物流是一個非常很大的產業,它有很多環節,因此形成了很多智慧物流的場景,比如智能分揀、智能搬運、智能叉車、智能倉儲和智慧工廠。對於很多電商後台的倉庫來說,就是一個典型的智能揀選的場景。這裡我們可以採用一些貨架到人的機器人,把貨架搬到固定地點,進行人工揀選。智能搬運更多的用在工廠產線上進行一些物料、原材料的配送。分揀機器人主要是用在一些郵政以及快遞的系統進行包裹的投遞分揀。智能叉車主要是進行一些比較大重量的物品的短途轉移運輸,還有智能倉儲以及智慧工廠。在多種不同的物流場景的背後,就是多種形態機器人起到的支撐。
那對這些機器人的感知定位有怎樣的要求呢?首先,由於物流場景非常多樣化,這對機器人提出不同種類的要求,比如有機械臂類的機器人,它需要對商品進行識別定位;輥道機器人,它需要把貨物對接到指定的一些流水線上;還有一些搬運機器人、無人叉車等,不同的機器人會去完成一些特定的任務。
下面一個是叉車,叉車的負載能力非常強,但是它的危險性也會比較高。在叉車的工作環境中,無論是前面的叉耙碰到人也好,貨物也好,都會是比較嚴重的事故,那麼就需要高可靠性的演算法來保證機器人的安全性。
對於穩定性,相對於其他機器人,物流機器人對穩定要求可能是7×24小時的,在武漢的郵政系統的分揀場景里一共有數百台機器,不同類型的機器人緊密的協作進行包裹快遞的投送。我們可以想像一下,如果在這麼一個密集的場景內,機器人發生故障,將某些區域鎖死,那會造成重大面積的作業區域的癱瘓,會造成訂單的堆積。
右上角是日本豐田的產線,機器人可以進行一些零部件的對接,在這方面對精度的要求非常高。
極智嘉的智能叉車托盤檢測演算法的解析
除了上面提到的高可靠性、安全性的需求外,智能叉車還有一些獨特的特點,叉車的托盤有很多類型,有歐標的、國標的,還有非標的,還有一些是客戶定製的,它們有不同的材質,比如塑料的、鐵的、木頭的,它們有不同的形狀,有單孔的,雙孔的、多孔的,那就需要我們對多種類型的目標進行適配。在精度方面可以看到,其實叉車的叉耙還是比較厚的,相對於插孔,留給它定位的餘量其實就非常小,這就要求我們檢測演算法具有非常高的精度。
叉車上用的是深度相機,對於點雲的處理,現在已經有一些比較典型的方法,比如說早期的PointNet、VoxelNet,後期的 Point-GNN等,在這裡我們重點介紹下PV-RCNN,通常來講基於Voxel方法的計算效率比較高,但是它的定位精度偏低,基於Point方法感受野可變,一般具有較高的精度,PV-RCNN就是結合兩者的優點,它利用3D Voxel先做一個初定位,然後再關聯到其中的keypoint,做一個精細的定位。具體來說它其實包含兩個大的分支,第一是對原始的點雲進行3D Voxel的處理,得到一些候選的3D框,在另外一個方面進行一些原始點採樣,把關鍵點稀疏化,之後通過索引的方式關聯剛才Voxel所提取的多層級的特徵,進行融合,再進行目標的精細化。其實基於點雲的方法對我們來說是最直接的,但在實際使用中,托盤對於3D點雲數據的標註成本非常高,可能是圖像標註的10倍以上,所以我們還是採用了基於圖像的方法。
上圖左上角是獲取的深度圖,轉化成圖像之後,可以用一些大家熟知的兩階段的處理方法如Faster-RCNN和R-FCN,一階段的Yolo與RetinaNet等,在這裡介紹一個比較典型FSAF,我們知道在目標檢測里尺度是一個比較大的問題,為了解決尺度問題,現在主流的檢測器都採用了FPN的結構,然後再基於anchor在不同的層上去布置anchor,那麼就需要提前的去設置anchor的位置,以及它的各種尺寸與寬高比,那具體設置方法很多時候是基於一些啟發式方法,簡單來說,把一些目標的size框和各個特徵層上的anchor框進行一個IoU的計算、排序。IoU最大的,我們就認為是檢測層,這其實並不是一個最優的結果。FSAF主要針對特徵的選擇問題,它在RetinaNet的基礎上構建了SAF的分支,我們可以採用一個anchor-free的分支,輸出目標檢測的熱圖,然後用這個熱圖去指導anchor-base的方法的進行目標檢測,這樣可以通過學習訓練的方式得到最優,最終我們能夠選取什麼樣的尺寸,什麼樣尺度的目標,應該在什麼樣層上去檢測。FSAF它有一個很大的優點是它是一個模塊化的方法,它可以直接的集中在很多的主流的檢測演算法之後,對演算法的性能都有一定的提升。
最後看下我們的檢測方法,首先,大家知道主流的目標檢測都是基於bounding box的形式,簡單來說就是拿一個bounding box無論是anchor也好,或者是其他方式,在整個圖像里去密集的採樣,然後最終回歸出目標的類別和它的位置。後來誕生了一些基於關鍵點的方法,因為anchor的方法,我們要對anchor進行更加精細的設計,要預先有很多的先驗在裡面,有很多的超參數。後來基於關鍵點的方法主要有兩類,一類是像基於這種左右 left top和right bottom的 CornerNet的方法。還有一類是基於CenterNet的方法,是基於目標的中心點,先把目標的中心檢測出來,然後再去回歸它的屬性,包括它的邊界。這裡我們結合兩種方法的特點,採用的是5點去描述,因為前面也提到我們對目標的精度要求非常高,那麼大家可以想像在圖像的視野里,其實托盤並不是一個真正的矩形框,它其實是一個四邊形,我們用額外的4個點去檢測會取得更高的精度。其實也是先通過一個Encoder-Decoder網路生成一個目標的中心點的熱圖,熱圖中的熱度就代表了目標的概率,得到概率之後進行篩選,我們再進行關鍵點的回歸。
該方法有一些特點,首先是一階段的方法,它沒有RPN的過程,沒有了信息阻塞,前端的特徵可以直接傳遞到最終的檢測層,我們相信這一類的方法將來可能會有比較高的天花板。另外,由於是非bounding box的方式,沒有NMS的操作,所以速度會更快。此外,由於採用的是編解碼的形式,我們可以直接在高解析度圖上檢測,所以不像一般的目標檢測可能會在低解析度或者是FPN的結果上去檢測,所以也會有更高的精度。
最後對於另外一個分支,我覺得也是非常重要的一個分支,它支持整個托盤檢測演算法設計的一個重要目標:高可靠性。那具體怎樣做?我們會建立另外一個Verification的分支,它同時接受網路檢測的輸出與托盤先驗模型。因為事先有一些托盤模型的資料庫,那麼我們可以拿資料庫里的托盤模型和我們檢測的結果做一個相似性的判斷,判斷出我們檢測的置信度,還是像剛才提到的在實際應用中,我們寧願檢出率低一點、漏掉一些目標,但是一定不能讓叉車進行錯誤的叉取,以免造成傷害。這其實是我們結合類似於領域知識來對網路性能的一個提升。
利用OpenVINO加速托盤檢測演算法部署
首先,在伺服器端訓練網路模型,然後基於OpenVINO對模型進行優化以及轉化,最終利用VINO的部署引擎,在Core i3的計算平台上,在機器人端進行部署。
可能有的朋友對OpenVINO並不太熟悉,在這裡我們簡單介紹下,OpenVINO是英特爾推出的一款針對深度學習和傳統視覺的加速優化框架。它可以支持英特爾目前絕大多數的計算平台,包括CPU、集成顯卡等等。它提供了統一的API讓我們的演算法一次編譯、一次優化,快速的在不同的平台上進行移植。我們重點看一下DeepLearning部分的模型優化和推理引擎兩部分,模型優化部分可以接收好訓練好的模型,然後轉化成內部特有的IR格式,然後部署推理引擎部分有一些硬體指令級層面的優化,它是一個非常輕量、高效的部署框架,可以快速的輕量級的部署在我們的嵌入式平台上進行模型的推理。在Deep Learning部分其實裡面還提供了很多預訓練好的模型,更重要的是提供了很多非常實用的工具,比如calibration tool可以進行一些量化,後面我們也會講到,包括模型性能分析,一些可視化的工具等等。在傳統視覺方面,也對大家都熟悉的Opencv和OpenVX做了一些指令集的優化,同時也提供了構建一個視覺處理完整pipeline 所需的一些底層的media SDK。
接下來講下模型優化這部分,模型優化器是整個OpenVINO的框架里最核心的部分之一,它目前支持幾乎所有主流的框架,我們用的是TensorFlow,但是它也支持Pytoech、Caffe等,它可以對模型的拓撲結構進行分析,然後進行一些優化操作,然後轉化。
下面重點看下模型優化技術,其實可以看一下右邊這張圖,在很多的網路里需要有BN層,BN層大家知道其實就是一些bias和scale的先行操作,在這裡單獨做一層,其實計算效率並不高。是模型優化器,可以自動的去根據拓撲結構對這些網路進行一些合併,可以把的BN層往前合或往後移。可以看到網路的結構大為精簡,更重要的是推理的速度會大幅的提高。
另外還有一些stride的優化操作,像在Resnet等一些結構里有很多1×1的卷積,同時它的stride可能是大於1的,對於這些操作,我們可以把stride進行前移,比如可以看下上圖右下角的例子,前面是56×56的輸入,然後兩個分支都是在這裡進行了kernel_size為1,但stride為2的操作,其實很多先前的一些計算被丟掉了,我們可以把它往前移,在前面的分支上構stride為2,kernel_size為1的操作,讓輸入特徵圖從前面就大幅的縮減,那麼整個效率的提升是可想而知的。
最後看下推理引擎,推理引擎其實可以針對不同的平台進行優化。我們重點講一下INT8的推理,我們知道INT8相對於普通的FP16的方式有很多優點,它的能效更高,單指令執行產出更多,帶寬更高,內存消耗更低等。
這裡面我們可以利用calibration tool進行一些模型的量化。具體過程是可以先在校準數據集上運行訓練好的模型,然後記錄下在float32下每層的激活數據,接下來可以對所有可能轉化的轉化成INT8的層級進行轉化推理,然後收集一些精度下降的數據,比如某些層轉換完之後,它的精度可能下滑了一個點是不能接受的,而有些層可能是幾乎沒有什麼變化,我們就去轉化它。
在進行這些模型的直接量化標準之後,我們可以讓32位的模型可以以INT8的方式進行推理。不同的平台不一樣,此項操作大概會有30%的性能的提升。基於前面的模型優化與推進引擎,我們還需要構建整個檢測流程的一個pipeline。那就用到了我們之前提到的英特爾的底層的一些媒體處理庫,比如media SDK做一些編解碼的操作,包括Opencv的前端的預處理,包括後端的後處理等等,中間是我們的IE部分的推理框架。採用了OpenVINO與我們基於傳統Opencl等等手工優化的方式來比,整體性能有了4倍的提升。
最後看下我們的一些落地案例,左圖是疫情期間在歐洲某國際巨頭醫藥廠商的倉庫里落地的叉車。貨物裡頭裝的都是藥品,我們可以想像對叉車的安全性要求非常高,藥品是非常昂貴的。右圖是一個石膏板廠的項目,大家看到這裡的托盤類型就比較多了,這裡頭是雙孔的,其實嚴格意義來講,它並不是托板,這是客戶就地取材,用他們石膏板的板材進行切割,做成了托盤的樣子。我們看到上面有一些纏繞膜,他們會有一些垂落,所以這個項目對我們的定位精度提出了非常大的挑戰。最終我們也是通過以5毫米的定位精度,滿足了客戶的要求,成功的部署。
基於VXSLAM的AMR定位技術與實踐
首先,簡單的介紹下AMR,AMR是自主移動機器人的簡稱,與我們所熟悉的AGV相比,它有一些不同,最重要的一點是定位和導航的方式的不同,傳統的AGV主要是基於在地面上的一些引導線,比如一些色帶或者一些磁條或者是一些電線等進行導航,後期有一些在地面上布置二維碼的方案,還有一些在牆壁貼反光板的方案。
但無論怎樣,傳統AGV的導航的路徑一般都是比較固定的。與之對應AMR主要是基於SLAM的定位方式,它無需對環境的基礎設施進行改造,事先建立一個環境地圖之後就可以進行定位。基於不同的定位和導航方式,他們有以下的不同,比如說AGV更適合執行相同的任務,它更適合傳統的業務,而AMR我們可以對它進行靈活的配置,無論是線路也好還是任務也好,它更適合敏捷性的業務。比如製造業一個典型的場景,它具有作業點位比較多,業務變化頻繁,人機混行的情況,那AMR可能是一個更適合的方案。
SLAM技術,傳統SLAM包含激光SLAM、視覺SLAM,甚至有超聲波的SLAM和防撞條的SLAM,但無論是哪種SLAM,本質上都是一個狀態估計的問題。載有感測器的機器人在環境中運動,通過對地標點進行觀測,來估計自身的一個位置變化。同時我們把所有的地標拼接起來,構建一幅地圖,這就是SLAM。
傳統的視覺SLAM,可能有一些比較好的方案,比如RTAB-Map, LSD-SLAM, VINS-Fusion等。近些年來隨著深度學習技術的引入,對於傳統SLAM性能有了一定的提升。這裡我可能舉一個比較有代表性的HF-NET的例子,這裡也是分為離線的建圖和在線的定位兩個部分,在離線建圖部分,我們對於輸入的圖像序列,通過HF-NET來提取它的local feature,這裡用的是super point,然後通過SFM的方式來構建整個場景的地圖,這裡主要是把特徵點進行三角化。
另一方面,通過HF-NET來提取一些全局的特徵,之後對特徵進行聚合,這裡主要是用於後續的地點識別。在線定位階段,根據機器人端輸入的圖像,HF-NET可以先提取它的全局特徵,然後基於地點識別的模塊,在整個場景中選取一些候選的位置。另外一個分支提取一些local feature,將local feature的位置與候選的一些3D點進行2D到3D的匹配來恢複位置。目前HF-NET的方法對於一些大場景以及包括一些變化,比如說光照變化比較大的場景的效果還是不錯的。
目前VSLAM有一些成功的案例,比較有代表性的就是谷歌的VPS,它基於手機上的一個攝像頭拍攝的單張的圖像,就可以進行室內和室外的定位,進而導航。另一家是Facebook,最近幾年 Facebook彙集了全世界做VSLAM領域比較有名的人才,包括收購了Zurich Eye / Oculus等等,做成了一套視覺定位的方案,效果還是比較穩定的。
VSLAM還存在很多挑戰,最重要的可能是動態環境方面帶來的挑戰,上圖是一個典型的倉庫里的環境,可以看到右上角都是紙箱,隨著作業時間的不同或者是任務的不同,這些擺放的料箱都會發生巨大的變化,比如機器人搬東西過去的時候可能會有三個貨箱,等再回來搬時可能一個都沒有。另外是光照的變化,通常產線上都是開燈的,但是有的時候有些作業點位會隨著時間進行排班等一些變化,導致AMR需要穿過一些關燈的區域。另外在倉庫或者是廠房裡,有些區域有巨型的天窗或者側窗,陽光的變化也會影響定位。另一方面是空曠場景下定位精度的問題。其實在很多的倉庫里,固定目標很少,只有幾個大的柱子,這些貨品都是隨著時間變化的,在如此空曠的場景下進行精確的定位,也是一個比困難的問題。
最後講下VXSLAM方案。首先說明下X的含義,可以從兩個維度來看,第一個維度是有多種不同的視覺元素,除了最典型的point、edge之外,更重要的是引入了object這種含有語義的信息。從另外一個維度來看,進行了異構感測器融合,首先最基本的是camera,此外還有IMU、Odom、激光。
我們整個系統設計最重要的目標就是高魯棒性,這點和前面提到的叉車是一致的。上圖是整個演算法的框架,最主要的是建圖和定位以及地圖管理。首先,建圖部分接受感測器輸入的圖像以及各種數據之後,進行BA優化來構建地圖,同時比較特殊之處在於我們有一個object estimation模塊進行動態目標的去除和一些靜態目標的位置估計,把它加到地圖裡。另外地點識別模塊可以用來進行迴環的校正,在地圖管理模塊里,我們維護了各種異構的地圖,比如剛才提到的各種feature的地圖。從另外一個角度看,地圖是多層的,後面會向大家介紹。在定位階段,基於已經建立好的地圖及地點識別模塊給到的一些結果,綜合來對位機器人的位置進行估計。
首先講下異構地圖,大家知道激光SLAM,特別是單線激光SLAM,在機器人領域還是比較成熟的,它有很多的優勢。首先要融合的是激光的grid map,在這裡融合其實有很多的問題,可以看到兩種異構的感測器,他們的幀率不同、數據類型不同、特性不同,比如對於激光,它的全局一致性非常好,但是他在局部的卻存在抖動的情況,而視覺局部其實精度非常高,非常平滑,但是卻存在尺度漂移等問題。我們採用聯合優化的方式,能夠把激光的grid map和視覺的feature map做一個很好的融合,這樣在集成定位時,提升定位的魯棒性與精度。
另外一方面是object map,基於OpenVINO的平台,其實還運行著一個目標檢測與pose estimation的模塊,對於人包括臨時擺放目標,會進行一些去除,來防止對於建圖和定位的干擾。對於一些靜態目標,還會進行位置的估計。比如在產線上有一些固定的重型設備,包括一些柱子、牆面、消防栓等,我們會把它加到地圖裡面。
基於目標的定位精度並不是很高,但是對魯棒性的提升卻非常大,在很多時候特別是動態場景下,我們可以僅基於一個目標,就對位置進行估算,或者是對整個位姿進行一些不完全的約束。這對於提升機器人整體定位的魯棒性至關重要。
還有多層地圖,剛才已經提到一些地圖可能面臨的幾個比較重要的挑戰,其中第一個是動態環境,動態環境包括布局的變化,光照的變化,在倉庫里可能早晨、中午和晚上的光照非常不同。另外包括不同的作業區域,貨物的擺放可能也是隨著時間在發生變化,我們需要去建立一種多層的地圖,上圖是在不同時間段對同一個區域建立的地圖,我們可以把它放到一起進行聯合的優化。在整個地圖裡我們構建了靜態的參考地圖,在集成定位階段,可以根據各自的匹配程度與一些先驗來判斷基於哪個地圖進行定位。
最後看下客戶現場的落地,上圖左邊是它的一條產線,可以看到在產線的兩邊堆了很多的物料箱,每天清晨的時候,這些物料箱就會被機器人搬運到此處,隨著作業的進行,這些物料箱會被搬運至其他地點進行補貨,所以這個場景的動態性非常高。中間上面的圖像是建立的激光地圖,下面是視覺地圖,紅線是視覺定位的結果。
基於可靠穩定的感知和定位技術,AMR機器人可以實現1-3個月的快速部署,對產線的物流有2-3倍的效率提升,憑藉高投資回報率、高可靠性和敏捷性,我們相信在物流領域及AMR將會有更廣泛的應用。
最後總結下,以AI技術為核心,實現高可靠性的AMR感知與定位。我們一再強調可靠性與智能是我們在技術方面的兩個最重要的目標。基於此,我們希望打造高效、穩定的智能物流機器人解決方案,賦能全球企業實現物流智能化升級。