Intel 神經計算棒NCS2簡介
英特爾NCS 2由最新一代的英特爾VPU(視覺處理單元)支持–英特爾Movidius Myriad X VPU。這是第一個具有神經計算引擎的VPU,可提供額外的性能。諸如Caffe,Tensor Flow或MXNet之類的深度學習神經網絡可以與NCS2上的OpenVINO工具包集成。這些機器學習框架針對全新的深度神經網絡(DNN)推理引擎進行了優化,該引擎提供的性能是前一代的八倍。借助電腦和Intel NCS2,開發人員可以啟動其AI和計算機視覺應用的開發,並在幾分鐘內執行。英特爾NCS2在標準USB 3.0上運行,不需要其他硬體,從而使用戶能夠無縫轉換由電腦訓練好的模型,然後將其部署到各種邊緣設備而不需連網或連雲。無論是開發智能相機,具有手勢識別功能的無人機,工業機器人,還是下一代智能家居設備,英特爾神經計算棒2都能為開發人員提供更快原型所需的功能。
智能機器手臂之視覺系統方案
接下來介紹這有趣的智能機器手臂之視覺系統方案,本方案是由許哲豪 Jack 開發的。Jack 是幫忙Intel 與Sertek 推廣Intel OpenVINO 與Intel NCS2 的專家。如果大大通的好朋友們,對AI 的應用與開發有興趣可以到Jack 的網站http://omnixri.blogspot.com/ 在這裡可以挖到很多寶喔。
方案目標
本方案希望透過物件(小蕃茄)標註、訓練、推論(偵測)及深度資訊整合的框架及工作流程來讓讀者了解AI 應用開發的流程,解決自動計算小蕃茄(水果)空間位置(XYZ),利用深度感測器Intel RealSense D435(以下簡稱D435)及神經運算棒二代Intel Neural Compute Stick 2(以下簡稱NCS2)加上開源視覺推論及神經網路優化工具包Intel OpenVINO (自帶簡化版OpenCV 3.4.1)來說明與實作一下「智能機器手臂的視覺系統」。
本方案主要是利用D435擷取到的彩色影像結合深度學習的物件定位算法YOLOv3找到水果位置(X,Y),當CPU算力不足時還可使用Intel GPU或VPU(NCS2)加速計算,最後再加上D435擷取到的深度影像所對應位置的深度(Z)資訊,未來就可以讓機器手臂正確地伸到正確空間位置(XYZ)夾取及摘取(剪切)水果了。
YOLOv3訓練小蕃茄影像
本方案主要是以小蕃茄做為機械手臂視覺系統的模擬採收對象,但是一般常見開放資料集(如ImageNet, MS COCO)都沒有合適的,所以只好自己收集、標註資料集。由於撰寫本文時非生產季節加上沒有合作的伙伴可以提供實際農場取像,於是只好上網買了一串塑膠製的小蕃茄,外觀看起來非常逼真,作為本次實驗的對象。
本次實驗取像及測試的環境如圖1所示。筆電上預先裝好RealSense SDK及OpenVINO SDK,並插入神經運算棒(Intel NCS 2)作為加速計算用。RealSense D435插入筆電的USB 3.0埠(不支援USB 2.0),小蕃茄距離D435約30公分,分別對小蕃茄正面和背面取像作為樣本。為了快速取得大量樣本,令攝影機每隔10個影格(0.33秒)拍一張照,拍攝期間以手移動小蕃茄位置及角度,以獲得更多樣性的樣本。
圖1 取像及測試工作環境示意圖(OmniXRI整理製作)
為了節省後續標註及訓練時間,所以只取得正面92張,背面79張,合計171張樣本影像。當然這樣的數量對深度學習的訓練是非常不夠的,這裡只是為了說明工作流程,所以暫時忽略後續訓練及偵測正確性的高低。由於如何標註、訓練資料集的工作步驟頗多,所以請直接參考【AI_Column】如何以YOLOv3訓練自己的資料集─以小蕃茄為例[10]。
經初步測試後,正確率實在有點糟糕,可能是小蕃茄(待偵測物件)重疊的太嚴重且訓練及驗證集的數量太少,同時又沒有利用資料擴增手段改善。因此只能先用訓練集來充當測試集,當然這只是為了方便解釋後面的工作流程,一般正常情況下是絕不允許拿訓練集或驗證集來測試的,因為這樣很容易落入過擬合區間造成正確率會異常飆高的問題。
若先排除上述過擬合問題,測試集被框到的小蕃茄數量明顯比實際少很多,且很容易出現過大或過小的框,所以就在程式中加入長寬尺寸及比例來限制不正常的物件被偵測到。經過限制後被框到的小蕃茄位置及尺寸大致都還算正確,可是置信度高低差很多,有些甚至低到0.1(10%)以下,所以只好將置信度的門檻值設低一些,才不致於找不到任何物件,但缺點就是誤判的機率就增高了。
至於正面及反面何者偵測較為正確,正面會辨識率略高於反面,猜想可能是綠色的蒂頭沒有很確實被訓練到吧?另外雖然標註時已針對遮蔽小於1/2的小蕃茄都有加以標註,但實際上辨識出來的結果仍以形狀較完整的被偵測到的機率較高。如圖2即是小蕃茄在正面及反面以OpenVINO™執行YOLOv3的偵測結果。而圖3及圖4分別是原始影像及物件偵測結果影像動畫GIF檔示意檔,完整171張版動畫GIF檔請參考[11]。
圖2 小蕃茄偵測結果影像,左:正面,右:反面。(OmniXRI整理製作)
圖3 小蕃茄原始影像檔(OmniXRI整理製作)
圖4 小蕃茄偵測結果影像檔(OmniXRI整理製作)
物件偵測加深度影像整合測試
經過前面的努力後終於可以進到最後的整合階段了,透過OpenVINO™執行YOLOv3物件偵測功能並正確找出數個小蕃茄位置後,接下來就要開始判定那個小蕃茄優先採收。一般農民會從最靠近自己或最外層的開始採收,換一個說法就是距離最近的,此時RealSense D435的深度影像功能就派上用場了。不過事情有這麼簡單嗎?
「李組長眉頭一皺,發覺案情並不單純」,從圖5中可看出有幾個問題:
- 深度攝影機的視野略大於彩色攝影機一些,導致小蕃茄在二組影像中的位置及尺寸也略有不同。
- 深度影像並不是很完整,有些破碎,尤其在物件邊緣更是嚴重,甚至有陰影區(深度呈現黑色區域)無法計算出深度問題。
- 小蕃茄被框到的區域像素很多,就算對應到正確的位置,深度資料不只一筆要以何者為主。
- 小蕃茄本身直徑約10~20mm,而D435能穩定表達的深度差大約5~10mm(視外在光源及攝像品質而定),所以不同深度或相鄰小蕃茄可能存在極接近甚至相同深度值,導致同時有數個小蕃茄產生相同採收順序。
圖5 RealSense D435深度影像與原始彩色影像比對。(OmniXRI整理製作)
從上述問題大概可知要讓機器手臂視覺系統穩定辨識出待抓取物件的距離真的不簡單,這裡並不給出唯一解法,只是提供一些可能的做法,其它的留待有興趣的朋友繼續研究改善,以下就提供一些個人解題思考方向。
1.首先是視野問題,若被檢出物件較大(是指佔畫面比例而非實際外觀尺寸)則可忽略此一問題,但待檢物像小蕃茄尺寸時,則可能需要作簡單視野校正工作,令深度影像放大、平移一些以符合彩色影像位置,如此就可取得較正確深度資訊。
2.再來深度解析度不足問題可能不易克服,這屬於硬體限制,但對於更穩定檢出部份則可以依實際現場狀況微調RealSense D435的Laser發射功率。當攝影機太靠近待測物時,若Laser發射功率太強則會造成紅外線影像不是有一堆細小光點,而是會變成一片慘白,那會造成不易計算正確視差(深度)。
3.關於要以何點的深度(距離)做為機械臂向前伸的距離,最簡單的想法就是以框的中心點作為基準即可,但不幸的是這個點可能沒有值或者值受到干擾而和實際有很大差距。如果容許較長的計算時間,則可考慮把框內所有深度值排序後取中位數或者以高斯分佈(中間優先權越重,越往外側權重越低)計算深度值均值。當然若考量計算時間,則可在框中心取一小塊(如10×10點)直接取平均值亦可。
4.最後是遇到深度相同問題時,則建議從物件框中心較靠外側、上方的小蕃茄開始採收,如此較不會發生,下方小蕃茄被其它擋住,機械爪不易進入剪切問題。
參考文獻
[1] Sweet Pepper Harvesting Robot (2018) https://youtu.be/DUgjFaYyecE
[2] 採收機器人_視覺篇 http://omnixri.blogspot.com/2018/08/blog-post_28.html
[3] 採收機器人_夾爪篇 http://omnixri.blogspot.com/2018/09/blog-post_28.html
[4] 採收機器人_機器手臂篇 http://omnixri.blogspot.com/2018/10/blog-post.html
[5] 3D感測可行技術與開發工具剖析 https://omnixri.blogspot.com/2019/09/intel-realsense-dev-meetup13d.html
[6] Intel® RealSense™ Depth Camera D400-Series https://software.intel.com/realsense/d400
[7] 【3D感測器】Intel RealSense™ SDK無痛安裝指引 https://omnixri.blogspot.com/2019/10/3dintel-realsense-sdk.html
[8] Sample Code for Intel® RealSense™ cameras https://dev.intelrealsense.com/docs/code-samples
[9] 【3D感測器】如何擷取Intel RealSense™串流影像到OpenCV http://omnixri.blogspot.com/2019/11/3dintel-realsenseopencv.html
[10] 【AI_Column】如何以YOLOv3訓練自己的資料集─以小蕃茄為例 https://makerpro.cc/2019/12/train-your-dataset-with-yolov3/
[11] Github YOLOv3偵測小蕃茄原始及結果影像檔 https://github.com/OmniXRI/OpenVINO_RealSense_HarvestBot/tree/master/my_yolo3/Result
[12] Github realsense_object_distance_detection https://github.com/movidius/ncappzoo/tree/master/apps/realsense_object_distance_detection
[13] Github PINTO0309/MobileNet-SSD-RealSense https://github.com/PINTO0309/MobileNet-SSD-RealSense
本方案引用作者:「歐尼克斯實境互動工作室 作者:Jack Hsu」
https://makerpro.cc/2019/12/use-openvino-and-realsense-for-mechanical-arm-3d-vision/?fbclid=IwAR1k2f3F_0bTvUbSwI0W2Vn64MNTCme7vfnHrEiaxIRBpetqGdHnKxbdFww
►場景應用圖
►展示板照片
►方案方塊圖
►核心技術優勢
1. Intel RealSense D435 camera a. 低成本的3D雙目深度相機 b. 提供完整SDK 可以快速與系統整合 c. 可快速掃瞄,提供點雲資訊 d. 可透過ROS整合開發自主創新功能 e. 智能化3D物件辨識 2. Intel OpenVino Toolkit a. 可最佳化訓練好的模型 b. 支援業界、學界常用的訓練框架 c. 可快速部屬到intel 的硬體平台如CPU、GPU、VPU、FPGA d. 提供常用的預訓練模型如SSD、YOLO 等 e. 提供C++ 與Python 的應用範例,縮短程式開發週期 3. Intel® Neural Compute Stick 2 (Intel® NCS2) a. 在英特爾®Movidius™Myriad™X視覺處理單元(VPU)上提供卓越的每瓦每美元效能進行構建和擴展 b. 支援Windows®10,Ubuntu *或macOS *上快速開發 c. 在通用框架和開箱即用的範例應用程式上進行開發 d. 在不需連雲情況下進行操作 e. 在低成本的邊緣設備(例如Raspberry Pi * 3和其他ARM *主機設備)端開發原型
►方案規格
1. 3D相機: Intel RealSense D435 Camera 2. 作業系統: Windows 10 3. Intel NUC Rugged Board with Core i3/i5 Processor 4. AI 推論套件: Intel OpenVino Toolkit 2020.03 5. 記憶體: 4GB 以上 6. 傳輸介面: USB 3.0 7. 神經計算棒: Intel® Neural Compute Stick 2 (Intel® NCS2)