劉小鋒 任弘毅
(東北大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院 國(guó)家級(jí)計(jì)算機(jī)實(shí)驗(yàn)教學(xué)示范中心 遼寧省沈陽(yáng)市 110819)
生活中有一類(lèi)任務(wù),比如語(yǔ)音識(shí)別和圖像識(shí)別,這類(lèi)任務(wù)對(duì)人來(lái)說(shuō)很容易執(zhí)行,但是由于難以進(jìn)行詳細(xì)的描述,所以難以直接用早期人工智能的方法來(lái)實(shí)現(xiàn),這時(shí)就需要引入深度學(xué)習(xí)技術(shù)。2006年,Hinton 提出了深度學(xué)習(xí)的概念[1],該方案可以讓計(jì)算機(jī)從經(jīng)驗(yàn)中學(xué)習(xí),并根據(jù)層次化的概念體系來(lái)理解世界,而每個(gè)概念則通過(guò)與某些相對(duì)簡(jiǎn)單的概念之間的關(guān)系來(lái)定義。讓計(jì)算機(jī)從經(jīng)驗(yàn)獲取知識(shí),可以避免由人類(lèi)來(lái)給計(jì)算機(jī)形式化地指定它需要的所有知識(shí)。層次化的概念讓計(jì)算機(jī)構(gòu)建較簡(jiǎn)單的概念來(lái)學(xué)習(xí)復(fù)雜概念。如果繪制出表示這些概念如何建立在彼此之上的圖,我們將得到一張層次深很多的圖,這種方法稱(chēng)為深度學(xué)習(xí)。由于傳統(tǒng)的考勤方式操作復(fù)雜,安全性差,逐漸無(wú)法適應(yīng)現(xiàn)代社會(huì)的需要,使用深度學(xué)習(xí)的方法可以較好地解決這個(gè)問(wèn)題,因此,要使用基于深度學(xué)習(xí)的方法實(shí)現(xiàn)流水線(xiàn)考勤系統(tǒng)。鄧熠等[2]人以樹(shù)莓派和Intel Movidius 神經(jīng)棒NCS 為硬件平臺(tái)設(shè)計(jì)了基于深度學(xué)習(xí)的考勤系統(tǒng),避免了傳統(tǒng)考勤機(jī)需要近距離刷臉的弊端;李雄等[3]人將VGG16 深度神經(jīng)網(wǎng)絡(luò)提取的Bottleneck 特征輸入至全連接網(wǎng)絡(luò)用以人臉?lè)诸?lèi);劉杰等人[4]利用深度學(xué)習(xí)技術(shù)開(kāi)發(fā)了基于人臉識(shí)別的會(huì)議考勤系統(tǒng);陳超等人[5]基于深度學(xué)習(xí),在樹(shù)莓派上實(shí)現(xiàn)人臉識(shí)別和表情識(shí)別。本文利用經(jīng)典的AlexNet 網(wǎng)絡(luò)模型[6]進(jìn)行訓(xùn)練,這里重點(diǎn)闡述環(huán)境配置和訓(xùn)練結(jié)果,為初學(xué)者提供技術(shù)幫助。
系統(tǒng)總體設(shè)計(jì)目標(biāo):
(1)采用兩個(gè)差別較大的區(qū)域來(lái)模擬流水線(xiàn)的兩個(gè)生產(chǎn)車(chē)間。
(2)在規(guī)定的工作時(shí)間內(nèi),工作人員只能出現(xiàn)在規(guī)定的工作區(qū)域,如果工作人員未在規(guī)定的工作時(shí)間出現(xiàn)在指定的工作區(qū)域,那么在生成的結(jié)果文件中記錄離崗,否則記錄在崗。
(3)通過(guò)調(diào)取錄像來(lái)分析工作人員是否出勤。在生成結(jié)果文件前,需要將視頻截取成圖片集,對(duì)圖片組進(jìn)行深度學(xué)習(xí)后,根據(jù)深度學(xué)習(xí)結(jié)果來(lái)判斷是否有人在崗。
從NVIDIA 官網(wǎng)下載 CUDA[7]及相配套的 cuDNN,舊版CUDA 與新顯卡不兼容,CUDA9.0 版本由于 10 系列顯卡采用了全新的帕斯卡架構(gòu),我們測(cè)試所用電腦為 9 系顯卡,且VS 版本為2013 版,故選用了主流的CUDA8.0,以及相對(duì)應(yīng)的 cuDNN5.1。
打開(kāi)CUDA 安裝文件,解壓安裝,選擇精簡(jiǎn)安裝并選擇所有的驅(qū)動(dòng)組件。之后驗(yàn)證CUDA 是否安裝成功,打開(kāi)cmd,輸入nvcc -V,已安裝 8.0 版本,說(shuō)明CUDA 安裝成功。
安裝且配置驗(yàn)證好 CUDA 以后,安裝 CUDNN,把解壓后的文件復(fù)制CUDA 文件夾中驗(yàn)證 CUDNN 安裝成功。CUDNN 安裝成功后,打開(kāi) VS2013,新建項(xiàng)目里面輸入如下所示的代碼:
CUDNN 安裝成功后,需執(zhí)行以下四步操作,以確定 CUDNN正確安裝。 (1)在項(xiàng)目屬性/VC++ Directories/Include Directories 中添加入 include 的路徑。 (2)在項(xiàng)目屬性/VC++ Directories/Libary Directories 中添加入 libx64 路徑。 (3)在項(xiàng)目屬性/Linker/Input/Additional Dependencies 中添加入 cudnn.lib。 (4) 在項(xiàng)目屬性/CUDA C|C++ / Device /Code Generation 中,將 sm_20 改為 sm_30。運(yùn)行后得到【CUDNN_STATUS_SUCCESS】結(jié)果,說(shuō)明 CUDNN已經(jīng)正確安裝。
三是實(shí)質(zhì)與形式標(biāo)準(zhǔn)綜合說(shuō),即主張從實(shí)質(zhì)與形式相結(jié)合的角度來(lái)劃分犯罪的輕重等級(jí)。例如,有論者認(rèn)為,所謂輕罪,是指行為已構(gòu)成犯罪但社會(huì)危害性較小,行為人主觀(guān)惡性不大或者其智力、身體有缺陷或者其行為可能判處3年有期徒刑以下刑罰的犯罪;除此之外,則為重罪[8]。這種對(duì)輕罪與重罪的劃分,實(shí)際上主要堅(jiān)持的仍是實(shí)質(zhì)標(biāo)準(zhǔn),同時(shí)也兼顧到了形式標(biāo)準(zhǔn)。
(1)下載代碼,在 GitHub 上找到源碼壓縮包 https://github.com/Microsoft/caffe,得到文件“caffe-master.zip”,解壓。
(2)打開(kāi) caffe-master 文件夾,之后看到一個(gè) windows 文件夾,然后繼續(xù)打開(kāi), windows 文件夾,看到里面一個(gè) CommonSettings.props.example 文件,復(fù)制出來(lái)一 份,并改名字為 CommonSettings.props
(3)用VS2013 打開(kāi)Caffe.sln,打開(kāi) CommenSetting.probs.在cudapath 那里把 計(jì)算機(jī)學(xué)院通信工程專(zhuān)業(yè)生產(chǎn)實(shí)習(xí)報(bào)告 -20- CUDA(含有已經(jīng)放進(jìn)去的 CUDNN)的目錄路徑放到其中。如圖 1所示。
圖1:Caffe.sln 內(nèi)容
(4)設(shè)置好之后開(kāi)始編譯 libcaffe,編譯成功后在 caffe-master文件夾下面就應(yīng) 該出現(xiàn)一個(gè)名叫 Build 的文件夾,以后編譯的成功和運(yùn)行需要的文件都會(huì)存放在 buildX64Release 下面。
(5)其他組件在后面生成模型的需要的時(shí)候隨時(shí)可以編譯。
(1)Caffe[8]需要先把數(shù)據(jù)轉(zhuǎn)化為 lmdb 或 leveldb 格式進(jìn)行讀取。lmdb 是 lightning(閃電的) memory-mapped database manager 的縮寫(xiě),能夠把原始數(shù)據(jù)通過(guò) 更為高效的存儲(chǔ)方式存儲(chǔ),從而加快讀取和訓(xùn)練速度(lmdb 比 leveldb 更快,本次 我們使用 lmdb)。 實(shí)現(xiàn)這個(gè)轉(zhuǎn)化的代碼是examplesmnist 的 convert_mnist_data.cpp,其運(yùn)行腳本 create_mnist.sh 是 linux 下的代碼。
(2) 用VS 打開(kāi)examplesmnist 目錄下的 lenet_solver.prototxt,因?yàn)槲覀冏罱K訓(xùn) 練模型用 gpu 生成,所以最后一行用gpu。
圖2:lenet_train_test.prototxt 文件中內(nèi)
(4)編寫(xiě)bat 腳本進(jìn)行正式訓(xùn)練,回到 caffe-windows 的根目錄下新建一個(gè) bat 并寫(xiě)入以下內(nèi)容即可開(kāi)始訓(xùn)練。
(5)當(dāng)?shù)螖?shù)達(dá)到 lenet_solver.prototxt 定義的 max_iter 時(shí),就可以認(rèn)為訓(xùn)練 結(jié)束了。并且最終會(huì)在目錄examplesmnist 下產(chǎn)生訓(xùn)練出的模型(文件后綴名為 caffemodel 和 solverst)。
(1)錄制兩個(gè)視頻,兩個(gè)視頻用來(lái)模擬工廠(chǎng)流水線(xiàn)兩個(gè)不同的區(qū)域。由于系統(tǒng)設(shè)計(jì)時(shí)間和條件有限,這里選擇在寢室內(nèi)錄制,以寢室內(nèi)兩個(gè)差別較大的區(qū)域作為工廠(chǎng)里面兩個(gè)不同的區(qū)域,錄制好的兩個(gè)視頻文件,并將視頻內(nèi)進(jìn)行截圖。
(2)將兩個(gè)視頻流分割成兩個(gè)圖片集,這里利用 c++語(yǔ)言調(diào)用 OpenCV 來(lái)實(shí)現(xiàn)視頻分割。
(3)圖片分割完成后,需要用 bat 批處理文件調(diào)用兩個(gè)測(cè)試文件分別對(duì)兩組圖 片進(jìn)行測(cè)試,測(cè)試文件里的內(nèi)容。
(4)為了使生成的測(cè)試結(jié)果輸出到 txt 文本中,又寫(xiě)了兩個(gè)bat 批處理文件,只需運(yùn)行這兩個(gè)文件便可得到測(cè)試結(jié)果。在 txt 文本當(dāng)中輸出的結(jié)果如圖 3所示。
圖3:txt 考勤結(jié)果文本
(1)在兩段視頻錄制過(guò)程中,只要出現(xiàn)判決為無(wú)人的情況就得出缺勤的結(jié)果,并將結(jié)果輸出。
(2)由于將視頻文件分割成圖片過(guò)程中,人物的快速行動(dòng)會(huì)使截圖不清晰,從而會(huì)使得一段時(shí)間內(nèi)的圖片識(shí)別出現(xiàn)誤差,因此規(guī)定少于連續(xù)3 張圖片判決為同一結(jié)果的為無(wú)效判決,在輸出考勤結(jié)果時(shí)對(duì)這種情況不予考慮。
(3)由于本實(shí)習(xí)是模擬工廠(chǎng)流水線(xiàn)環(huán)境,所以可以根據(jù)實(shí)際需要將系統(tǒng)改為實(shí)時(shí)系統(tǒng),當(dāng)工作人員在規(guī)定時(shí)間內(nèi)超出自己的工作區(qū)域就向工廠(chǎng)相關(guān)負(fù)責(zé)人員發(fā) 出一條警報(bào)信息,以便負(fù)責(zé)人員能夠?qū)@類(lèi)情況進(jìn)行即時(shí)處理。
(4)考慮到交接班的情況,規(guī)定在交接班的某一段時(shí)間內(nèi)無(wú)論做出什么樣的判決結(jié)果都不記為缺勤。
隨著計(jì)算機(jī)技術(shù)及人工智能的發(fā)展,深度學(xué)習(xí)技術(shù)應(yīng)用在各個(gè)領(lǐng)域。本文將流水線(xiàn)考勤系統(tǒng)存在存在的問(wèn)題,利用深度學(xué)習(xí)技術(shù)進(jìn)行彌補(bǔ),有效的提高了檢測(cè)效果。使學(xué)生通過(guò)典型應(yīng)用案例,理解深度學(xué)習(xí)模型的訓(xùn)練過(guò)程,掌握系統(tǒng)的設(shè)計(jì)方法。系統(tǒng)初步完成了考勤系統(tǒng)的功能,今后還在管理界面制作、后臺(tái)數(shù)據(jù)庫(kù)管理等方面進(jìn)行完善,通過(guò)系統(tǒng)的設(shè)計(jì)和完善對(duì)以后的工作和學(xué)習(xí)有很大幫助。