王俊,陈俊杰,刘 胜
(福州大学电气工程与自动化学院,福州 350108)
近年来,随着人工智能在工业领域的应用越来越广泛,嵌入式人工智能的基础应用与研究也显得更加重要[1]。将轻量化的神经网络模型部署在具有人工智能(Artificial Intelligence,AI)计算单元的嵌入式终端,实现AI在产业界实际落地应用成为当今嵌入式领域发展的一个重要目标,因此高校在相关课程的教学中,授课内容应与时俱进,授课方式应理论与实践高效结合,以达到更好地适应社会发展需求的目的[2]。
在自动化及控制工程学科领域对于本科生培养计划中,设有嵌入式系统设计这门课程,嵌入式系统具有独立运作的功能,在设备中起到控制整个装置作用。通常,嵌入式系统是一种将控制程序储存在只读存储器(Read-Only Memory,ROM)中的嵌入式处理器控制板,通过单个程序来实现整个系统的控制逻辑[3]。随着AI技术的不断发展,传统的嵌入式控制板已经无法满足社会产业的需求,要在一个嵌入式终端实现人工智能,就必须要有嵌入式操作系统以及一定程度的AI算法实现。嵌入式AI 的市场在制造业、农业、交通运输业等一系列工业自动化领域具有很大的潜力,在当今时代国内外都呈现出了AI、嵌入式两个行业相互促进发展的趋势[4]。从目前教学状况来看,嵌入式系统设计这门课程仍然大多停留在传统教学内容与方式上。如何在嵌入式系统当中融入AI,以更好地适应社会发展,也就成为当今教学改革的重要目标。
此外,随着国家大力推进新工科教育,对于学生的实践能力水平培养也更加重要,由于嵌入式所涉及的领域广泛,应用于大量的工业场景,所以对于学生的实践水平有较高的要求,因此将实践平台与教学相结合,将教学与社会热门和社会需求相适应,推动嵌入式系统设计这门课程的教学改革显得至关重要。
通过设计一套基于Jetson Nano 的遗留物检测人工智能嵌入式实践教学系统,以让学生了解嵌入式AI应用开发的大致整体流程,将理论教学与实践教学相结合,使得学生对于嵌入式系统技术这门课程的了解更加深刻。
Jetson Nano嵌入式开发平台是由英伟达公司最新推出的具有AI算力的高性能嵌入式开发平台,其性能优越且功耗较低,在实时图像处理领域应用广泛,Jetson Nano采用的是ARM+GPU的芯片架构,其核心芯片采用的是四核的Cortex-A57,GPU 采用英伟达系列NVIDIA Maxwell架构的显卡,拥有128 个CUDA单元[5]。作为一款优良的GPU运算平台,其具有优越的浮点计算能力和多线程处理性能。Jetson Nano提供了多种外设接口来与外界进行数据交互,其在嵌入式开发板上集成了一个HDMI显示屏接口、USB接口、RJ45千兆网口接口、Micro USB 接口以及40pin 的I/O接口[6]。
嵌入式Linux系统是对Linux 操作系统进行裁剪所得到的与Linux系统具有相同接口但是拥有更为精简的Linux内核的操作系统。目前由于嵌入式设备的硬件资源不足,所以对于嵌入式设备上的软件运行环境会更加严格,在这种特殊的需求下,嵌入式Linux 系统也应运而生,嵌入式Linux 系统为嵌入式设备的发展提供了良好的发展空间[7]。嵌入式Linux系统是完全开源的,其性能优异,支持多种软件,并且代码可移植,是一种支持多用户、多任务、支持多线程和多CPU的操作系统。
本次教学实验采用的Jetson Nano 就是一种基于嵌入式Linux 操作系统的开发工具,学生需要掌握Linux的组成和特点、Ubuntu系统的安装和配置、Linux常用命令、Linux文件系统以及文本编辑指令。
NVIDIA人工智能计算公司提供了Jetson Nano 的软件映像,NVIDIA 的默认软件映像包括了预装了OpenCV和Python3.6 的Ubuntu Linux18.04,其开发工具包还含有CUDA 10.2、cuDNN 等深度学习工具包,为开发者提供了便捷的嵌入式开发环境,为了部署深度学习算法还需要为系统配置pytorch1.4 和torchvision0.4[8]。
目前主流的深度学习框架(Tensorflow、pytorch、caffe等)对于神经网络模型的推断速度并不优秀,无法满足工业环境对实时性的需求。通过NVIDIA推出的TensorRT工具来部署在深度学习模型上可以提高模型的推理速度,相比于原本的模型能够提升至少1倍以上的速度并且还能降低设备内存的占用率。TensorRT集成了模型轻量化、层的融合、动态内存优化等技术,提高了深度学习模型在嵌入式平台上实现的可行性[9]。
本教学实验采用目标检测模型是YOLOv5,YOLOv5 相对于RCNN 和Faster RCNN 具有更高的精确性和实时性。YOLOv5 是一种基于卷积神经网络的目标检测算法,YOLO 系列算法的核心思想是将待检测的整张图片作为神经网络的输入,最终检测获得的物体的边框坐标值、物体的类别以及置信度[10]。人们为了追求更高速度和精度在YOLOv4 和YOLOv3 的算法基础上提出了YOLOv5,同时为了满足人们在不同场景下对于性能和计算速度的需求,YOLOv5 按照神经网络的宽度和深度划分有YOLOv5s、YOLOv5m、YOLOv5l 以及YOLOv5x 4 种权重模型,其中YOLOv5s是最小的权重文件,其大小仅有27MB。考虑到嵌入式开发板的资源问题,为了使得神经网络模型能够在Jetson Nano上推理运行,故本实验采用YOLOv5s作为目标检测算法。
YOLOv5s的网络模型如图1 所示,其按照网络结构可以分成4 个部分,分别为Input、Backbone、Neck、Prediction。Input端对输入图像进行Mosaic 数据增强、自适应锚框计算、自适应图片缩放等处理;Backbone端提取图像边缘特征;Neck端将特征进行融合通过不同比例尺的featuremap 来预测检测结果;Prediction端采用Boundingbox损失函数反向传播并通过nms非极大值抑制来针对多目标检测框的筛选[11]。
图1 YOLOv5s模型网络
通过YOLOv5 的Python 接口,将传入神经网络的图像进行目标检测,如果摄像头检测到一个待检测目标,则会返回该目标的种类标签Lable、包含位置信息的矩形坐标框BBox(矩形4 个角点的坐标)、该目标检测结果的置信度Confidence,并通过目标检测得到信息来执行下一步的判断算法。
OpenCV是一种用于计算机图像处理的跨平台函数库,拥有C++、Python等多种不同编程语言接口,并提供了各种图像处理操作、运动目标检测、关键点定位等高级视觉函数[12]。OpenCV因其良好的开源性和交互性,所以被广泛应用于机器视觉和图像处理等领域,是一个非常理想的二次开发工具。
基于双背景建模和背景差分法来获取视频中的前景目标,双背景建模法是以高斯混合模型为基础的背景/前景分割算法,背景模型的更新采用平均加权的方式,其抗干扰能力较强,双背景建模的慢背景是延迟更新的背景模型[13-14]。以视频的首帧图像作为当前场景的背景图像,将实时的慢背景与首帧图像进行差分运算即可得到静止物体的前景图像,再通过二值化和图像腐蚀处理得到其掩膜[15-16],遗留物检测方法设计的流程如图2 所示。
图2 遗留物检测主逻辑
步骤1读取视频序列获得首帧图像,通过混合高斯建模得到的实时慢背景与视频首帧图像做差分运算得到静止物体的前景区域。
步骤2对原始图像采用基于YOLOv5 的行人检测,得到矩形坐标框BBox 并将差分图像的行人区域设置为0 像素,从而消除算法因行人驻留而产生的误判。
步骤3对差分图像进行二值化,膨胀等形态学处理,从而得到遗留物体的掩膜,并通过轮廓检测得到遗留物的轮廓。
步骤4由遗留物的轮廓获得遗留物的形心坐标,通过形心坐标值来判断物体的遗留时间,如果形心坐标在3s内没有发生变化则判定为遗留物,否则返回步骤1。
步骤5如果物体被判定为遗留物,则标记出遗留物并保存图像和时间段,以便寻找遗留物的遗留者。
为了安排学生的实验教学,搭建了如图3 所示的基于Jetson Nano的嵌入式实验平台。
图3 Jetson Nano嵌入式实验平台
学生按流程完成学习之后,需要在Jetson Nano 嵌入式实验平台上完成遗留物检测算法的板级实验验证。首先要选定实验环境,然后通过USB 摄像头将读取到的场景画面传入遗留物检测算法中进行判别,最终如果能够实现如图4所示预期的实验效果则为实验成功。
图4 行人遗留物检测
围绕嵌入式系统设计课程开展实践教学,设计了如图5 所示的基于Jetson Nano 的遗留物检测实践教学方案。由于本实验涉及多学科交叉,内容较多,所以采用分组合作的实验方式,将每组分为5 或6 个人1组。实验的内容分为理论知识、嵌入式开发板、YOLOv5 神经网络、OpenCV 图像处理、遗留物检测算法5 个模块,学生按照各个模块的内容进行系统性的学习,最后根据预习报告和实验报告评定成绩。整个流程也可以分为预习阶段、操作阶段与总结阶段。
图5 实践教学方案及流程
(1)预习阶段。首先学生要先进行理论知识的学习,通过检索国内外科技论文,在搜索引擎上查阅相关资料,包括深度学习基础、YOLOv5 目标检测算法原理、图像处理基础知识、Jetson Nano嵌入式人工智能开发板基础知识、遗留物检测算法原理。基础理论知识的学习过程中,学生能够对所学专业课的知识进行回顾和巩固,以便后续实验的开展。各个学习小组需要根据任务要求分工合作并制定实验计划。
(2)操作阶段。嵌入式开发板模块中学生需要了解Jetson Nano人工智能开发板的硬件资源,学会下载NVIDIA开发者工具软件映像,熟悉Linux 的基本操作,并配置部署YOLOv5 所需要的环境。在YOLOv5神经网络模块中学生需要完成数据集样本的制作,利用labelimg软件对样本进行标注,利用YOLOv5s预训练模型来训练神经网络,最后对网络模型的性能进行验证。OpenCV图像处理模块要求学生掌握Python 的cv2 程序库,利用OpenCV的软件库对图像进行读取显示以及腐蚀、开运算等形态学操作。在遗留物检测算法模块中,学生需要了解帧差法、双背景建模法等经典的遗留物检测算法设计思想,并根据实验要求进行算法程序的整体开发。学生按照各个模块系统地学习后,合作完成遗留物检测算法在Jetson Nano 嵌入式开发板上的实验验证,并对实验的效果进行观察和记录。
(3)总结阶段。每组根据分工情况撰写实验报告,每个人撰写自己负责部分再进行总结,最后再根据预习报告和实验报告对各组成绩进行评定。
以自动化专业的嵌入式系统设计课程建设为出发点,设计了基于Jetson Nano 的遗留物检测实践方案。理论与实践相结合的教学方式,符合国家大力推广新工科教育模式,培养了学生的动手实践能力和团队协作精神,可以让学生对于课堂更有参与感,增强学生的课堂积极性。这种实践教学方式涉及多学科交叉,能够帮助电气工程及其自动化专业的学生回顾并巩固知识。采用基于Jetson Nano 嵌入式AI 开发板的教学,能够培养学生更好地适应社会和企业的需求,对于学生的后续发展起到很大的帮助。