高云華,劉奔
(江蘇經貿職業技術學院,江蘇南京,211168)
上世紀60年代,Hubel等人通過對貓視覺皮層細胞的研究,提出了感受野這個概念,到80年代,Fukushima在感受野概念的基礎之上提出了神經認知機的概念,第一次在技術上實現了卷積神經網路。卷積神經網絡(CNN),顧名思義,內部包含卷積結構,同時具有深度前饋。卷積神經網絡需要大量用于訓練的數據,但其依靠三個關鍵的操作大大減少深層網絡占用的內存量,分別是局部感受野,權值共享,pooling層,有效的減少了網絡的參數個數,緩解了模型的過擬合問題[1]。在二十一世紀后,隨著深度學習理論的提出和數值計算設備的改進,現在CNN已經成為眾多科學領域的研究熱點之一,并根據其學習的特征可以進行監督學習和非監督學習。特別是在模式分類領域,CNN可以不用對圖像進行復雜的前期處理,如去噪、二值化、腐蝕、膨脹、邊緣檢測、分割等步驟,因此在使用中更為便捷。近年來卷積神經網絡的研究也在不斷突破,成為是圖像識別領域的核心算法之一,在日益興起的熱門領域中應用極其廣泛,并在學習數據充足時有穩定的表現[2]。
卷積神經網絡模型主要包括輸入層、卷積層、池化層、全連接層和輸出層,網絡結構如圖1。卷積神經網絡在計算機視覺及圖像處理領域應用較廣,因此輸入層信息為平面上的二維像素點和RGB通道。為了提取的特征更加豐富,網絡模型通常由一個或多個卷積層、池化層以及全連接層構成。在一些更為現代的算法中可能有Inception模塊、殘差塊(residual block)等復雜構筑。卷積神經網絡整體架構是一種多層監督學習的神經網絡,通過學習大量的輸入輸出樣本,用卷積神經網絡進行訓練,再根據新的輸入,輸出擬合之后的結果。經典的卷積神經網絡模型有LeNet-5、AlexNet、VGG、GoogleNet、ResNet以及DenseNet等,這幾種網絡在深度和復雜度方面依次遞增,但每個模型都有獨特的優點與缺點[3]。

圖1 卷積神經網絡結構
識別前必須先獲得雙方棋子圖像,此時可將棋子放入白色背景的指定位置孔位,為方便后續圖像目標提取與分割,在孔位邊沿有與棋子邊緣大小一致的黑色矩形。用搭載了攝像頭的樹梅派采集識別圖片,調用OpenCV中VideoCapture類實例化一個視頻對象,用該類的read方法讀取攝像頭視頻流,按鍵拍攝一幅圖像,使用imwrite方法將圖片保存[4]。獲取的圖片放入預先訓練好的卷積神經網絡模型中進行棋面文字的預測,按軍棋規則比較棋力大小,給出判定結果,根據需要可以有聲光電提示。模型的構建與訓練直接影響到最后的判斷結果,因此至關重要。
本文使用的模型參照AlexNet模型結構,如圖2所示,它是8層網絡結構,有5個卷積層和3個全連接層。卷積層參數有3個:卷積核大小、步長和填充,三者共同決定了卷積層輸出特征圖的尺寸,是卷積神經網絡的超參數。其中卷積核大小可以人為指定,其值可以是小于輸入圖像尺寸的任意值,可根據經驗設定,但不宜過大或過小。本文中采集到的圖像通過OpenCV中的resize( )函數裁減為大小224*224,第一卷積層使用大的卷積核,大小為11*11,步長為4, 采用最大池化,大小為3*3,步長為2,,第二卷積層使用5*5的卷積核大小,步長為1, 采用最大池化,大小為3*3,步長為2,,剩余卷積層都是3*3的大小,步長為1。激活函數使用ReLu ,激活函數的作用是能夠給神經網絡加入一些非線性因素,使得神經網絡可以更好地解決較為復雜的問題。常用的激活函數有sigmoid和ReLu兩種。兩者比較,ReLu 激活函數能夠大幅提高運算效率,減少運算量,同時ReLU會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生。另一方面在輸入信號較強時,仍然能夠保留信號之間的差別[5]。采用最大池化,大小為3*3,步長為2。3個全連接層,全連接層增加了dropout,為0.5,最終激活函數采用softmax,類別為12*2(紅黑雙方棋子類別各為12種)。

圖2 AlexNet模型結構
數據集的數量與質量對后續創建的神經網絡模型預測準確性有直接的影響,所以在初始階段數據集的準備顯得尤為重要。目前市面上軍棋的品牌眾多,棋子大小尺寸和棋面字體顏色不統一,為了保證數據的多樣性,通過實物拍攝和網絡搜索,獲取了軍棋各類棋子的樣本,經篩選后獲得50例有效數據,并將其進行裁減,尺寸為224*224,數據樣本示例見圖3。

圖3 數據樣本示例
由于卷積神經網絡在訓練時需要大量的數據,通過拍攝和網絡圖片獲得的數據量有限,不能滿足卷積神經網絡訓練時需要大量數據的要求,因此本文在獲取的原始圖片的基礎上采取數據增強的方法來擴充以創建更加豐富的數據集。數據增強的方法目前主要是對圖像進行相應的幾何變換(平移、翻轉、旋轉、縮放)、調整亮度、調整對比度以及調整銳度等。每張圖對于網絡來說都是不同的輸入,比如最初采集圖片的分辨率大小是256×256,若采用隨機裁剪成224×224的方式,那么一張圖最多可以產生32×32張不同的圖,數據量擴充將近1000倍。雖然許多的圖相似度太高,實際的效果并不等價,但僅僅是這樣簡單的一個操作,效果已經非凡。本文中將每類棋子通過數據增強的方法擴充到300例,再將其按8:2隨機劃分為訓練集和測試集,詳見表 1。

表1 軍棋數據集
不同的棋子圖片按類別放在對應的數據集文件夾中,提取文件夾名稱,即為棋子類別。模型訓練好后,將獲得的對戰雙方圖片送入模型進行預測。根據大棋吃小棋,同歸于盡或挖雷等軍棋玩法規則,工兵能排除地雷,其它棋子不能排雷;炸彈與任何棋子相遇時同歸于盡等軍棋玩法規則,設定比較判斷條件。將軍棋中的工兵、排長、連長、營長、團長、旅長、師長、軍長、司令分別設定棋力為1~9,地雷、炸彈設為-1、-2,軍棋設為100,在程序中設定比較判斷條件,最后得到比較結果。
本系統采用卷積神經訓練模型,訓練后的模型裝載到樹莓派中。樹莓派被譽為 “世界上最流行最便宜的小型電腦”,它只有一張信用卡那么大,放到手掌中也綽綽有余。樹莓派可以安裝多種Linux系統發行版,在嵌入式和物聯網領域應用廣泛。目前樹莓派更新到第4代,如圖4所示,可根據需要配置1G、2G或4G內存,支持雙屏4K輸出和H.265硬件解碼;處理器搭載博通1.5GHz的四核ARM Cortex-A72處理器,支持雙頻無線Wi-Fi(802.11ac)、藍牙5.0,提供兩個Micro HDMI 2.0視頻輸出接口;內置千兆以太網口、MIPI DSI接口、MIPI CSI相機接口、立體聲耳機接口、2個USB 3.0和2個USB 2.0,擴展接口是40針的GPIO。

圖4 樹莓派
樹莓派經濟性高,但總體來說性能比不上常見的個人電腦。因此訓練模型的任務預先需要在電腦上完成,為了提高準確率,訓練時輸入圖片要達到一定數量,在采集到的圖像有限的條件下,可以采用之前提到的數據增強的方法。樹莓派中用Python語言編寫軍棋判定的程序,并加載訓練好的模型。本系統硬件部分完成軍棋雙方對戰時相碰棋子大小的判定,結構如圖5所示,因此給樹莓派連接攝像頭,按下相應的按鍵后將采集到圖像后送入訓練好的模型中進行棋面大小和屬于紅黑的判斷,為了增強效果和交互性,可以點亮指定顏色的燈進行示意,并且也可以用語音播報勝負一方。

圖5 系統框圖
本文在Pycharm集成開發環境中構架AlexNet模型,以第一層卷積層構建如下:
self.c1=Conv2D(filters=96,kernel_size=(11,11),strides=4, input_shape=input_shape)
self.b1=BatchNormalization()
self.a1=Activation(‘relu’)
self.p1=MaxPool2D(pool_size=(3,3),strides=2),其中input_shape=(224, 224, 3),最后一層全連接層為self.f3=Dense(num_classes, activation=’softmax’),其 中num_classes=24[6]。將訓練集圖片進行歸一化處理后送入AlexNet 進行特征提取;將訓練集圖片進行歸一化處理后送入AlexNet 進行特征提取;模型訓練完成后,將測試集傳入訓練好的模型進行預測,準確率達到98.73%。
將軍棋隊戰中雙方圖片放入經過訓練的模型中進行棋面文字預測,識別準確,可達98.78%。再按照軍棋規則,即可自動判定大小。軍棋棋面字體風格各異,利用卷積神經網絡能很好的應對棋子潔凈度,光線的影響,具有較高的實用價值。
本文采用卷積神經網絡中的AlexNet模型來對軍棋棋面文字識別,進而實現雙方對戰時無需人工第三方即做出自動判定,結果顯示識別準確率較高。卷積神經網絡關鍵處在于能獲取足夠豐富的數據集,后續為了達到更好的識別效果,應當盡可能多獲取數據并提升數據預處理方法,經過訓練得到更優的模型,以此應對識別過程中因外界因素,如棋面潔凈度,周圍光線環境對預測結果的不良影響。