当前位置:首页 期刊杂志

基于Movidius神经计算棒的物体检测研究

时间:2024-05-04

张海清,张 生

(上海理工大学 光电信息与计算机工程学院,上海 200093)

0 引 言

随着深度学习与计算机硬件逐渐完善,神经网络彻底改变了机器智能的许多领域,基于深度学习的方法已经被广泛应用于实时目标检测,能够在图像识别领域实现较高的精确度,它们一般建立在卷积神经网络(CNN)的基础上[1]。然而,提高精确度需要大量的计算资源,需要进行大量数据计算,给移动设备和嵌入式系统带来了挑战。云平台能够提供训练深度学习模型的最佳环境,但是推理通常是在服务器,台式机,移动设备和边缘设备中完成。融合人工智能(AI)的应用程序结合硬件和软件来加速在云中训练的深度学习模型的推理。将AI部署到边缘设备上非常重要,可以避免数据传输的延迟以及保护用户数据隐私。这些移动端的应用对算法运行效率有较高的要求,在低功耗边缘设备上部署物体检测与识别深度学习网络的相关工作是近几年来积极研究的领域。

目前已提出多种目标检测模型,基于深度学习的物体检测方法可以分为两类:一阶段(one stage)检测和两阶段(two stage)检测[2]。两阶段检测算法有基于区域建议(region proposal,RP)方法的R-CNN模型[3]、Fast R-CNN模型[4]、Faster R-CNN模型[5]、FPN模型[6]。一阶段检测算法有:基于回归方法的SSD模型[7]以及YOLO模型[8]。SSD模型是当中检测精确度相对较高的网络结构,传统的SSD算法采用VGG16[9]卷积作为基础网络进行特征提取,前向传播计算时间大部分用在基本网络中。考虑到低功耗嵌入式平台运算能力有限,需要轻量化的卷积神经网络,以实现轻量化模型。针对不同领域和产品(如机器人,无人机,机器视觉,智能家居),Up squared能够提供完美硬件解决方案,在性能良好的Up squared设备上能够实现基于深度学习的目标检测任务。

针对工业物体检测领域,该文提出了一种基于SSD MobileNetV2算法的铁钉检测方法,通过英特尔Movidius神经计算棒加速模型的实时推理,采用英特尔Realsence D435对检测的铁钉进行测距,实现在计算资源相对紧张的嵌入式边缘计算设备树莓派上进行铁钉检测,并在Up squared上进行实时的铁钉检测与测距。

1 SSD MobileNetV2

1.1 SSD算法研究

单发多框目标检测(single shot multibox detector,SSD)是一个单级检测器,在保持实时效率的同时,其精度可与两级检测器媲美。相对于需要区域建议的两阶段检测算法更加简单,完全消除了区域建议和后续的像素或特征重采样阶段,并将所有计算封装在一个网络中。SSD算法使用的是Faster-RCNN中的anchor机制(文献[8]中称之为default box),与Faster-RCNN不同点为SSD算法每层的feature maps的感受野不同,能够获得不同的特征向量。SSD算法在主干网络的特征图上,使用卷积滤波器预测锚框的分类置信度和目标边界框的位置偏移。SSD算法使用不同比例的候选框,以多种尺度的特征图进行预测,它将YOLO算法的全连接层删除,将全连接层换成全卷积层,显著提升了检测速度[10]。

SSD算法的主要流程如下:

·使输入的图像经过一系列卷积层,以不同比例(例如10×10、6×6、3×3等)生成几个特征图。

·对于特征图中的每个位置,使用3×3卷积滤波器输出一组默认边界框[11]。

·对于每个边界框,同时预测边界框位置偏移和分类置信度。

·在训练期间,将ground_truth框与这些基于IOU的预测框进行匹配。预测最准确的框将被标记为“正”。

SSD算法基于前馈卷积网络会生成固定大小的边界框集合,并为这些框中存在的物体进行打分,然后采用非最大抑制算法来筛选最终检测的边界框[12]。

1.2 非极大值抑制NMS

基于深度学习的目标检测算法在目标数据集训练好模型后,通过遍历的方式将图像输入到训练好的网络模型进行分类。首先,需要对输入的图像进行预处理,将输入调整为网络要求的尺寸大小并进行归一化操作。通过推理并返回位置信息和类别信息,对于预测的边框需要通过NMS算法选出有效检测结果,并在原图中画框。非极大值抑制本质为搜索局部极大值,抑制非极大值元素。NMS算法的输入为:候选框B,相应的置信度得分S和重叠阈值列表N。输出为:检测框列表D。NMS算法过程如下:

(1)将置信度得分排序,选取置信度最高的候选框,将其从B中删除,并将其添加到最终输出列表D中,D初始化为空。

(2)将该候选框与所有的候选框进行比较,计算该候选框与其他所有候选框的IOU(intersection over union)。如果IOU大于阈值N,则从B中删除该候选框。

(3)从B中的其余候选框中选择置信度最高的,将其从B中删除并添加到D中。

(4)再使用B中的所有候选框计算该候选框的IOU,并删除IOU高于阈值的框。重复此过程,直到B中没有剩余的候选框。

其中,IOU表示两个候选框的交集与并集部分的面积比值。它主要是衡量模型生成的锚框(bounding box)和标注的真实框(ground truth box)之间的重叠程度,计算公式为:

(1)

IOU越高,预测框的位置越准确,IOU阈值一般设为0.3~0.5。

SSD算法的损失函数由置信度损失(Softmax)与定位损失(Smooth L1)两部分组成,公式如下:

(2)

1.3 MobileNetV2网络

针对一些移动、嵌入式边缘设备,谷歌提出了MobileNetV2这种轻量级的深度卷积神经网络,其设计的宗旨是使移动设备支持图像分类与检测等。MobileNetV2[13]基于MobileNetV1[14]的思想,使用深度可分离卷积作为有效的构建块。但是,MobileNetV2向体系结构引入了两个新功能:(1)层之间的线性瓶颈;(2)瓶颈之间的快捷连接。MobileNetV2体系结构如图1所示。

图1 MobileNetV2体系结构

MobileNetV2体系结构基于反向残差结构,其中残差块的输入和输出是Bottleneck层,MobileNetV2对网络输入进行扩展升维,深度分离卷积,再压缩降维,与传统残差模型相反[15],传统残差模型在输入中使用扩展表示形式。MobileNetV2使用轻量级深度卷积来过滤中间扩展层中的特征。线性瓶颈(linear bottleneck)中包含了所有的必要信息,用shortcuts连接linear bottleneck,可以提升梯度在乘积层之间的传播能力,提高内存的使用效率。图1中Transformation模块是bottleneck卷积的基本实现:先用conv 1×1变换通道,再用ReLU6激活。中间是深度卷积,后接Relu;最后的conv 1×1之后不再使用Relu,而是使用linear bottleneck。

MobileNetV2共包含28个网络层,在该网络的卷积层中,第一层采用的常规卷积(Conv2d)运算,其他的卷积层中,均把常规的卷积运算拆分成了depthwise卷积(Conv dw)和pointwise卷积(Conv pw)过程,这两步运算被合称为深度可分离卷积(depthwise separable convolution)。深度卷积用来对每个输入通道应用单通道的轻量级滤波器,逐点卷积负责计算输入通道的线性组合构建新的特征。常规卷积与深度可分离卷积的过程的对比如图2所示。

图2 常规卷积与深度可分离卷积

假设常规卷积使用4个大小为3*3的卷积核,每个卷积核将对包含3个通道的输入进行卷积运算得到特征图,进行一次卷积需要4*3*3*3=108个要学习的参数。MobilenetV2将传统的convolution换成depthwise卷积和pointwise卷积,进行深度可分离卷积时,depthwise卷积的过程是使用3个二维的卷积核分别与输入的3个通道进行卷积,得到的3张特征图并与1×1×3大小的卷积核进行pointwise卷积输出特征图,但卷积过程中的参数却只有3×3×3+1×1×3×4=39个。其中depthwise卷积使用3*3大小卷积核进行3次卷积运算,pointwise卷积使用1*1*3大小卷积核进行1次卷积,总学习参数为3*3*3+1*1*3=39。深度可分离卷积通过减少了卷积过程中的学习参数来降低计算复杂度和模型的大小。

MobileNetV2通过增大depthwise卷积的步幅来实现对输入特征的下采样,除了最后的全连接层外,其他各个网络层的输出都先进行了一次批标准化,再使用Relu函数进行激活,实现加快模型的收敛速度。所有空间卷积核尺寸使用3×3卷积核大小,在32个卷积核的全卷积层之后接上17个反向残差瓶颈模块,并采用Relu6作为非线性激活函数,确保低精度计算的鲁棒性。

2 基于Movidius的开发应用流程

2.1 NCSDK开发流程

英特尔Movidius神经计算棒(NCS)是一款深度学习加速计算设备,旨在为低功耗移动和嵌入式视觉等边缘设备上加速AI推理,例如树莓派或Up Squared board。目前已推出NCS1和NCS2两个系列。1代神经计算棒NCS基于英特尔Myriad 2 VPU(视觉处理单元),2代神经计算棒NCS2基于Myriad X VPU,性能显著优于1代。1代需要依赖NCSDK环境中进行编译、部署,以实现加速网络计算,NCSDK包括一组用于编译,分析和验证深度神经网络的软件工具,还包括用于以C/C++或Python开发应用程序的Intel Movidius NCAPI。基于NCSDK的开发流程如图3所示。

图3 NCSDK应用开发流程

2.2 OpenVINO开发流程

2代神经计算棒在NCSDK上不支持,而是使用OpenVINO代替NCSDK。OpenVINO是英特尔发布的视觉推理和神经网络优化软件开发套件(SDK),旨在为英特尔视觉产品(支持AI的处理器和加速器的产品组合)之间扩展工作负载并优化性能。OpenVINO详细的开发应用流程如图4所示。

图4 OpenVINO应用开发流程

3 实 验

3.1 硬件设备

实验主要硬件设备如图5所示,实验中分别采用了树莓派3B+和UP Squared开发板,UP Squared采用英特尔赛扬TM,奔腾TM和凌动TM处理器,是工业物联网边缘设备的理想选择。搭载Intel MovidiusTMMyriadTM2 VPU的UP Squared只需很少的功耗即可实现本地深度学习和计算视觉算法。UP Squared board大小与树莓派相同,可以运行一般的Windows、Linux或Android系统。

图5 实验主要硬件设备

3.2 数据集预处理

深度学习模型需要大量的训练样本,由于很难具有足够采样的数据集,可通过数据增强方法扩充数据集,数据增强策略在提高模型的精度与泛化方面非常重要。为此,对所有训练图像进行随机采样,通过对输入数据进行变换,自动生成新的训练样本。例如,移位、随机裁剪、旋转、垂直和水平翻转图像。实验中需要检测的物体只有一类,原始采集的图像有一百张,通过数据增强扩充数据集,总共200张,其中,90%用于训练,10%用于测试。

标注图像使用的是labelImg工具,每标注一张图片后,会产生一个.xml文件,由于检测物体只有一类(钉子,nail),标签映射pbtxt中只需一个item,id设置为1,name设置为nail。之后将标注图像生成的所有.xml文件转换为.csv格式,再将.csv文件转换为.Record文件,用于TensorFlow物体检测API进行训练。实验过程中使用Tensorboard查看模型训练指标,例如损失和精确度。

3.3 训练模型

随着计算机视觉在无人驾驶汽车、人脸识别、智能驾驶系统等领域的用例日益增长,用户希望能够建立定制的机器学习模型以实现物体的检测与识别。但是,从头开始构建训练模型需要大量的专业知识,时间和计算资源。为减少深度学习入门障碍,Google发布了TensorFlow物体检测API和TensorFlow Hub平台,使人们能够通过迁移学习来快速构建自定义模型。

该文使用Google推出的TensorFlow深度学习框架来训练模型,TensorFlow物体检测API能够轻松构建、训练和部署物体检测模型。通过物体检测API结合给定的图像数据集即可训练自定的目标检测模型。目前在庞大的数据集上已有许多可用的预训练模型,通过迁移学习在SSD MobileNetV2模型上进行微调,只需数小时即可完成模型的训练,进行推理即可获得较好的结果。SSD MobileNetV2模型在COCO数据集上经过预训练,数据集包含32.8万张带有250万个标注的实例图片,共91类物体。通过迁移学习,基于Google预训练的SSD MobileNetV2模型进行微调,采用随机梯度下降法(stochastic gradient descent,SGD)进行训练,动量因子为0.9,衰减因子为0.000 5。初始学习率为0.005,并使用指数衰减学习率衰减策略。在显存为8 GB NVIDIA RTX2070的主机上训练,整个训练过程为200 000次迭代。

3.4 转换与部署模型

基于TensorFlow训练导出的模型包含ckpt格式和固化的.pb格式文件,对于1代的神经计算棒NCS,需要通过安装NCSDK将训练好的模型编译为graph格式。如果是2代神经计算棒NCS2,则训练结束后要将导出的模型通过OpenVINO工具包中的模型优化器转化为中间表示IR格式,它由.xml和.bin两个文件组成。xml文件中保存了模型网络结构信息,bin文件中保存了模型的权重。之后结合神经计算棒将转换后的专用网络部署在边缘设备上进行物体检测。

4 实验结果与分析

表1和表2为实验中基于Movidius神经计算棒的铁钉检测结果。本实验中,基于树莓派的铁钉检测,USB摄像头的性能稍好于Pi摄像头。测试分辨率为640×480,将Pi Camera的分辨率降低到320×240,可以得到约5 FPS的图像,这表明可以通过降低输入图像的分辨率的大小以提高帧速率。与单个线程处理当前帧再等待处理下一帧相比,通过线程优化处理的检测效果有所提升。检测性能还会受帧中检测到的物体数量的影响,当有多个物体检测时,NCS需要对输出进行更多的反序列化和图像处理。与树莓派CPU相比,基于Movidius神经计算棒的检测推理速度获得明显提升。

表1 基于Movidius的树莓派检测性能

表2 基于OpenVINO和Movidius的检测性能

在搭载Movidius的UP Squared设备上测试(见图6),实时检测帧率约23.4 FPS,通过Realsence D435相机获取深度图像的深度值来计算被检测铁钉的距离,能够实时地检测铁钉并进行测距。

图6 基于Movidius神经计算棒的树莓派与Up Squared实时铁钉检测

5 结束语

实验在低功耗设备上进行基于SSD MobileNetV2的铁钉检测,比较了1代神经计算棒和2代神经计算棒在低功耗设备上的铁钉检测性能,并利用Realsence D435相机获取深度图像的深度值来计算铁钉的距离,在UP Squared平台上对检测的铁钉进行实时测距。实验结果表明,基于Movidius神经计算棒能够显著提升树莓派的物体检测性能。通过OpenVINO优化基于SSD MobileNetV2网络模型结构,结合英特尔2代神经计算棒与Reasence D435相机,能够在Up Squared上进行实时铁钉检测与测距。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!