王 銘,劉靚葳,董延華
隨著人工智能的高速發(fā)展,從智能AI的出現(xiàn)到海面船只的檢測(cè),人工智能變得越來(lái)越重要.而目標(biāo)檢測(cè)作為人工智能的重要領(lǐng)域之一,受到越來(lái)越多的人的關(guān)注和重視.目前,目標(biāo)檢測(cè)的算法主要分為兩類,第一類是兩步走的目標(biāo)檢測(cè)算法,先進(jìn)行區(qū)域推薦,而后進(jìn)行目標(biāo)分類,典型代表有Regions with Convolutional Neural Network Feature(簡(jiǎn)稱 R-CNN)[1]、Spatial Pyramid Pooling Convolutional Networks(簡(jiǎn)稱 SPP-net)[2]、Fast R-CNN[3]等.第二類是端到端的目標(biāo)檢測(cè),即采用一個(gè)網(wǎng)絡(luò)進(jìn)行一步到位,基于深度學(xué)習(xí)的回歸思想,其典型代表為 You Only Look Once[4](簡(jiǎn)稱YOLO)、SSD等[5].在上述的幾種算法中,SSD的性能相對(duì)更好,具有速度快、精度高等優(yōu)點(diǎn).SSD有許多網(wǎng)絡(luò)模型,主要區(qū)別在于檢測(cè)圖像的大小不同,例如:SSD500表示支持的檢測(cè)圖像的大小為500*500,SSD300表示支持的檢測(cè)圖像大小為300*300.本文主要介紹TensorFlow在圖像識(shí)別的領(lǐng)域,圖像識(shí)別過(guò)程主要包括訓(xùn)練和測(cè)試兩個(gè)階段的應(yīng)用.訓(xùn)練階段對(duì)圖像特征進(jìn)行訓(xùn)練得到分類模型,測(cè)試階段可以利用已訓(xùn)練模型得到識(shí)別結(jié)果[6].
Google發(fā)布人工智能系統(tǒng)TensorFlow不僅能夠?qū)崿F(xiàn)機(jī)器學(xué)習(xí)算法的接口,而且也是機(jī)器學(xué)習(xí)的框架.TensorFlow可被用于語(yǔ)音識(shí)別、自然語(yǔ)言處理和圖像識(shí)別等多項(xiàng)機(jī)器深度學(xué)習(xí)領(lǐng)域.
TensorFlow以高度的靈活性、真正的可移植性、自動(dòng)求微分、多語(yǔ)言支持、性能最優(yōu)化等特征被越來(lái)越多的人應(yīng)用.而TensorFlow的庫(kù)Tensor-Flow Object Detection API其用途為訓(xùn)練能夠識(shí)別出物體的神經(jīng)網(wǎng)絡(luò).這個(gè)庫(kù)幾乎沒(méi)有任何限制,可以用他訓(xùn)練AI識(shí)別照片里的人物、貓、狗、汽車等,本文用于識(shí)別“皮卡丘”.
TensorFlow Object Detection API目的是創(chuàng)建一個(gè)能夠在單個(gè)圖像中定位和識(shí)別多個(gè)對(duì)象的精確機(jī)器學(xué)習(xí)模型.TensorFlow Object Detection API是在Tensorflow上構(gòu)造的開(kāi)源框架,易于構(gòu)建、訓(xùn)練和部署目標(biāo)檢測(cè)模型,也是用于解決物體檢測(cè)問(wèn)題的庫(kù),物體檢測(cè)即在一個(gè)畫面幀中檢測(cè)各種不同物體的過(guò)程,本文中是識(shí)別皮卡丘的過(guò)程.這個(gè)庫(kù)較為特殊的是,它能根據(jù)不同的速度和內(nèi)存使用情況變換模型的準(zhǔn)確度,因此可以讓模型適配于自己的需求和所用平臺(tái).這個(gè)庫(kù)還有一些非常創(chuàng)新的物體檢測(cè)架構(gòu),比如SSD、Faster R-CNN、R-FCN和MobileNet等,本文采用的是SSD.
SSD學(xué)習(xí)算法結(jié)合了YOLO算法中的回歸思想和Faster-RCNN算法中的Anchor機(jī)制,使用全圖各個(gè)位置的多尺度區(qū)域進(jìn)行回歸,既保持了YOLO算法速度快的特性,也保證了窗口預(yù)測(cè)同F(xiàn)aster-RCNN算法一樣精準(zhǔn)[7].SSD算法的核心是在不同尺度的特征圖上采用卷積核來(lái)預(yù)測(cè)一系列Default Bounding Boxes的類別、坐標(biāo)偏移.
SSD結(jié)構(gòu)模型以VGG-16為基礎(chǔ),使用VGG的前五個(gè)卷積,后面增加從CONV6開(kāi)始的5個(gè)卷積結(jié)構(gòu),輸入圖片要求300*300.SSD框架主要分成兩部分,其一是位于前段的深度學(xué)習(xí)網(wǎng)絡(luò)part_one;其二是位于后端的多尺度特征檢測(cè)網(wǎng)絡(luò)part_two.SSD結(jié)構(gòu)模型如圖1所示[8].
圖1 SSD的結(jié)構(gòu)模型圖
SSD中引入了defalut box,實(shí)際上與Faster R-CNN的anchor box機(jī)制類似,目的是預(yù)設(shè)一些目標(biāo)預(yù)選框,不同的是在不同尺度f(wàn)eature map[9]所有特征點(diǎn)上是使用不同的prior boxes.part_one的feature map大小為38*38,經(jīng)過(guò)規(guī)格層的處理后,保持大小不變,傳至SSD特有網(wǎng)絡(luò),表示為conv4_3;part_two輸出fc7,feature map大小為19*19,傳至SSD特有網(wǎng)絡(luò)[10].為獲取更多的特征圖像信息,增加了4個(gè)卷積神經(jīng).輸出的feature map大小分別為 10*10、5*5、3*3、1*1,以上均傳至SSD特有網(wǎng)絡(luò).Detector&classifier的三個(gè)部分,分別為 default boxes、localization、confidence.default boxes表示為默認(rèn)候選框,其本質(zhì)是得到坐標(biāo)數(shù)據(jù),本部分可由開(kāi)始確定的網(wǎng)絡(luò)模型參數(shù)進(jìn)行計(jì)算得到.localization表示位置偏移量,其本質(zhì)是得到坐標(biāo)的調(diào)整參數(shù),即每個(gè)數(shù)據(jù)都要分別進(jìn)行同樣的處理,localization最后會(huì)進(jìn)行維度的合并.confidence表示置信度,其本質(zhì)是得到最終的可能性,即屬于某一類別的概率.本文中則是識(shí)別“皮卡丘”的概率.SSD原理過(guò)程圖如圖2所示.
圖2 SSD原理過(guò)程圖
SSD利用多尺度的方法來(lái)進(jìn)行目標(biāo)檢測(cè).假設(shè)模型檢測(cè)時(shí)采用m層特征圖,則第k個(gè)特征圖的默認(rèn)框的比例為[11]:
式中:Smin代表特征層默認(rèn)框所占輸入圖像的最小比例,一般取值為0.2;Smax代表特征層默認(rèn)框占輸入圖像的最大比例,一般取值為0.9.同時(shí),SSD采用Faster-RCNN中的anchor機(jī)制,對(duì)于一個(gè)特征層中的默認(rèn)框采用不同的高寬比,增強(qiáng)對(duì)不同形狀的物體的檢測(cè)效果,增強(qiáng)魯棒性.本文中將采用5種高度比,即:
當(dāng)r1=1時(shí),添加,每個(gè)默認(rèn)框高度分別代表為:
SSD在訓(xùn)練的同時(shí)對(duì)位置和目標(biāo)種類進(jìn)行回歸,其目標(biāo)損失函數(shù)L(x,c,l,g)是置信損失之和[11],即為:
其中N代表ground truth物體框匹配的默認(rèn)框的個(gè)數(shù),Lconf(x,c)代表置信損失函數(shù),Lloc(x,l,g)代表位置損失函數(shù),x為默認(rèn)框與不同類別的ground truth物體框的匹配結(jié)果,c為預(yù)測(cè)物體框的置信度,l為預(yù)測(cè)物體框的位置信息,g為ground truth物體框的位置信息;α為權(quán)衡置信損失和位置損失的參數(shù),一般為1.在目標(biāo)損失函數(shù)中同時(shí)包含置信損失和位置損失,在訓(xùn)練中,通過(guò)減少損失函數(shù)的函數(shù)值可以確保在提升預(yù)測(cè)框類別置信度的同時(shí)也提高預(yù)測(cè)框的位置可信度而用于數(shù)據(jù)集訓(xùn)練,通過(guò)多次結(jié)果的反饋,不斷提高模型的目標(biāo)檢測(cè)能力,從而訓(xùn)練出模型.
對(duì)于識(shí)別皮卡丘的項(xiàng)目,本文下載了230個(gè)中等大小的皮卡丘照片,將保存照片的目錄命名為“images”.為了提高結(jié)果的精確度找了些不同角度和不同形狀的皮卡丘的照片,在圖像獲取完畢后,用Labelme進(jìn)行標(biāo)記,即圍繞物體畫一個(gè)邊界框,告訴系統(tǒng)框里的這個(gè)物體實(shí)際上就是要學(xué)習(xí)識(shí)別的物體.當(dāng)標(biāo)記完畢時(shí),得到一個(gè)名為“annotations”的目錄,描述了每張圖像的邊界框的xml文件.
拆分?jǐn)?shù)據(jù)集,即將230個(gè)中等大小的圖片,分為訓(xùn)練集和測(cè)試集.本文中向訓(xùn)練目錄里添加了約70%的圖像及其xml文件,向測(cè)試目錄里添加了約30%的圖像及其xml文件[5].創(chuàng)建新的數(shù)據(jù)集為將圖像及其xml文件的格式轉(zhuǎn)換成Tensor-Flow可讀取的格式,也就是Tfrecord格式.
“標(biāo)簽”映射會(huì)指明標(biāo)簽及其需要的索引.如下所示:
Google發(fā)布了新的TensorFlow物體檢測(cè)API,其中包含了預(yù)訓(xùn)練的模型,本文使用百度下載的數(shù)據(jù)集對(duì)模型進(jìn)行重新訓(xùn)練,并通過(guò)對(duì)庫(kù)的載入、環(huán)境的設(shè)置、物體檢測(cè)的載入、模型的準(zhǔn)備、下載模型、將模型載入內(nèi)存、載入標(biāo)簽圖、開(kāi)始檢測(cè).部分核心代碼如下:
不同模式下的目標(biāo)和對(duì)象識(shí)別已經(jīng)成為研究的熱點(diǎn).本文主要在基于TensorFlow框架中Object Detection API基礎(chǔ)上,結(jié)合SSD算法,設(shè)計(jì)實(shí)現(xiàn)了圖像神經(jīng)網(wǎng)絡(luò)檢測(cè)模型,并將其應(yīng)用于“皮卡丘”的圖像集的識(shí)別中.實(shí)驗(yàn)證明如圖3所示,即標(biāo)簽為pikachu的置信度率達(dá)到99%,因?yàn)楸緦?shí)驗(yàn)只有一個(gè)識(shí)別的物體“皮卡丘”,經(jīng)過(guò)十組的測(cè)試結(jié)果,九組可以達(dá)到識(shí)別結(jié)果98%以上,表示檢測(cè)結(jié)果準(zhǔn)確率較高.具體識(shí)別率如表1所示.
圖3 識(shí)別“皮卡丘”
表1 識(shí)別“皮卡丘”測(cè)試結(jié)果
通化師范學(xué)院學(xué)報(bào)2019年6期