黃瀚宇 陳焯輝 肖梓勤 王達(dá)灝 王業(yè)哲 趙志紅*
(北京理工大學(xué)珠海學(xué)院,廣東珠海 519088)
信息技術(shù)是人類歷史上的第三次工業(yè)革命,計算機(jī)、互聯(lián)網(wǎng)、智能家居等技術(shù)的普及極大地方便了人們的日常生活。通過編程的方式,人們可以將提前設(shè)計好的交互邏輯交給機(jī)器重復(fù)且快速地執(zhí)行,從而將人們從簡單枯燥的重復(fù)勞動工作中解脫出來。但是對于需要較高智能水平的任務(wù),如人臉識別、聊天機(jī)器人、自動駕駛等任務(wù),很難設(shè)計明確的邏輯規(guī)則,傳統(tǒng)的編程方式顯得力不從心,而人工智能(Artificial Intelligence, AI)是有望解決此問題的關(guān)鍵技術(shù)。
隨著深度學(xué)習(xí)算法的崛起,人工智能在部分任務(wù)上取得了類人甚至超人的智力水平,如圍棋上AlphaGo 智能程序已經(jīng)擊敗人類最強(qiáng)圍棋專家之一柯潔,在Dota2 游戲上OpenAI Five 智能程序擊敗冠軍隊伍OG,同時人臉識別、智能語音、機(jī)器翻譯等實用的技術(shù)已經(jīng)進(jìn)入到人們的日常生活中?,F(xiàn)在的生活處處被人工智能所環(huán)繞,盡管目前能達(dá)到的智能水平離通用人工智能(Artificial General Intelligence, AGI)還有一段距離,但仍堅定地相信人工智能時代已經(jīng)來臨。
本文首先收集手寫數(shù)字表格,然后用OpenCV(一個基于BSD 許可(開源)發(fā)行的跨平臺計算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫)技術(shù)制作手寫數(shù)字圖像數(shù)據(jù)集,接著用LeNet-5 模型檢測數(shù)據(jù)集的數(shù)據(jù)質(zhì)量優(yōu)劣情況,最后使用HTML 和Flask 框架搭建網(wǎng)站,再使用內(nèi)網(wǎng)穿透使外網(wǎng)用戶訪問網(wǎng)站。
首先收集100 份手寫數(shù)字表格,如圖1。
圖1 手寫數(shù)字表格
然后使用圖像處理中二值化、腐蝕與膨脹技術(shù)[1]去除圖像中的表格,去除表格后的圖像,如圖2。
圖2 去除表格后的圖像
接著使用OpenCV 技術(shù),提取每張圖片中所有數(shù)字的輪廓。至此,使用OpenCV 技術(shù)自制的手寫數(shù)字圖像數(shù)據(jù)集已完成,共10000 張手寫數(shù)字圖像。
首先使用圖像的像素值作為模型的特征,由于特征的數(shù)量級不一致,圖片像素值的范圍為[0, 255],因此需要對特征進(jìn)行標(biāo)準(zhǔn)化,將原來的在[0, 255]范圍內(nèi)的特征值映射到[0,1]區(qū)間。因標(biāo)簽為數(shù)字編碼,會占用較多的存儲空間,因此需將標(biāo)簽轉(zhuǎn)為獨熱編碼,即One-hot 編碼。One-hot 編碼是非常稀疏的,一般在計算時,需要把離散的數(shù)字編碼轉(zhuǎn)換成One-hot 編碼。最后對數(shù)據(jù)集進(jìn)行拆分,選擇80%作為訓(xùn)練集,20%作為測試集。即訓(xùn)練集的樣本容量為8000,測試集的樣本容量為2000。
首先使用LeNet-5 模型作為手寫數(shù)字圖像識別模型,LeNet-5 是由Lecun 等[2]設(shè)計的用于識別手寫和機(jī)器打印字符的卷積神經(jīng)網(wǎng)絡(luò)[3],是首次提出的卷積- 池化- 全連接的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。LeNet-5 共有7 層(不包括輸出層),包含卷積層、池化層和全連接層。輸入圖片的形狀為28×28×1,Convolutions 為卷積層,Subsampling 為池化層,F(xiàn)ull connection 為全連接層,Gaussian connections 為輸出層,且輸出層神經(jīng)元個數(shù)為10。
由于手寫數(shù)字圖像識別[4]屬于多分類問題,需分別使用Softmax 與交叉熵作為輸出層的激活函數(shù)與損失函數(shù),具體如下。
Softmax 激活函數(shù)公式:
其中,xi為第i 張圖片的像素值,M為類別總數(shù)。
Softmax 函數(shù)不僅可以將輸出值映射到[0, 1]區(qū)間,還滿足所有的輸出值之和為1 的特性。每個輸出值代表了當(dāng)前樣本屬于每個類別的概率,且概率值之和為1。通過Softmax 函數(shù)可以將輸出層的輸出轉(zhuǎn)譯為類別概率,在分類問題中使用得非常頻繁。
交叉熵可以很好地衡量兩個分布之間的“距離”,其損失函數(shù)公式:
其中,c 為類別,M為類別總數(shù)。
當(dāng)Loss 為0 時,損失函數(shù)取得最小值,此時網(wǎng)絡(luò)輸出的預(yù)測值與標(biāo)簽真實值完全一致,神經(jīng)網(wǎng)絡(luò)取得最優(yōu)狀態(tài)。
對LeNet-5[5]模型進(jìn)行訓(xùn)練,設(shè)置模型訓(xùn)練的超參數(shù)如表1。
表1 模型訓(xùn)練超參數(shù)
其中,Epoch 為模型的訓(xùn)練次數(shù),此處設(shè)置訓(xùn)練次數(shù)為20;Batch size 為批訓(xùn)練大小,設(shè)置為128 即一次并行計算128 個樣本的數(shù)據(jù);Optimizer 為優(yōu)化器,這里選擇Adam 作為圖像類別數(shù)量預(yù)測模型的優(yōu)化器,它默認(rèn)學(xué)習(xí)率(Learning rate)為0.001,是一種基于梯度的隨機(jī)目標(biāo)函數(shù)優(yōu)化算法[6];Input shape 為輸入圖像的形狀,設(shè)置輸入圖像為像素大小28×28,并且通道數(shù)為3 的RGB 圖片;Validation split 為訓(xùn)練集與驗證集的比例,設(shè)置為0.2 即選擇訓(xùn)練集中的80%作為模型的訓(xùn)練集,20%作為驗證集,即模型的訓(xùn)練集的樣本容量為6400,驗證集的樣本容量為1600。
模型訓(xùn)練共20 個epoch,耗時5 秒。最終訓(xùn)練集的準(zhǔn)確率為99.60%,驗證集的準(zhǔn)確率為98.12%。并且繪制訓(xùn)練過程的損失值與準(zhǔn)確率的變化曲線,最后保存模型。訓(xùn)練過程的損失值和準(zhǔn)確率的變化曲線如圖3。
圖3 去除表格后的圖像
將測試集放入模型中進(jìn)行測試,準(zhǔn)確率達(dá)到了98.30%,可以看出模型的預(yù)測結(jié)果較好,手寫數(shù)字圖像識別準(zhǔn)確。首先輸出模型預(yù)測的混淆矩陣如圖4。
圖4 混淆矩陣
從混淆矩陣來看,混淆矩陣的理想輸出結(jié)果是主對角線上均存在非零的數(shù)字,而非主對角線上的元素均為零,由此可以看出該模型的預(yù)測效果好。
再輸出分類報告如表2。
表2 分類報告
Precision1為查準(zhǔn)率,Recall1為查全率,F(xiàn)1-score 為F1分?jǐn)?shù)。
Support1為標(biāo)簽各類別的數(shù)量,它們可用于評估模型的預(yù)測效果。
從分類報告來看,查準(zhǔn)率和召回率得分都較高,且平均的F1-Score 達(dá)到98%,由此也能看出該模型的預(yù)測效果好。
使用VGG16、VGG19、ResNet50、DenseNet169 和Dense Net201[7]共5 種深層CNN 模型架構(gòu)對手寫數(shù)字圖像數(shù)據(jù)集進(jìn)行訓(xùn)練。在模型訓(xùn)練之前,先對上述五個模型進(jìn)行介紹。VGG 系列網(wǎng)絡(luò)模型是ILSVRC14 挑戰(zhàn)賽ImageNet 數(shù)據(jù)集分類任務(wù)的亞軍牛津大學(xué)VGG 實驗室于2014 年提出的,如VGG16 與VGG19 模型。以VGG16 為例,它在ImageNet 取得了7.4%的Top-5 錯誤率,比AlexNet 在錯誤率上降低了7.9%。ResNet50 網(wǎng)絡(luò)則由微軟亞洲研究院何凱明于2015 年提出,在ILSVRC2015 挑戰(zhàn)賽ImageNet 數(shù)據(jù)集上的分類與檢測等任務(wù)上面均獲得了最好性能。而DenseNet 與ResNet 頗為相似,但是它將前面所有層的特征圖信息通過Skip Connection 與當(dāng)前層輸出進(jìn)行聚合,與ResNet 的對應(yīng)位置相加方式不同,DenseNet 采用在通道軸維度進(jìn)行拼接操作,聚合特征信息。
并且在更換模型訓(xùn)練的過程中控制相同的超參數(shù),所有的模型都在同一環(huán)境下進(jìn)行訓(xùn)練,得出各個模型的得分與耗時如表3。
表3 模型比較
可以看出LeNet-5[8]的準(zhǔn)確率已經(jīng)接近各種大型網(wǎng)絡(luò),并且比多個大型網(wǎng)絡(luò)的要高。另外,耗時比各種大型網(wǎng)絡(luò)的少得多。因此選用得分較高而且更加小巧的網(wǎng)絡(luò)LeNet-5 作為訓(xùn)練手寫數(shù)字圖像數(shù)據(jù)集的模型。
使用HTML 來構(gòu)建網(wǎng)站頁面,再使用flask 框架使網(wǎng)站運(yùn)轉(zhuǎn)起來,最后使用內(nèi)網(wǎng)穿透技術(shù)來實現(xiàn)外網(wǎng)訪問網(wǎng)站。
本文使用OpenCV[9]技術(shù)制作手寫數(shù)字圖片數(shù)據(jù)集,并用LeNet-5 網(wǎng)絡(luò)檢測數(shù)據(jù)集的數(shù)據(jù)質(zhì)量優(yōu)劣情況。得出自制數(shù)據(jù)集的測試集得分為98.30%,并從混淆矩陣與分類報告輸出結(jié)果中發(fā)現(xiàn),數(shù)據(jù)集是可用的。使用Flask 框架和內(nèi)網(wǎng)穿透搭建網(wǎng)站使用戶可以在網(wǎng)站上使用該模型。