黃濟川 楊雨秋 廖磊



摘? ?要: 為了讓使用者科學規范使用實驗設備、教學者提高實驗室教學效率,提出了基于深度學習的實驗設備識別系統,系統搭載Android平臺環境,使用者通過拍照或本地相冊選取實驗設備圖像。Android客戶端采集圖像并裁剪,使用TCP/IP網絡傳輸協議將圖像發送至服務器端;服務器端使用殘差網絡和改進的YOLO網絡模型對圖像進行檢測,并在數據庫中查找圖像特征值對應的實驗設備;數據庫將識別結果和設備使用方法、注意事項等反饋至Android客戶端。測試表明,系統對實驗設備的識別準確率可達99%以上。實驗設備識別系統可為同行提供參考借鑒,提高教學效率和質量。
關鍵詞: 深度學習;實驗設備識別系統;Android客戶端;服務器端;TCP/IP網絡傳輸協議;殘差網絡;改進的YOLO網絡模型
引言
隨著我國教育現代化水平的不斷提高,實踐與理論相結合成為各大高校的教學理念,實驗室建設成為該教學理念的重要支撐。眾所周知,在實驗室中,實驗設備種類繁多、不易辨別、價格昂貴而且大多數操作復雜、不易上手,這對于剛接觸到這些設備的學生而言,是一項很大的挑戰。教師通常需要花費大量的時間帶領學生了解、掌握并操作實驗設備,避免學生的誤操作對實驗設備造成的損壞,這縮短了學生自己動手實踐的時間,也加大了教師的教學壓力。因此,設計一種自動識別實驗設備,并且介紹其操作步驟和實驗注意事項的系統,能夠有效地解決上述問題。
深度學習是一種來自人工智能研究領域的新技術[1],在圖像識別與處理、計算機視覺、視頻分析和語音識別等諸多領域都有所應用。深度學習起源于人工神經網絡,可以理解為神經網絡的橫向堆疊,能夠產生更深的網絡結構。深度學習不需要人為提取目標物特征,而是通過迭代訓練得到目標物自淺至深的特征信息[2]。因此若能基于深度學習開發設計實驗設備識別系統,則可通過卷積神經網絡從多維度識別設備特征,從而實現實驗設備的準確識別。
為了開發設計一款基于深度學習的實驗設備識別系統,本文提出系統設計和實現方法,重點在于目標分類與目標識別,以及在Android平臺環境上的人機交互。系統設計將圖像處理技術、網絡通信技術、數據庫和模式識別技術以及一些基于Android的技術有機融合。學生(使用者)對實驗設備進行拍攝,系統即可實現對實驗設備圖像的檢測和識別,并將設備簡介、使用方法、注意事項等反饋給學生,方便學生對設備的使用,從而提高實驗效率和教學效果。
1? 方案設計
1.1? 需求分析
因為在實驗室中存在多種實驗設備,且設備的使用方法和注意事項往往是不同的,因此對于初次接觸這些實驗設備的學生而言,熟練掌握各種實驗設備的使用方法具有一定的難度。因此需要一種簡單快捷的實驗設備識別系統,學生對實驗設備進行拍照后,系統可采集照片并進行處理,以得到該實驗設備的反饋信息,從而指導學生自主完成對實驗設備的科學規范使用。
1.2? 系統總體設計
基于深度學習的實驗設備識別系統的總體設計思路是,使用者使用Android客戶端[3-4]對實驗設備拍照,系統采集設備圖像并進行裁剪[5],通過TCP/IP網絡傳輸協議將實驗設備圖像發送至服務器端,實現客戶端和服務器端的數據交互。服務器端收到設備圖像后,使用卷積神經網絡對其進行識別,提取圖像的特征值[6],并在數據庫中查找該實驗設備的相關信息,最后將查找結果反饋至Android客戶端。下面分別介紹系統的體系結構設計和系統功能設計。
1.2.1? 體系結構設計
基于深度學習的實驗設備識別系統包括兩大體系:客戶端和服務器端。系統體系結構圖如圖1所示。
1.2.2? 系統功能設計
該系統的主要功能為實驗設備的識別和反饋,是通過圖1中圖像采集與裁剪模塊、圖像傳輸模塊、圖像識別模塊和數據庫實現的,下文對各自的功能進行具體描述。
(1)圖像采集與裁剪模塊:從客戶端得到相機權限,對使用攝像頭拍攝的或是本地相冊中的實驗設備圖像進行裁剪,去除圖像的多余部分,使圖像只包含該實驗設備。
(2)圖像傳輸模塊:利用網絡傳輸協議將圖像從客戶端向服務器端發送,服務器端識別從客戶端傳送來的圖像,并使用該模塊將識別得到的結果傳輸回客戶端,反饋給設備使用者。
(3)圖像識別模塊:該模塊為系統核心模塊,所有的圖像識別工作都由該模塊完成。在系統功能設計中,基于Matlab平臺[7],使用殘差模型對實驗設備圖像進行分類,然后使用改進的YOLO網絡模型對圖像進行檢測。
(4)數據庫:利用圖像識別模塊提取出的特征值,在實驗設備數據庫中查找該特征值對應的實驗設備,并將介紹該設備相關知識的文檔反饋至客戶端。
1.3? Android客戶端設計
本系統的Android客戶端采用的環境為Android Studio[8-9],在Windows 10操作系統下運行。Android Studio將APP應用程序打包為“.apk”文件,并在使用Android操作系統的手機上進行安裝。
安裝完成后,使用者點擊手機中的“實驗設備識別系統”圖標,進入識別系統的登錄界面,如圖2a所示,在該頁面中,用戶需要輸入用戶名和密碼才能夠登錄系統。登錄系統后,顯示設備識別界面,如圖2b所示。該界面有“相冊”按鈕和“拍照”按鈕,點擊它們即可開始識別。
客戶端還有“識別記錄”、“識別統計”和“我的”界面,便于使用者查找歷史記錄和統計使用情況。
1.4? 服務器端設計
服務器端設計的主要工作為創建GUI界面。該界面的主要目的是使開發人員更加方便地對系統進行調試與修改。如圖3所示,GUI界面的組件有“開啟通信”按鈕、“關閉通信”按鈕、“清空”按鈕和文本顯示框等。點擊“開啟通信”按鈕能夠打開Socket通信,使客戶端與服務器端進行數據交互;點擊“關閉通信按鈕”能夠終止服務,中斷客戶端與服務器端的連接;點擊“清空”按鈕能夠清空歷史查詢記錄中的無用文本。
1.5? 識別算法模塊設計
識別算法模塊使用殘差網絡模型對實驗設備圖像進行分類,使用改進的YOLO網絡模型進行檢測。
1.5.1? 殘差網絡模型
殘差網絡是一種新型的深度卷積神經網絡,其核心目的為解決神經網絡太深造成的退化問題[10]。雖然增加網絡復雜性可以改善網絡性能,但是神經網絡過深會造成梯度消失。雖然可以利用正則化來解決這一問題,但又會出現一個新的問題,即網絡退化,因此即使增加網絡層數,訓練準確度依然會降低。殘差網絡就能很好地解決這一問題。殘差塊如圖4所示。
1.5.2? 改進的YOLO網絡模型
YOLO是一種采用單一卷積神經網絡進行目標檢測的方法,能夠實現End-to-End檢測,但其準確率低,易產生目標錯誤定位的問題[11]。本文對YOLO算法進行逐級優化,將算法結構設計成三個串聯的卷積神經網絡,每一個網絡輸出的bounding box都會發送到下一個卷積神經網絡,并逐個優化,使識別的精度進一步提高,精確圖像定位。
通過神經網絡識別實驗設備圖像。首先將待識別圖像送到神經網絡中,利用多層卷積結構提取圖像特征,來確定目標圖像的位置,然后將卷積神經網絡輸出的bounding box發送給下一個神經網絡,通過預測的類別概率來優化網絡。這個神經網絡和第一個神經網絡一樣,也會輸出bounding box,進行類別概率的預測。重復以上操作,再將bounding box送入第三個神經網絡中進行優化,最后輸出精確的識別結果。
優化后的YOLO網絡模型結構為三個相似卷積網絡的串聯,結構如表1所示。
將傳統的YOLO網絡模型中單一的卷積網絡分成三個深度為11層的串聯卷積網絡模型,導致這三個卷積網絡層數降低,目標圖像大小也因此減小(從448減小到224)。通過將全連接層替換為全局平均池化層,可以實現模型運行速度的提高。每個卷積網絡都將目標圖像分為7×7的小網格,通過卷積網絡逐級對網格的bounding box進行優化,使圖像大小從224×224減小到200×200,實現參數個數的降低。
2? 系統實現
2.1? Android客戶端模塊實現
實驗設備識別系統Android客戶端需要實現圖像獲取、裁剪以及圖像傳輸的功能。
2.1.1? 圖像獲取
系統有兩種圖像獲取方式,一種為調用客戶端攝像頭,在Android開發中,通過openCamera()函數打開相機權限,建立一個CameraManager;然后通過getParameters()函數獲取攝像頭參數,通過Camera.Parameters對象設定拍照參數;調用相機的setPreviewDisplay()函數選取某個SurfaceView,以此顯示待拍照的目標圖像;最后通過takePreview()函數打開相機并進行目標的拍照,使用onActivityResult()方法保存圖像[12]。另一種為調用客戶端相冊,首先設置AndroidManifest.xml文件的讀寫權限;然后利用pickImageFromAlbum()函數載入相冊,并利用onActivityResult()的getContentReslover()函數得到待顯示目標圖像的具體位置;最后采用ImageView的setImageURI()函數“讀”目標圖像。
2.1.2? 圖像裁剪
將圖像發送至服務器端之前,需要對圖像進行裁剪操作。Android系統提供了一個action,通過該action能夠實現圖像的裁剪操作,可以采用intent.putExtra()函數實現裁剪框和圖像尺寸的設置,然后調用onActivityResult()函數返回裁剪結果。
2.1.3? 圖像傳輸
圖像被裁剪之后需要對其進行傳輸,圖像傳輸是圖像界面開發中一種基于控件的事件處理。在Android操作系統中,包括基于回調和監聽兩種事件處理方法,本實驗設備識別系統選擇基于監聽的事件處理對客戶端生成的圖像進行傳輸,其基本思想為,當客戶端按動觸發響應按鈕時,相應的監聽器會調用事件的處理程序,以處理該事件。基于監聽的事件處理流程圖如圖5所示。
2.2? 服務器端模塊實現
系統服務器端需要完成網絡通信和圖像識別。
2.2.1? 網絡通信
網絡通信協議[13]用來實現服務器端間的數據傳輸,在實驗設備識別系統中,客戶端與服務器端之間的數據利用網絡通信協議來完成。Android系統最常使用的通信方式就是Socket通信。Socket通信亦稱套接字,是一種能夠直接傳輸數據的通道,當客戶端與服務器端連接時,服務器端即可主動發送信息,不需要等待客戶端發送請求。Socket包括TCP和UDP應用服務,該系統的數據傳輸功能選擇TCP應用服務實現。Socket通信需要知道客戶端和服務器端的IP地址和通信端口號,然后創建客戶端套接字,通過輸入和輸出流對象分別與服務器端接收和發送數據,同時創建服務器端來接收客戶端套接字,等待接收連接請求。常見的服務器端Socket為ServerSocket類,使用ServerSocket類的accept方法連接Socket,通過輸入和輸出流對象分別與客戶端接收和發送數據。
2.2.2? 圖像識別
實驗設備圖像從客戶端成功傳送至服務器端之后,需要對圖像進行識別。服務器端首先需要刪除上一次的圖像識別結果,創建新文件。Java中有一套完整的文件讀寫函數,利用Java包含的IO工具類創建或者刪除文件,具體方法為建立File(Stringpath)對象,并通過exit方法判斷預先設定的路徑是否包含文件,若是,則采取delete方法將文件刪除,再采取createNewFile()方法新建文件;否則,直接新建文件。
使用Matlab平臺對實驗設備識別算法進行研究,服務器端在識別圖像時,調用Matlab平臺識別接收到的圖像,使用rbf建立殘差網絡模型,實現對實驗儀器圖像的分類,最后調用程序中的實驗設備識別算法。該算法指令為:
Process pro=Runtime.getRuntime().exec("matlab -nodesktop -nosplash -timing -r YOLO('D:\\ceshi1.jpg')");其中,YOLO為識別算法,“ceshi1.jpg”為待識別的圖像。
對實驗設備圖像進行識別之后,服務器端將識別的結果存放到創建的新文件中,讀取識別結果,最后將其發送至客戶端。
3? 系統測試
針對設計的實驗設備識別系統進行了測試,測試結果如圖6和圖7所示。經多次測試后,本文開發設計的基于深度學習的實驗設備識別系統的識別準確率可達99%以上,證明該系統具有良好的可靠性和實用性。
4? 結語
本文開發設計了一種基于深度學習的,通過采集到的拍攝圖像自動識別實驗設備并且介紹其使用方法和注意事項的實驗設備識別系統,該系統能夠有效地解決實驗設備種類繁多、不易辨別和操作復雜等問題,能為學生提供一種方便快捷、科學規范使用實驗設備的方法。系統的設計重點在于根據圖像對實驗設備進行分類和識別,并考慮如何將該系統搭載在Android平臺環境上。該系統能夠有效減少人工誤辨,將圖像檢測和識別問題交給機器完成,使初學者能夠方便快捷地了解實驗設備使用方法,提高教學效率。
參考文獻
[1] 孫志軍, 薛磊, 許陽明, 等. 深度學習研究綜述[J]. 計算機應用研究, 2012, 29(8): 2806-2810.
[2] 盧宏濤, 張秦川. 深度卷積神經網絡在計算機視覺中的應用研究綜述[J]. 數據采集與處理, 2016, 31(1): 1-17.
[3] 羅其朝, 基于Android的圖像識別客戶端系統研究[D]. 海口: 海南大學, 2014.
[4] 史繼先, 蒲東兵, 張雪喆. 基于Android和內容的圖像檢索系統設計[J]. 信息技術, 2014, 38(7): 200-203.
[5] 周莉莉, 姜楓. 圖像分割方法綜述研究[J]. 計算機應用研究, 2017, 34(7): 1921-1928.
[6] 王靜. 中國畫特征提取及分類識別算法研究[D]. 西安: 西安建筑科技大學, 2018.
[7] 周品. MATLAB神經網絡設計與應用[M]. 北京: 清華大學出版社, 2013.
[8] 劉國柱, 杜軍威, QST青軟實訓. Android 程序設計與開發: Android Studio版[M]. 北京: 清華大學出版社, 2017.
[9] 歐陽燊. Android Studio開發實戰: 從零基礎到App上線[M]. 北京: 清華大學出版社, 2017.
[10] He K, Zhang X, Ren S. Deep Residual Learning for Image Recognition[C]// IEEE Conference on Computer Vision & Pattern Recognition. IEEE Computer Society, 2016.
[11] Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified, Real-Time Object Detection[J]. arXiv:1506.02640, 2015.
[12] 吳秋遠. 基于Android的無線視頻監控系統設計與實現[D]. 桂林: 廣西師范大學, 2016.
[13] 張子瑜. 一種基于Android網絡通信開發[J]. 電腦編程技巧與維護, 2017(23): 6-9.