基于 Intel 神经计算棒NCS2 的智能机器手臂之视觉系统方案

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整理制作)

图1 取像及测试工作环境示意图(OmniXRI整理制作)

为了节省后续标注及训练时间,所以只取得正面92张,背面79张,合计171张样本影像。当然这样的数量对深度学习的训练是非常不够的,这里只是为了说明工作流程,所以暂时忽略后续训练及侦测正确性的高低。由于如何标注、训练资料集的工作步骤颇多,所以请直接参考AI_Column如何以YOLOv3训练自己的资料集─以小蕃茄为例[10]。

经初步测试后,正确率实在有点糟糕,可能是小蕃茄(待侦测物件)重叠的太严重且训练及验证集的数量太少,同时又没有利用资料扩增手段改善。因此只能先用训练集来充当测试集,当然这只是为了方便解释后面的工作流程,一般正常情况下是绝不允许拿训练集或验证集来测试的,因为这样很容易落入过拟合区间造成正确率会异常飙高的问题。

若先排除上述过拟合问题,测试集被框到的小蕃茄数量明显比实际少很多,且很容易出现过大或过小的框,所以就在程式中加入长宽尺寸及比例来限制不正常的物件被侦测到。经过限制后被框到的小蕃茄位置及尺寸大致都还算正确,可是置信度高低差很多,有些甚至低到0.1(10%)以下,所以只好将置信度的门槛值设低一些,才不致于找不到任何物件,但缺点就是误判的机率就增高了。

至于正面及反面何者侦测较为正确,正面会辨识率略高于反面,猜想可能是绿色的蒂头没有很确实被训练到吧?另外虽然标注时已针对遮蔽小于1/2的小蕃茄都有加以标注,但实际上辨识出来的结果仍以形状较完整的被侦测到的机率较高。如图2即是小蕃茄在正面及反面以OpenVINO™执行YOLOv3的侦测结果。而图3及图4分别是原始影像及物件侦测结果影像动画GIF档示意档,完整171张版动画GIF档请参考[11]。

picture 2
图2 小蕃茄侦测结果影像,左:正面,右:反面。(OmniXRI整理制作)

picture 3
图3 小蕃茄原始影像档(OmniXRI整理制作)

picture 4
图4 小蕃茄侦测结果影像档(OmniXRI整理制作)

物件侦测加深度影像整合测试

经过前面的努力后终于可以进到最后的整合阶段了,透过OpenVINO™执行YOLOv3物件侦测功能并正确找出数个小蕃茄位置后,接下来就要开始判定那个小蕃茄优先采收。一般农民会从最靠近自己或最外层的开始采收,换一个说法就是距离最近的,此时RealSense D435的深度影像功能就派上用场了。不过事情有这么简单吗?

“李组长眉头一皱,发觉案情并不单纯”,从图5中可看出有几个问题:

  1. 深度摄影机的视野略大于彩色摄影机一些,导致小蕃茄在二组影像中的位置及尺寸也略有不同。
  2. 深度影像并不是很完整,有些破碎,尤其在物件边缘更是严重,甚至有阴影区(深度呈现黑色区域)无法计算出深度问题。
  3. 小蕃茄被框到的区域像素很多,就算对应到正确的位置,深度资料不只一笔要以何者为主。
  4. 小蕃茄本身直径约10~20mm,而D435能稳定表达的深度差大约5~10mm(视外在光源及摄像品质而定),所以不同深度或相邻小蕃茄可能存在极接近甚至相同深度值,导致同时有数个小蕃茄产生相同采收顺序。
picture 5
图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

场景应用图

sceneryUrl

展示版照片

frontUrl

方案方块图

funcUrl

核心技术优势

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)