基于多特征神经网络的便携式地沟油快速检测仪
2021-06-04张志鹏黄世震林梦如陆清茹陈睿祺3
张志鹏 黄世震 林梦如 陆清茹 林 彦 陈睿祺3
(1.东南大学成贤学院电子与计算机工程学院,江苏 南京 210088;2.福州大学福建省微电子集成电路重点实验室,福建 福州 350116;3.南京仁面集成电路技术有限公司Verimake创新实验室,江苏 南京 210000)
“地沟油”对人体健康有着极大的伤害,通常执法部门对于“地沟油”的检测以采样后通过实验室相应化学检测予以完成,例如质谱法[1]、荧光衍生法[2]、光谱法[3-4]、核磁共振法[5]等,检测时间长,成本高。便携式地沟油检测装置通常是基于电导率[6]、折光率[7]、pH值、过氧化值[8]对待测油样进行定性判断,若油样存在掺杂,其准确率会极大降低[9],且此类便携式检测装置通常使用以Cortex-M3(简称M3)为代表的微控制器作为主控制系统来进行数据处理[10],其处理速度和精确性受微控制器性能的限制[11]。文章拟以现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)作为开发平台,利用多特征神经网络设计现场地沟油快速检测仪,旨在为提升便携式地沟检测设备的准确率和检测速度提供依据。
1 系统方案设计
1.1 数据准备及特征选取
1.1.1 数据准备 系统共划分7种标签,包含6种不同类别的油(菜籽油、大豆油、花生油、橄榄油、煎炸老油及地沟油)及其他。分别采集不同品牌相同种类的原始油样共18种。通过掺杂不同的调料物(酱油、醋、盐等),每种类别的油可以分别获得360种掺杂组合;而“其他”标签则采用3种非油液体(纯净水、牛奶和豆浆)进行相同比例掺杂,获得360种组合。综上,共获得2 541种待测样品组合。分别对待测样品进行水浴加热至目标温度,记录相应的电导率,电导率差值和过氧化值共2 541组数据。对待测样品进行水浴加热,但分别与目标温度有±5 ℃ 的偏差,记录相应的电导率,电导率差值和过氧化值共5 082组数据,作为添加“噪声”的扩充数据。最终将7 623组数据作为此次设计的数据集。
1.1.2 特征选取 将电导率和过氧化值[12]作为特征进行采集。
(1) 电导率:使用雷磁公司的DJS-1C型电导率传感器,参照文献[13]对不同温度下电导率值进行多次采集并取平均值。
(2) 过氧化值:使用爱拓公司的DOM-24型传感器,参照文献[13]分别多次采集25 ℃初始室温下和水浴温度60 ℃下的电导率,并取平均值。
1.2 系统工作原理
系统模型图如图1所示,其工作步骤为:① 室温下(默认25 ℃)通过传感器采集油样的过氧化值,获取第一个特征;② 向少量油样中加入正己烷和去离子水,通过加热管加热器皿,以提供恒温水浴环境;③ 通过控制加热棒实现水浴温度的升高,直至目标温度,不同温度节点处通过传感器采集电导率值并存储;④ 控制步进电机实现器皿的振荡,以达到传统试验中的试剂振荡充分反应的效果;⑤ 基于液体密度不同分层原理使用连通器实现油和水相的分离,并对水相进行最后的电导率值测量。由于去离子水的增加,分离出更多更清澈的水相使检测时水相能将电极完全淹没,减小了由于电极不能完全淹没在水中而产生的误差;升高振荡时的水浴温度,振荡后不用静止就能马上分离出清澈的水相,缩短了试验时间,水相清澈减小了由于水相中含有油珠而对电导率检测产生的影响[14],而且升高振荡时的水浴温度使油脂中的杂质或离子能尽可能地全部溶解到水中,更准确地反映油脂中含杂质或离子情况;升高检测时的水相温度使合格油与“地沟油”间的电导率差距变大。采集此时的电导率值即所需的4个特征数据。多特征数据下进行多分类问题的分析难度较大,而神经网络能够有效地完成多特征维度下的数据分类判别[15],因此提出引入神经网络以实现油质的分类判别。
1.旋转盘 2.步进电机 3.传动杆 4.测温传感器 5.连通管 6.试剂反应管 7.电导电极传感器 8.加热管 9.压力阀门 10.耐高温容器 11.容器支架图1 便携地沟油检测仪水浴系统模型图Figure 1 Model of portable gutter oil detector for water bath
1.3 系统设计
系统总体设计如图2所示。使用FPGA完成M0内核的移植用于水浴系统的控制以及传感器的数据采集。M0软核所对应的GPIO和PWM模块完成水浴系统的控制,传感器的驱动和数据的采集。传感器采集到的数据通过AMBA总线协议交付至FPGA中的硬件加速模块完成校正和神经网络的运算,最终将结果交付至M0输出判定结果并将数据及判定结果通过ESP8266模块发送至云端数据库。
图2 系统总体结构框图Figure 2 Schematic diagram of system
1.3.1 硬件设计 硬件设计主要为水浴系统,如图1所示,包括还原水浴检测所需的耐高温容器、试管、加热棒、温度传感器等。通过仪器仪表的自动化设计,使用步进电机、传动杆、舵机等设备可以实现水浴系统的振荡,待测试剂的分层连通检测等操作。水浴系统的外形支架均由3D打印完成制作。
1.3.2 软件设计 软件整体流程如图3所示。系统运行后,包括GPIO、UART、定时器等相关初始化。先设定水浴温度,再驱动电热棒对水浴进行加热。通过18B20温度传感器对水浴温度进行监测,当温度到达25 ℃时,记录电导值。后续记录30,45,60 ℃时的电导值,将3组电导值一次性进行参数校准。当温度到达预设值后,GPIO驱动电机转动以带动水浴装置振荡,由此获得相对清澈的水相。振荡10 min后,GPIO驱动舵机打开连通器,传感器对分离出的水相进行测量。测量数据由FPGA对应设计的加速模块完成,最终输出结果,并通过UART通信方式驱动ESP8266模块发送数据至数据库。
图3 软件整体流程图Figure 3 Software flow chart
2 神经网络的设计
多层感知器的神经网络架构非常适合分类任务,同时也满足低功耗便携设备的开发需求[16-17]。在7 623组数据中,划分70%的数据用于神经网络的训练,15%的数据用于验证,15%的数据用于测试。基于此数据进行神经网络的隐藏层数和神经元个数的差异对准确性影响的探究,确定神经网络的相关参数。针对所有神经元,选用线性整流函数作为激活函数。针对不同的隐藏层数和神经元个数的组合进行训练与测试,每种组合反复进行20次,最终统计并记录不同组合对应的准确率平均值。
3 FPGA模块设计
试验采用的SparkRoad FPGA开发板是VeriMake创新实验室基于上海安路信息科技股份有限公司自主研发的EG4S20BG256 FPGA为核心设计。EG4系列FPGA片上资源丰富,拥有19 600查找表(LUT),156 Kbits分布存储器,片内集成64 Mbits SDRAM。SparkRoad开发板相应外设及拓展接口丰富,包括拨码开关、按键、数码管、LED灯、USB转UART、DVP接口、树莓派接口和Arduino接口等。
3.1 数据加速处理模块的设计
FPGA设计的数据加速处理模块主要针对参数自校准及参数判别运算两部分进行设计,加速模块总体架构如图4所示。加速模块通过AHB总线接口获取参数校准输入数据,神经网络的输入。神经网络计算所需的模型参数缓存至单独开辟的BRAM中,在网络运算时进行数据交互。加速器的运算结果通过AHB总线返回至M0中。
图4 加速模块总体架构图Figure 4 Architecture diagram of accelerator
3.1.1 参数自校准加速器 参数自校准加速即为多次取回硬件电路中不同水浴温度下的电导率值,与最初的众多常见溶液的参考值同时进行并行比较,取电导率最为接近的值作为最终测定结果。此过程通常称作电导率的温度补偿,依据式(1)实现[18]。最终温度补偿是将不同温度下的电导率换算为25 ℃下的电导率值。
kn=k0[1+α(T0-T)]=k0(1+α△T),
(1)
式中:
T0——初始温度,通常取25 ℃;
T——目标温度,℃;
△T——温度差,℃;
k0——对应25 ℃下的电导率值,μS/cm;
kn——补偿后的电导率值,μS/cm;
α——温度系数,通常取0.02。
由式(1)可知,整个运算包含两次乘法,而在EG4系列FPGA中拥有29个硬件乘法器,充分满足设计需求,因此基于FPGA的并行运算优势,可以同时进行3组温度补偿。
3.1.2 神经网络加速器 基于神经网络参数设计,一次性完成所有的运算会消耗大量的硬件资源。因此,出于资源和功耗考虑,在并行化和流水线之间进行权衡,在传统的神经网络运算顺序上进行改进,完成串并同行设计,并通过Verilog对以上流程进行硬件语言描述。整个神经网络加速器仅消耗6个硬件乘法器,故可以对参数自校准模块中的乘法器进行复用,并充分利用片上资源。如图5所示,整个架构采用6个乘法器来构成相关的通用算术逻辑单元(ALU)。使用寄存器对输入特征数据进行缓存(分别记作F0~F3),第1个隐藏层中,第1个时钟周期对F0同时进行所有神经元的乘法运算,并进行缓存。后续3个时钟周期依次完成F1~F3的神经元中的乘法运算。第5个时钟周期完成神经元中的累加和激活运算,激活函数ReLU通过组合逻辑选择器实现相关的运算。第2个隐藏层,由于在第5个时钟周期仅运行累加和激活运算,因此同时还可以进行第2层的第1个神经元的乘法运算。第6个时钟周期完成第1个神经元的累加和激活运算,同时完成第2个神经元的乘法运算。依次类推,第10个时钟周期时,完成第6个神经元的乘法运算。第11个时钟周期时,完成累加和激活运算以及输出层的乘法运算。最终共11个时钟周期,便可将运算结果通过AHB总线返回至M0。
图5 神经网络运算时序流图Figure 5 The sequence timing diagram of neural network operation
3.2 Cortex-M0内核的移植与SoC的设计
Cortex-M0于2015年开发,采用Verilog完成编码,保留了完整的AMBA总线接口协议。Cortex-M0是32位哈佛结构的处理器,包括32个中断和双16位IO接口[19]。
本着“即裁即用”的设计思想,SoC的设计仅保留了基本的总线和所需外设,其总体架构如图6所示。在高速总线AHB上只保留了FPGA数据加速处理模块接口,FPGA内部的BRAM资源作为M0的RAM,外接SPI Flash作为M0的ROM。APB总线上只保留了定时器、串口、GPIO以及PWM。
图6 SoC总体架构图Figure 6 Architecture diagram of system on chip
AHB总线上外设RAM可在工程文件的顶层文件cmsdk_mcu.v中修改cmsdk_ahb_ram模块对应的例化参数.MEM_TYPE为2,并将cmsdk_fpga_sram.v接入对应接口,调用FPGA中的BRAM资源[20]。同理,将cmsdk_ahb_rom模块对应的例化参数.MEM_TYPE修改为3,即可调用对应的32位Flash接口模块,再设计对应的SPI Flash控制器即可完成ROM的设计[21]。对应的APB总线上外设,官方工程文件中均有完整的可综合文件,只需基于APB总线时序要求将外设分别对应接入即可。
4 试验结果与分析
4.1 特征的获取与分析
4.1.1 电导率 由图7可知,相较于食用油而言,地沟油的电导率及其变化率普遍偏高,且随着温度的上升,二者差距不断增加。当加热至60 ℃后,电导率变化放缓,这是由于油脂中的杂质或离子是有限的。考虑到水浴加热耗时,且不同温度下的电导率变化与油质优劣存在隐藏关系[22-23],因此选定60 ℃下的电导率,60 ℃和30 ℃下的电导率差值,60 ℃和45 ℃下的电导率差值作为分类判别特征。
图7 各种油样在不同温度下的电导率Figure 7 The electrical conductivity of various kinds of oil at different temperature
4.1.2 过氧化值 由图8可知,地沟油的过氧化值偏高,当加热至60 ℃后,各类油的过氧化值均上升,且相互间数值差距减小,如果存在混合的情况,60 ℃下的过氧化值将难以作为特征进行判断。因此选定25 ℃下的过氧化值作为分类判别特征。
图8 各种油样在25 ℃和60 ℃下的过氧化值Figure 8 The peroxide value of various kinds of oil at 25 ℃ and 60 ℃
综上,选择60 ℃下的电导率、60 ℃和30 ℃下的电导率差值、60 ℃和45 ℃下的电导率差值、25 ℃下的过氧化值4个参数作为神经网络的输入特征。
4.2 隐藏层及神经元个数的确定
由表1可知,当使用更多的隐藏层和神经元时,最终的准确性会略有提高。结合FPGA的硬件资源及整体功耗性能综合考虑,最终确定神经网络参数为2层隐藏层,每层神经元个数为6。
表1 不同神经网络结构准确率对比Table 1 Average classification accuracy for different neural network architecture %
基于上述输入特征、网络参数和数据集进行训练和测试,最终模型训练集的准确率为97.11%,测试集准确率为96.50%,其学习曲线如图9所示。
图9 模型学习曲线图Figure 9 Learning curves
4.3 FPGA模块优化
基于Sparkroad开发板在TD软件上完成系统中FPGA加速器和软核移植的设计,设计使用的逻辑资源情况如表2所示。由表2可知,加速器占用的逻辑资源比例最高,这是因为设计中将大量的比较器与加法器用于校准和神经网络的并行运算。
表2 FPGA各模块资源使用情况Table 2 FPGAresource consumption
实际测试时,对2 541种油样进行多次测试,测试分为判断是否为地沟油的定性测试,以及对待测油样进行分类测试。每次随机抽取100种油样,统计平均正确率如表3所示。由表3可知,相较于传统的阈值法,多特征输入神经网络更能应对现实场景中的多种掺杂情况。分类测试的准确率与模型测试集准确率相当,均≥95%,而传统的阈值法基于单一特征很难实现油样的分类。说明试验系统可以准确地完成地沟油的分类检测。
表3 现有地沟油检测准确率对比Table 3 The accuracyof gutter oil detection system comparison
FPGA设计了相应的计数器,系统开始工作的同时计数器计数(计数器频率为50 MHz),当M0输出判别结果后停止计数。经40次测试,结果如表4所示,当前试验系统的耗时主要来自于水浴加热,加热耗时过久是因为仅使用了1支电加热棒,后期可以通过优化加热系统进一步提高速度。
表4 现有便携式地沟油平台耗时对比Table 4 Comparison of portable gutter oil detection system time consumption
试验系统相较于过往研究大幅缩短了计算耗时和系统总耗时,其完全得益于引入了运算加速模块。而加速模块中的神经网络模块更是直接决定了处理结果,因此对加速模块中的神经网络加速模块进行分析与测试。为了更好地评估神经网络加速器的性能,选择多个平台进行测试。在不同的硬件和软件平台上,搭建相同参数的神经网络,并使用C语言实现正向推断分类运算[25]。在权重完全一致的情况下,分别在Intel 9750HQ、Rockchip RK3399 Pro、Raspberry Pi 3B+、IMX6-CB200和STM32F407平台上通过输入多组测试集数据,记录其运算耗时并取平均值,结果如表5所示。
表5 神经网络加速器性能对比†Table 5 Neural network accelerator performance comparison
由表5可知,试验设计的神经网络加速器性能超出通用物联网终端MCU M4近25倍,超出嵌入式级SoC Cortex-A9 两倍,与多核Cortex-A53相当。结合表2,考虑试验提出的应用场景是便携式终端,在系统总体资源消耗与M3软核系统(15 162 LUTs)接近的情况下,其算力明显提升。
5 结论
以安路公司EG4系列FPGA为设计载体,利用SoPC技术和电化学分析原理,完成了Cortex-M0内核的FPGA移植,辅以相应FPGA资源设计的加速模块完成了地沟油检测仪的设计。结果表明,试验系统采用国产芯片完成设计,检测耗时相较传统同类便携仪器缩短了89%,系统可拓展性更强,运算性能是同类便携式仪器主控的25倍,可实现地沟油的快速定性判断和一定种类的划分。