浙江省杭州學(xué)軍中學(xué) 趙熠杰
隨著網(wǎng)絡(luò)的普及以及信息社會(huì)的發(fā)展,我們?cè)谌粘I钪薪佑|到的圖像數(shù)據(jù)也越來(lái)越多,尤其是最近幾年社交網(wǎng)絡(luò)的普及,像是facebook,微信,微博等社交網(wǎng)絡(luò),人們可以隨時(shí)隨地上傳自己的圖片或者視頻,一方面對(duì)于圖像的存儲(chǔ)以及管理帶來(lái)了很大的困難,另一方面來(lái)說(shuō)如何去挖掘圖像中存儲(chǔ)的信息也變得越來(lái)越重要。這些圖像信息不僅可以讓我們獲得一些人們的想法,還可以快速的提高效率。
場(chǎng)景分類是一個(gè)比較基礎(chǔ)性的工作,它的應(yīng)用非常的廣泛,不僅可以應(yīng)用的安防領(lǐng)域,讓我們的生活變得更加安全,還可以應(yīng)用到自動(dòng)駕駛領(lǐng)域,提高自動(dòng)駕駛的安全性。同時(shí)場(chǎng)景分類在各大社交網(wǎng)絡(luò)中的應(yīng)用也非常多,豐富了我們的生活。但是如何讓計(jì)算機(jī)像人類一樣對(duì)一個(gè)場(chǎng)景進(jìn)行精確的分類也是一項(xiàng)非常具有挑戰(zhàn)性的工作。因此,場(chǎng)景分類是一個(gè)具有研究前景的領(lǐng)域。
計(jì)算機(jī)視覺(jué)一直以來(lái)都是人工智能的研究熱點(diǎn),所以也涌現(xiàn)了非常多的優(yōu)秀的算法。主要分為兩類,一類是傳統(tǒng)的根據(jù)特征進(jìn)行建模然后使用機(jī)器學(xué)習(xí)的算法進(jìn)行分類,常見(jiàn)的特征提取算法包括統(tǒng)計(jì)直方圖,色彩直方圖,LBP以及SIFT特征等。使用的機(jī)器學(xué)習(xí)算法如隨機(jī)森林,建立多顆決策樹(shù),并根據(jù)多棵決策樹(shù)的結(jié)果進(jìn)行多數(shù)投票,另外一種是支持向量機(jī),這也是在深度學(xué)習(xí)大規(guī)模應(yīng)用之前效果最好的一種算法,是一種根據(jù)支持向量確定決策邊界的方法。
另外一類是基于深度學(xué)習(xí)的算法,Krizhevsky在2012年提出了基于深度學(xué)習(xí)的圖像分類算法,使用了一個(gè)8層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),奪得了ImageNet2012年圖像分類的冠軍。隨后Christian Szegedy提出了GoogleNet,使用了22層的神經(jīng)網(wǎng)絡(luò)獲得了ImageNet2014年圖像分類的冠軍。隨后Karen Simonyan等人提出了一個(gè)19層的VGG網(wǎng)絡(luò),在圖像分類領(lǐng)域獲得了更好的結(jié)果。
場(chǎng)景分類是根據(jù)訓(xùn)練數(shù)據(jù)集中的數(shù)據(jù)的特征,給每一類確定一種準(zhǔn)確地描述方式,由這些特征生成類描述或模型,并運(yùn)用這種描述方式對(duì)新的數(shù)據(jù)集進(jìn)行分類。場(chǎng)景分類是指針對(duì)原始的圖片數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行過(guò)濾、提取特征等操作,然后根據(jù)場(chǎng)景圖像特征進(jìn)行分類。
本文中所使用的數(shù)據(jù)集為aichallenger中場(chǎng)景分類的數(shù)據(jù)集,比賽從400萬(wàn)張圖片中選出了8萬(wàn)張比較好的圖片,分別屬于80個(gè)不同的場(chǎng)景,比如足球場(chǎng),滑雪場(chǎng),臥室等。從中選出70%作為訓(xùn)練集,10%作為交叉驗(yàn)證集,20%作為測(cè)試集,其中每張圖片的大小是不相同的。
首先是圖像的預(yù)處理,本步驟主要將圖片做一些簡(jiǎn)單的處理。由于每張圖片的大小都是各不相同的,深度學(xué)習(xí)算法通常需要固定大小的輸入,因此我們需要將每張圖片的大小處理成固定的大小,如果直接對(duì)圖像做縮放的話可能會(huì)造成比較大的失真,實(shí)驗(yàn)驗(yàn)證也是如此的。因此,在圖像的處理中本文首先將圖像進(jìn)行小幅度的縮放,然后從縮放后的圖片中裁剪出224*224大小的圖片。后續(xù)將圖片存儲(chǔ)為numpy支持的數(shù)組即可。
第二步是數(shù)據(jù)增強(qiáng)。在后續(xù)的實(shí)驗(yàn)中本文發(fā)現(xiàn),現(xiàn)有的數(shù)據(jù)數(shù)量還是比較的少,因此有必要進(jìn)行進(jìn)一步的數(shù)據(jù)增強(qiáng),在增加數(shù)據(jù)增強(qiáng)后的網(wǎng)絡(luò)中,top3的準(zhǔn)確率可以提高大約10%。本文所使用的數(shù)據(jù)增強(qiáng)方法主要包括如下:將輸入數(shù)據(jù)歸一化到-1,到1之間;將輸入的圖片進(jìn)行一定幅度的旋轉(zhuǎn),本文中旋轉(zhuǎn)角度為15度;每一張圖片的寬度上進(jìn)行隨機(jī)的水平平移,本文中平移整張圖片的1%;每一張圖片在高度上進(jìn)行隨機(jī)的水平平移,本文中同樣偏移整張圖片的1%;對(duì)圖片以一定的概率進(jìn)行隨機(jī)的水平翻轉(zhuǎn),在豎直方向上不做任何的翻轉(zhuǎn)。
第三步模型構(gòu)建。此步驟主要是選擇或者設(shè)計(jì)深度學(xué)習(xí)使用的模型,同時(shí)由于本文使用的數(shù)據(jù)集中圖片的數(shù)量比較少,只有8萬(wàn)張圖片,比較深的網(wǎng)絡(luò)可能會(huì)過(guò)擬合。因此,本文使用了遷移學(xué)習(xí)的方法,使用了部分在ImageNet中訓(xùn)練好的參數(shù)初始化網(wǎng)絡(luò),部分模型沒(méi)有使用做對(duì)比實(shí)驗(yàn)。詳細(xì)的內(nèi)容將在第三部分進(jìn)行介紹。
第四步是使用第三步訓(xùn)練好的網(wǎng)絡(luò)以及參數(shù)進(jìn)行預(yù)測(cè)。在這一部分同樣需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,預(yù)處理的過(guò)程同訓(xùn)練過(guò)程的預(yù)處理相同,但是這一步不進(jìn)行數(shù)據(jù)的增強(qiáng)。
在對(duì)場(chǎng)景分類模型的構(gòu)建的時(shí)候,本文選擇使用ResNet以及InceptionV3的網(wǎng)絡(luò)結(jié)構(gòu)對(duì)場(chǎng)景進(jìn)行分類,并對(duì)部分地方進(jìn)行改進(jìn)實(shí)驗(yàn)。同時(shí),為了增強(qiáng)模型的泛化能力,避免在小數(shù)據(jù)上造成過(guò)擬合的現(xiàn)象,因此本文使用了遷移學(xué)習(xí)的方法,使用了在ImageNet中訓(xùn)練好的ResNet以及InceptionV3的參數(shù)對(duì)網(wǎng)絡(luò)進(jìn)行初始化。另外在進(jìn)行實(shí)驗(yàn)的時(shí)候發(fā)現(xiàn),只對(duì)網(wǎng)絡(luò)進(jìn)行微調(diào)的結(jié)果在top1上的準(zhǔn)確率并不是十分的理想。因此,本文使用預(yù)訓(xùn)練好的參數(shù)對(duì)網(wǎng)絡(luò)進(jìn)行初始化,不加載最后一層全連接層的參數(shù),并且在網(wǎng)絡(luò)的訓(xùn)練過(guò)程中對(duì)整個(gè)網(wǎng)絡(luò)中的所有參數(shù)進(jìn)行更新,而不是只更新最后一層的參數(shù)。下面將詳細(xì)介紹ResNet以及InceptionV3算法。
我們?cè)诰W(wǎng)絡(luò)的訓(xùn)練過(guò)程中會(huì)發(fā)現(xiàn)這樣一些現(xiàn)象,就是隨著網(wǎng)絡(luò)深度的增加,模型的準(zhǔn)確率會(huì)下降,通常這種下降是由于模型的過(guò)擬合造成的,但是在這里卻不是由于模型的過(guò)擬合造成的。為了避免這種情況,ResNet網(wǎng)絡(luò)提出了一種Residual block,如圖1所示,加入我們要學(xué)習(xí)的特征是H(x),那么在第一個(gè)卷積層中我們可以學(xué)到的知識(shí)是F(x),那么我們?nèi)绻頕(x)=H(x)-x的話,我們就可以添加一條捷徑,使得網(wǎng)絡(luò)在經(jīng)過(guò)兩個(gè)卷積層過(guò)后可以獲得更好的結(jié)果,同時(shí)不丟失一些比較好的特征。
圖1
整個(gè)ResNet的網(wǎng)絡(luò)結(jié)構(gòu)就是由上面的殘差塊組成的,本文使用的是ResNet50,也就是說(shuō)總共有16個(gè)殘差塊,其中每個(gè)殘差塊由3個(gè)卷積層,每個(gè)卷積層后面會(huì)有一個(gè)BN層,BN層后面是激活函數(shù),本文中激活函數(shù)使用Relu。首先網(wǎng)絡(luò)接受一個(gè)224*224*3大小的場(chǎng)景圖片,然后是64個(gè)7*7大小的卷積核,步長(zhǎng)為2,后面是一個(gè)最大池化層。后面是16個(gè)參差塊,每個(gè)參差塊有3個(gè)卷積層構(gòu)成,包含1*1,3*3,1*1的卷積核大小。第一種參差塊卷積核的個(gè)數(shù)分別為64,64,256,總共有3個(gè)這樣的參差塊。第二個(gè)殘差塊的卷積核個(gè)數(shù)分別為128,128,512,共有4個(gè)。第三個(gè)殘差塊的卷積核個(gè)數(shù)分別為256,256,1024,共有6個(gè)。第四個(gè)殘差塊的卷積核個(gè)數(shù)分別問(wèn)512,512,2018,共有3個(gè)。最后是一個(gè)80的全連接層。
本文采用在ImageNet中訓(xùn)練好的ResNet50對(duì)網(wǎng)絡(luò)進(jìn)行參數(shù)初始化,然后對(duì)整個(gè)模型中的參數(shù)進(jìn)行更新,實(shí)驗(yàn)發(fā)現(xiàn)這樣的效果比只更新最后全連接層的參數(shù)要好很多。
Inception的結(jié)構(gòu)最初是在GoogleNet這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中提出來(lái)的。從14年開(kāi)始各種各樣的網(wǎng)絡(luò)通過(guò)增加網(wǎng)絡(luò)的深度以及寬度在圖像分類這個(gè)任務(wù)上提高了比較多的準(zhǔn)確率。但是這樣的操作在提升了網(wǎng)絡(luò)效果的同時(shí)增加了計(jì)算的復(fù)雜度,同時(shí)參數(shù)的數(shù)量也大大的增加,比如vgg需要196億FLOP,但是使用了Inception結(jié)構(gòu)的GoogleNet就會(huì)少很多。
卷積核的大小如果比較大的情況下,對(duì)應(yīng)的計(jì)算就會(huì)比較多,同樣參數(shù)的數(shù)量也會(huì)比較多,比如n個(gè)5*5的卷積核需要25×n個(gè)網(wǎng)絡(luò)參數(shù),但是如果使用3*3的卷積核的話,需要的參數(shù)就比原來(lái)少了16個(gè)。因此在使用相同大小的特征圖的情況下,卷積核的大小應(yīng)該是越小越好。那么5*5的卷積核是否可以用更小,但是個(gè)數(shù)會(huì)稍微多一點(diǎn)的卷積核來(lái)替代。假如我們放大一下5*5的卷積的計(jì)算圖的話,我們可以看到每一次的輸出都更像是一個(gè)更小的全連接網(wǎng)絡(luò),在其輸入上滑動(dòng)5*5大小的位置,那么我們可以利用平移不變性使用兩個(gè)更小的卷積運(yùn)算來(lái)代替這樣一個(gè)比較大的卷積運(yùn)算。首先是一個(gè)使用3*3大小卷積核的卷積層,然后在這一層的輸出后跟一個(gè)使用3*3大小卷積核的卷積層,這樣經(jīng)過(guò)這兩個(gè)卷積層的輸出與原來(lái)使用5*5大小的卷積核的輸出是相同的。一個(gè)Inception塊的結(jié)構(gòu)如圖2所示:
圖2 一個(gè)Inception塊的結(jié)構(gòu)圖
圖3 nception塊的結(jié)構(gòu)圖
通過(guò)如上的分析,我們可以發(fā)現(xiàn)一個(gè)n*n的卷積核同樣可以使用一個(gè)1×n的卷積核,然后再接一個(gè)n×1的卷積核來(lái)替代。但是這樣做會(huì)有一個(gè)比較不好的效果就是在一些比較淺的層中使用這樣的結(jié)構(gòu)往往不會(huì)取得很好的效果,但是在一些中等的網(wǎng)絡(luò)尺寸上會(huì)取得比較不錯(cuò)的效果,因此在InceptionV3中通常會(huì)使用1*7和7*1的卷積核去替代7*7的卷積核,而不會(huì)去替代一下本身就比較小的卷積核。本部分的Inception塊的結(jié)構(gòu)如圖3所示。
另外使用了擴(kuò)展輸出的Inception塊可以提取到更多的高維的特征,這種的Inception塊如圖4所示:
圖4 Inception塊圖
整個(gè)InceptionV3的結(jié)構(gòu)為:首先網(wǎng)絡(luò)接受224*224*3大小的輸入,然后是3個(gè)卷積層,卷積核的大小是3*3,后面會(huì)有一個(gè)池化層,后面會(huì)跟3個(gè)3*3大小的卷積層。然后是Inception的結(jié)構(gòu),首先3個(gè)圖2的Inception塊,然后5個(gè)圖3的Inception塊,后面是2個(gè)圖4的Inception塊。再然后是一個(gè)8*8的卷積核,后面是softmax分類。
本文對(duì)原始的InceptionV3進(jìn)行了部分調(diào)整,將網(wǎng)絡(luò)的輸入調(diào)整到了224*224*3,同時(shí)最后一個(gè)全連接層的大小為80。使用在ImageNet訓(xùn)練好的InceptionV3的參數(shù)進(jìn)行初始化網(wǎng)絡(luò),然后全部更新網(wǎng)絡(luò)的參數(shù)。
準(zhǔn)確率是一種對(duì)深度學(xué)習(xí)模型進(jìn)行評(píng)估的最簡(jiǎn)單的方法。故名思議,準(zhǔn)確率是指被正確分類的場(chǎng)景圖片占所有圖片的比例,比如總共100張圖片中有99張場(chǎng)景圖片都被正確的分類了,那么我們的準(zhǔn)確率就是99%。
aichallenger競(jìng)賽中采用top3的準(zhǔn)確率作為模型優(yōu)劣的評(píng)價(jià)方法。我們的模型在最后的全連接層會(huì)輸出80個(gè)概率,我們會(huì)將這80個(gè)概率從大到小進(jìn)行排序,從中選擇較大的3個(gè)概率所代表的類別,如果這3個(gè)類別中有一個(gè)類別和真實(shí)的類別一致,那么我們就認(rèn)為該樣本被分類正確了。
如今是信息化的年代,場(chǎng)景分類任務(wù)對(duì)于我們的生活來(lái)說(shuō)也越來(lái)越重要,隨著計(jì)算計(jì)算資源的提升,尤其是GPU的大規(guī)模更新,利用深度學(xué)習(xí)解決這個(gè)任務(wù)也變得越來(lái)越簡(jiǎn)單。同時(shí)場(chǎng)景分類可以應(yīng)用到安防以及社交網(wǎng)絡(luò)中,有著非常廣泛的研究前景。
本文主要介紹了場(chǎng)景分類的背景,意義,研究現(xiàn)狀,以及場(chǎng)景分類的一般步驟,重點(diǎn)介紹了場(chǎng)景分類的方法,利用ResNet,Inception等方法解決了場(chǎng)景分類的部分問(wèn)題。
但是,場(chǎng)景分類還存在著很多的問(wèn)題,包括1)場(chǎng)景分類方法的準(zhǔn)確率還沒(méi)有達(dá)到人類的高度2)在對(duì)圖像做裁剪的時(shí)候丟失了很多的信息。