黃瀚宇 陳焯輝 肖梓勤 王達灝 王業哲 趙志紅*
(北京理工大學珠海學院,廣東珠海 519088)
信息技術是人類歷史上的第三次工業革命,計算機、互聯網、智能家居等技術的普及極大地方便了人們的日常生活。通過編程的方式,人們可以將提前設計好的交互邏輯交給機器重復且快速地執行,從而將人們從簡單枯燥的重復勞動工作中解脫出來。但是對于需要較高智能水平的任務,如人臉識別、聊天機器人、自動駕駛等任務,很難設計明確的邏輯規則,傳統的編程方式顯得力不從心,而人工智能(Artificial Intelligence, AI)是有望解決此問題的關鍵技術。
隨著深度學習算法的崛起,人工智能在部分任務上取得了類人甚至超人的智力水平,如圍棋上AlphaGo 智能程序已經擊敗人類最強圍棋專家之一柯潔,在Dota2 游戲上OpenAI Five 智能程序擊敗冠軍隊伍OG,同時人臉識別、智能語音、機器翻譯等實用的技術已經進入到人們的日常生活中。現在的生活處處被人工智能所環繞,盡管目前能達到的智能水平離通用人工智能(Artificial General Intelligence, AGI)還有一段距離,但仍堅定地相信人工智能時代已經來臨。
本文首先收集手寫數字表格,然后用OpenCV(一個基于BSD 許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫)技術制作手寫數字圖像數據集,接著用LeNet-5 模型檢測數據集的數據質量優劣情況,最后使用HTML 和Flask 框架搭建網站,再使用內網穿透使外網用戶訪問網站。
首先收集100 份手寫數字表格,如圖1。

圖1 手寫數字表格
然后使用圖像處理中二值化、腐蝕與膨脹技術[1]去除圖像中的表格,去除表格后的圖像,如圖2。

圖2 去除表格后的圖像
接著使用OpenCV 技術,提取每張圖片中所有數字的輪廓。至此,使用OpenCV 技術自制的手寫數字圖像數據集已完成,共10000 張手寫數字圖像。
首先使用圖像的像素值作為模型的特征,由于特征的數量級不一致,圖片像素值的范圍為[0, 255],因此需要對特征進行標準化,將原來的在[0, 255]范圍內的特征值映射到[0,1]區間。因標簽為數字編碼,會占用較多的存儲空間,因此需將標簽轉為獨熱編碼,即One-hot 編碼。One-hot 編碼是非常稀疏的,一般在計算時,需要把離散的數字編碼轉換成One-hot 編碼。最后對數據集進行拆分,選擇80%作為訓練集,20%作為測試集。即訓練集的樣本容量為8000,測試集的樣本容量為2000。
首先使用LeNet-5 模型作為手寫數字圖像識別模型,LeNet-5 是由Lecun 等[2]設計的用于識別手寫和機器打印字符的卷積神經網絡[3],是首次提出的卷積- 池化- 全連接的神經網絡結構。LeNet-5 共有7 層(不包括輸出層),包含卷積層、池化層和全連接層。輸入圖片的形狀為28×28×1,Convolutions 為卷積層,Subsampling 為池化層,Full connection 為全連接層,Gaussian connections 為輸出層,且輸出層神經元個數為10。
由于手寫數字圖像識別[4]屬于多分類問題,需分別使用Softmax 與交叉熵作為輸出層的激活函數與損失函數,具體如下。
Softmax 激活函數公式:

其中,xi為第i 張圖片的像素值,M為類別總數。
Softmax 函數不僅可以將輸出值映射到[0, 1]區間,還滿足所有的輸出值之和為1 的特性。每個輸出值代表了當前樣本屬于每個類別的概率,且概率值之和為1。通過Softmax 函數可以將輸出層的輸出轉譯為類別概率,在分類問題中使用得非常頻繁。
交叉熵可以很好地衡量兩個分布之間的“距離”,其損失函數公式:

其中,c 為類別,M為類別總數。
當Loss 為0 時,損失函數取得最小值,此時網絡輸出的預測值與標簽真實值完全一致,神經網絡取得最優狀態。
對LeNet-5[5]模型進行訓練,設置模型訓練的超參數如表1。

表1 模型訓練超參數
其中,Epoch 為模型的訓練次數,此處設置訓練次數為20;Batch size 為批訓練大小,設置為128 即一次并行計算128 個樣本的數據;Optimizer 為優化器,這里選擇Adam 作為圖像類別數量預測模型的優化器,它默認學習率(Learning rate)為0.001,是一種基于梯度的隨機目標函數優化算法[6];Input shape 為輸入圖像的形狀,設置輸入圖像為像素大小28×28,并且通道數為3 的RGB 圖片;Validation split 為訓練集與驗證集的比例,設置為0.2 即選擇訓練集中的80%作為模型的訓練集,20%作為驗證集,即模型的訓練集的樣本容量為6400,驗證集的樣本容量為1600。
模型訓練共20 個epoch,耗時5 秒。最終訓練集的準確率為99.60%,驗證集的準確率為98.12%。并且繪制訓練過程的損失值與準確率的變化曲線,最后保存模型。訓練過程的損失值和準確率的變化曲線如圖3。

圖3 去除表格后的圖像
將測試集放入模型中進行測試,準確率達到了98.30%,可以看出模型的預測結果較好,手寫數字圖像識別準確。首先輸出模型預測的混淆矩陣如圖4。

圖4 混淆矩陣
從混淆矩陣來看,混淆矩陣的理想輸出結果是主對角線上均存在非零的數字,而非主對角線上的元素均為零,由此可以看出該模型的預測效果好。
再輸出分類報告如表2。

表2 分類報告
Precision1為查準率,Recall1為查全率,F1-score 為F1分數。
Support1為標簽各類別的數量,它們可用于評估模型的預測效果。
從分類報告來看,查準率和召回率得分都較高,且平均的F1-Score 達到98%,由此也能看出該模型的預測效果好。
使用VGG16、VGG19、ResNet50、DenseNet169 和Dense Net201[7]共5 種深層CNN 模型架構對手寫數字圖像數據集進行訓練。在模型訓練之前,先對上述五個模型進行介紹。VGG 系列網絡模型是ILSVRC14 挑戰賽ImageNet 數據集分類任務的亞軍牛津大學VGG 實驗室于2014 年提出的,如VGG16 與VGG19 模型。以VGG16 為例,它在ImageNet 取得了7.4%的Top-5 錯誤率,比AlexNet 在錯誤率上降低了7.9%。ResNet50 網絡則由微軟亞洲研究院何凱明于2015 年提出,在ILSVRC2015 挑戰賽ImageNet 數據集上的分類與檢測等任務上面均獲得了最好性能。而DenseNet 與ResNet 頗為相似,但是它將前面所有層的特征圖信息通過Skip Connection 與當前層輸出進行聚合,與ResNet 的對應位置相加方式不同,DenseNet 采用在通道軸維度進行拼接操作,聚合特征信息。
并且在更換模型訓練的過程中控制相同的超參數,所有的模型都在同一環境下進行訓練,得出各個模型的得分與耗時如表3。

表3 模型比較
可以看出LeNet-5[8]的準確率已經接近各種大型網絡,并且比多個大型網絡的要高。另外,耗時比各種大型網絡的少得多。因此選用得分較高而且更加小巧的網絡LeNet-5 作為訓練手寫數字圖像數據集的模型。
使用HTML 來構建網站頁面,再使用flask 框架使網站運轉起來,最后使用內網穿透技術來實現外網訪問網站。
本文使用OpenCV[9]技術制作手寫數字圖片數據集,并用LeNet-5 網絡檢測數據集的數據質量優劣情況。得出自制數據集的測試集得分為98.30%,并從混淆矩陣與分類報告輸出結果中發現,數據集是可用的。使用Flask 框架和內網穿透搭建網站使用戶可以在網站上使用該模型。