李硕,陈春雨,刘文龙
哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001
近些年,随着深度学习和移动互联网的不断发展,大数据和人工智能越来越和我们的日常生活息息相关,将很多人工智能移植应用在移动端上也成了热点研究问题。如何将深度学习和移动应用紧密结合起来,快速高效地在移动端[1]部署深度学习模型成为了热门话题。但由于在深度学习中,很多模型太大致使在嵌入式平台[2]和移动设备上使用不方便已经成为当前移动部署所面临的一大问题。目前,很多模型例如分类算法的模型大小基本都在500 MB 以上,在自然语言处理的模型方面其模型大小有很多在1 GB 以上,机器翻译的模型大都也在500 MB 以上。对于嵌入式设备或一部手机来说,很难实现加载一个超过500 MB的模型。所以,怎么样把一个大模型转换成小模型是当前面临的一个严峻挑战。因为在移动设备上,不仅是对存储空间或者是内存的限制,更多的是受限于能源消耗。因此,在移动端不允许我们使用太大的模型。近年来,我国的养殖业迅速发展,每年生猪出栏总数不断创历史新高。至2018 年底,我国生猪全年产量已突破7.2 亿头,与2000 年比较,增速为41%[3]。随着养殖场向着更大规模发展,传统人工观察、饲养已经无法满足养殖的高效性,现代的、科学的生猪养殖模式被逐步推广。在传统的检测系统中,对于猪只的个体识别主要采用耳标射频识别(radio frequency identification,RFID)技术,但该技术在一定程度上会干扰猪只的正常生活[4],并且当多个RFID 应答器接近于接收器时,低频RFID 无法准确识别出特定个体[5]。
本系统采用猪场数据集是带有快速反应(quick response,QR)二维码的耳标,数据集使用的QR 二维码耳标如图1 所示,其具有能存储大量信息、对变脏和破损的适应能力强且可以从任意方向进行读取的特点。
图1 QR 二维码耳标
本系统共分为2 部分:耳标检测和耳标识别。利用神经网络模型对耳标进行检测,判断猪只是否带有耳标;同时采用ZXing 技术对于猪只的QR 二维码耳标进行猪只个体身份识别,并且完成了在移动端框架上的部署。在耳标检测部分,由于卷积神经网络在很多任务上效果很好但其学到的内容和规则很难用人类理解的方式来呈现(相对于传统机器学习算法例如决策树或者逻辑回归等),所以被很多人认为是“黑盒”。本系统使用CAM[6]方法可视化模型感兴趣的区域,增加模型的可信性。
本系统由耳标检测和耳标识别(对应猪只个体身份)构成,系统结构如图2 所示。利用移动神经网络(mobile neural network,MNN)框架搭建的调用程序,同时调用耳标检测模块和耳标识别模块。对于检测到耳标的时候查看耳标识别的结果,最后对于检测到耳标但没有识别结果的图像数据进行分析,寻找没有识别的原因。
图2 系统结构
本系统耳标检测部分的设计流程如图3 所示。
图3 设计流程
首先对猪场的猪只数据进行采集,制作成猪只可视耳标的数据集,在电脑端利用PyTorch 框架搭建模型,对标记好的数据集进行训练。当模型收敛至一定程度后,生成开放神经网络交换[7](open neural network exchange,ONNX)格式文件,可用于模型在不同框架之间进行转移。再利用MNN转化的应用程序编程接口(application programming interface,API)将ONNX 格式文件转换为MNN 类型的模型文件。
1.2.1 算法选择
目前常见的分类网络有ResNet[8],VGG-16[9],Inception-V4[10]等,根据文献[11]中提到的在ImageNet数据集上与其他网络从参数量、TOP-1、浮点运算数(floating point operations,FLOPs)进行对比,结果如表1 所示,由表1 可知,MobileNet_V3 small网络在准确率(TOP-1)上不如MobileNet_V2 和MnasNet 网络,但参数量和向前推理的计算量小于其他网络,尤其是FLOPs,即向前推理的计算量远小于其他网络。在本系统中,出于对精度和延时时间的综合考虑,选择了更适合部署在嵌入式设备上的基于宽度因子和分辨率因子[12]构建合适规模、合适速度的MobileNet_V3 small 网络结构。
表1 网络对比
网络基本结构如图4 所示,网络的整体配置清单[11]如表2 所示。其网络结构的基本思想是把空间的相关性和通道间的相关性完全分离出来,同时减少计算量和参数量[13]。由于在MobileNet_V3 small 的网络结构中使用了大量的3×3 卷积核,不仅对于模型的准确率的影响较小,同时可以大大减少计算量,在保障了模型的准确率的同时也加快了模型运算的速度。
图4 网络基本结构
表2 网络整体配置清单
1.2.2 移动端推理框架选择
MNN 是一个轻量级的深度神经网络推理引擎,对于深度卷积神经网络的模型,在端侧加载并且进行推理和预测。跟Tensorflow、Caffe2 这些能同时进行训练和推理功能的通用框架不同的是,MNN 更注重于模型在推理阶段的加速和优化,这样是为了更好地提高在模型部署阶段的效率,进而可以更高效地在移动端实现模型背后的业务。在大规模机器学习的应用当中,端智能应用的最重要的模块就是端侧的推理引擎。由于大规模模型的部署在推理侧中的计算量很大,约为训练侧的10 倍以上,需要在有限算力和内存等限制条件下充分利用资源,快速完成推理,所以对于推理侧的优化就显得十分重要。总体来说,模型是否能在端侧运行的最大决定因素就是端侧推理引擎的优劣,MNN 是一个可利用的且具有巨大优势的端侧推理引擎。
1.2.3 嵌入式平台选择
本系统选取树莓派4B[14]作为嵌入式平台,树莓派4B 是个微型卡片式计算机,可以支持Windows操作系统或Linux 操作系统的运行,应用在物联网和嵌入式中,同时还可以当作小型的服务器使用,完成某些特定的功能。与51 单片机和STM32等嵌入式微控制器相比,不仅可以使用IO 引脚完成同样的控制操作,由于运行有相应的操作系统,还可以实现更复杂的任务管理与调度,给开发者们开发更上层的应用,提供了更大的操作和应用空间。树莓派可以将底层硬件和上层应用连接起来,实现物联网的云控制与云管理,同时也可以将IO 控制忽略,直接使用树莓派通过搭建小型网络服务器来实现测试开发的功能和服务。树莓派提供的IO 引脚与通用的PC 不同的地方还在于其可以直接对其他底层硬件进行控制,完成通用PC 做不到的功能,且其体积和成本更小。
本系统采用ZXing 技术对QR 二维码耳标进行猪只个体身份识别。ZXing 是谷歌推出的用来识别多种格式条形码的项目[15]。其API 包含了多种主流编程语言,具有良好的可定制性和扩展性。
ZXing 库支持以下格式的条形码编码和解码:UPC-A,UPC-E;EAN-8,EAN-13;39 码;93 码;QR 码;数据矩阵等等。它的主要部分支持以下几个功能:核心代码的使用、适用于J2SE 客户端、Android 客户端(Barcode Scanner)以及Android 的集成(通过Intent 支持和Barcode Scanner 的集成)等。
本系统使用类激活映射可解释方法,为卷积神经网络模型的分类图像作可视化解释,使特征区域更加明显可见。通过CAM 使任何目标特征的梯度经过最后一个卷积层后产生大致的局部特征图,凸显出图像中对目标预测分类重要的区域,为模型中的故障模型提供了解释依据,使看起来不合理的预测有了合理的解释。
2.1.1 数据准备
本系统使用的数据来自某猪场采集的猪只可视耳标图像共3 512 个数据,其中包含1 756 个224×224 的正样本(图像中猪只带有可视耳标),1 756个224×224 的负样本。对数据进行随机划分为3 部分,其中训练集占整个数据集的80%,验证集占数据集的10%,测试集占数据集的10%。训练集和测试集、验证集的数据量比值大约为8∶1∶1,如表3 所示。
表3 实验数据集划分
2.1.2 本地模型训练
本系统使用NVIDIA RTX2060 显卡进行模型训练,模型训练的超参数设置为:总的迭代次数设置为100,批量训练的大小为10,初始学习率0.001。其中学习率和批次大小根据实验设备的硬性条件调整得到。
2.1.3 模型转换
为了将模型部署到移动端,先利用PyTorch在本地训练模型,当模型收敛到一定程度的时候生成ONNX 模型文件,它也是一种模型文件的格式,再利用MNN 转化的API 将ONNX 格式文件转换为MNN 类型的模型文件。模型转换后大小对比如表4 所示,由表4 可知实现了86% 的模型尺寸压缩。
表4 模型大小对比
2.2.1 硬件实现
在系统测试时,树莓派硬件连接如图5 所示。左边部分为树莓派4B 和外接摄像头,用来获取图像数据,右边部分是树莓派外接显示屏显示程序调用页面。
图5 硬件连接
2.2.2 功能测试
对猪只可视耳标数据集中测试集中带有QR二维码耳标的共178 张数据进行测试。检测、识别的测试结果如表5 所示。通过树莓派外接摄像头获取QR 二维码耳标模拟猪场猪只的图像数据,检测、识别结果如图6 所示。
表5 检测、识别结果
图6 模拟检测、识别结果
由测试结果可知:
1)耳标检测部分:准确率为98.3%,有3 张有耳标的没有成功检测出来。
2)耳标识别部分:对于成功检测出耳标的175 张图像数据中,正确识别的数量约占92.5%,任选一张正确识别的结果如图7 所示,漏识别的约占7.5%。查看测试结果发现,当QR 二维码耳标不全(图8),耳标图像数据有脏物遮挡时(图9),不能正确识别个体身份。对于不能成功检测出耳标的3 张图片数据中,查看测试结果,都是属于漏识别的,3 张图片都为QR 二维码耳标不全的图像。
图7 正确检测和识别
图8 耳标不全
图9 耳标有脏物遮挡
2.2.3 CAM 可视化
类激活映射是将最后一个卷积层的输出特征图和该特征图对应的输入图像的仿射矩阵相结合,进而生成与输入图像尺寸相同的掩码图[16],叠加到原图上如图10 所示。由图10 可知,响应越高的区域越能代表模型的分类依据,由此可得,模型感兴趣的区域集中在耳标区域。
图10 CAM 可视化
本系统以智能养殖为创新点,从实际需求出发,同时结合了可视耳标的检测和识别,更加准确、高效地确定猪只的个体身份。在进行一系列对比论证后,敲定了以轻量型MNN 为框架,结合MobileNet 卷积神经网络的方案来实现系统功能。利用树莓派4B 作为嵌入式平台,最终完成了在可视耳标检测、识别在移动端的部署,通过对于整套系统进行测试,可以得到一个比较理想的测试结果。
1)通过对于测试结果的查看,可以定位到无法正确识别的原因,对于可视耳标有脏物遮挡的情况可以指导猪场人员对耳标进行擦拭,以达到重新识别的效果。
2)通过CAM 可视化的方法可以得出模型感兴趣的区域在耳标部分,为人们更相信卷积神经网络提供依据。
3)受限于数据集的数量,后续的改进可以通过扩充数据集来得到更理想的效果。
4)后续可以修改网络结构,在不损失精度的前提下提高模型检测的速度。