張志鵬 黃世震 林夢如 陸清茹 林 彥 陳睿祺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 數據準備 系統共劃分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所示,其工作步驟為:① 室溫下(默認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
系統總體設計如圖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
多層感知器的神經網絡架構非常適合分類任務,同時也滿足低功耗便攜設備的開發需求[16-17]。在7 623組數據中,劃分70%的數據用于神經網絡的訓練,15%的數據用于驗證,15%的數據用于測試?;诖藬祿M行神經網絡的隱藏層數和神經元個數的差異對準確性影響的探究,確定神經網絡的相關參數。針對所有神經元,選用線性整流函數作為激活函數。針對不同的隱藏層數和神經元個數的組合進行訓練與測試,每種組合反復進行20次,最終統計并記錄不同組合對應的準確率平均值。
試驗采用的SparkRoad FPGA開發板是VeriMake創新實驗室基于上海安路信息科技股份有限公司自主研發的EG4S20BG256 FPGA為核心設計。EG4系列FPGA片上資源豐富,擁有19 600查找表(LUT),156 Kbits分布存儲器,片內集成64 Mbits SDRAM。SparkRoad開發板相應外設及拓展接口豐富,包括撥碼開關、按鍵、數碼管、LED燈、USB轉UART、DVP接口、樹莓派接口和Arduino接口等。
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
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.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個參數作為神經網絡的輸入特征。
由表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
基于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)接近的情況下,其算力明顯提升。
以安路公司EG4系列FPGA為設計載體,利用SoPC技術和電化學分析原理,完成了Cortex-M0內核的FPGA移植,輔以相應FPGA資源設計的加速模塊完成了地溝油檢測儀的設計。結果表明,試驗系統采用國產芯片完成設計,檢測耗時相較傳統同類便攜儀器縮短了89%,系統可拓展性更強,運算性能是同類便攜式儀器主控的25倍,可實現地溝油的快速定性判斷和一定種類的劃分。