劉洋
[摘 ? ?要] 航拍圖像目標形態(tài)受顏色變化、長寬比變化以及復(fù)雜背景的影響大,待檢測的目標相對于圖片背景來說屬于相對的小目標,特征提取不易。傳統(tǒng)的圖像處理方法檢測效果差,通過采用深度學習的方法可以實現(xiàn)對航拍圖像的準確檢測。文章采用RetinaNet (Resnet + FPN + FCN)的方法成功解決這一難題題,實現(xiàn)了對于航拍圖片的精準識別。RetinaNet中采用Focal loss損失函數(shù),通過在原有的CE loss上乘以使易檢測目標對模型訓練貢獻削弱的指數(shù)式,從而成功地解決了在目標檢測時正負樣本區(qū)域極不平衡而目標檢測loss易被大批量負樣本所左右的問題。
[關(guān)鍵詞] 航拍圖像;目標檢測;深度學習;特征提取;損失函數(shù)
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2019. 19. 064
[中圖分類號] TP311 ? ?[文獻標識碼] ?A ? ? ?[文章編號] ?1673 - 0194(2019)19- 0149- 03
1 ? ? ?國內(nèi)外航拍目標檢測現(xiàn)狀
目前,航拍目標檢測所采用的方法與技術(shù)多繼承自經(jīng)典目標檢測算法,object detection的算法主要可以分為兩大類:two-stage detector和one-stage detector。前者是指類似Faster RCNN、RFCN這樣需要region proposal的檢測算法,這類算法可以達到很高的準確率,但是速度較慢。雖然可以通過減少proposal的數(shù)量或降低輸入圖像的分辨率等方式達到提速,但是速度并沒有質(zhì)的提升。后者是指類似YOLO、SSD這樣不需要region proposal,直接回歸的檢測算法,這類算法速度很快,但是它當前的檢測準確度已經(jīng)落后于兩階段檢測器了。
對于two-stage的檢測器而言,通常分為兩個步驟,第一個步驟即產(chǎn)生合適的候選區(qū)域,而這些候選區(qū)域經(jīng)過篩選,一般控制一個比例(比如正負樣本1∶3),另外還通過hard negative mining(OHEM),控制難分樣本占據(jù)的比例,以解決樣本類別不均衡的問題。但是對于one-stage的檢測器來說,盡管可以采用同樣的策略(OHEM)控制正負樣本,但是還是有缺陷。
2016年何愷明博士提出圖像識別中的深度殘差學習(Deep Residual Learning for Image Recognition),就是舉世聞名的152層深度殘差網(wǎng)絡(luò) ResNet-152。2017他又提出Focal Loss for Dense Object Detection,利用焦點損失提升物體檢測效果,這使得one-stage 目標檢測器,首次達到了更復(fù)雜的 two-stage 檢測器所能實現(xiàn)的最高 COCO 平均精度。他們設(shè)計了一個one-stage目標檢測器RetinaNet,在COCO test-dev 上取得了 39.1 AP 的成績,超過目前公開的單一模型在 one-stage 和 two-stage 檢測器上取得的最好成績。
為解決two-stage detector檢測算法精度高但是速度慢,one-stage detector檢測速度高但是精度相對較差的問題,本文介紹使用改進的RetinaNet來實現(xiàn)快速精確的航拍目標檢測。
2 ? ? ?RetinaNet與航拍圖像檢測
2.1 ? RetinaNet概述
Retinanet的模型結(jié)構(gòu)如圖1所示。該模型采用Resnet50/Resnet101作為基礎(chǔ)網(wǎng)絡(luò)提取特征。之后用FPN(特征空間金字塔)進行多尺寸地預(yù)測。共輸出三種尺寸的輸出,每種輸出為兩路進行分類和box框的回歸,輸出時采用9個anchor(yolo v3 每個輸出采用3個)。
首先多尺度上目標識別是計算機視覺領(lǐng)域的一個基本挑戰(zhàn),解決這一挑戰(zhàn)的基本方法就是“基于圖像金字塔的特征金字塔(簡稱為特征圖像金字塔)”,這些金字塔具有尺度不變性,可以通過掃描位置和金字塔層來檢測大范圍上的尺度。將圖像金字塔各層提取特征的主要好處就在于產(chǎn)生了一個多尺度特征表示,這個表示的所有層語義很強,包括高精度的層。盡管這樣,然而對每層進行特征提取有很明顯的限制,Inference time將急劇上升,在圖像金字塔上進行end-to-end的訓練內(nèi)存上也不可行,最多只能在測試的時候?qū)⒕陀靡幌隆ast and Faster R-CNN也盡量避免采用這種方法。
Retinanet的主網(wǎng)絡(luò)部分采用的是FPN結(jié)構(gòu),兩個不同任務(wù)的子網(wǎng)絡(luò),一個是分類網(wǎng)絡(luò),一個是位置回歸網(wǎng)絡(luò),如圖1所示。
Retinanet的主網(wǎng)絡(luò)部分結(jié)構(gòu)并不與FPN中提到的結(jié)構(gòu)完全一致,Retinanet使用特征金字塔層P3,P4,P5,P6,P7,其中,P3,P4,P5與FPN中的產(chǎn)生方式一樣,通過上采樣和橫向連接從C3,C4,C5中產(chǎn)生,P6是在C5的基礎(chǔ)上通過3×3的卷積核,步長為2的卷積得到的,P7在P6的基礎(chǔ)上加了個RELU再通過3×3的卷積核,步長為2的卷積得到的。在P3-P7層上選用的anchors擁有的像素區(qū)域大小從32×32到512×512,每層之間的長度是兩倍的關(guān)系。每個金字塔層有三種長寬比例[1∶2 ,1∶1 ,2∶1],有三種尺寸大小[2^0,2^(1/3), 2^(2/3))??偣脖闶敲繉?個anchors。大小從32像素到813像素。其中32=(32x2^0)813=(512x2^(2/3))
分類子網(wǎng)絡(luò)和回歸子網(wǎng)絡(luò)的參數(shù)是分開的,但結(jié)構(gòu)卻相似。都是用小型FCN網(wǎng)絡(luò),將金字塔層作為輸入,接著連接4個3x3的卷積層,fliter為金字塔層的通道數(shù)(論文中是256),每個卷積層后都有RELU激活函數(shù),這之后連接的是fliter為KA(K是目標種類數(shù),A是每層的anchors數(shù),論文中是9)的3×3的卷積層,激活函數(shù)是sigmoid。另外Retinanet的主要亮點是損失函數(shù)(loss = focal loss(分類) + smooth L1 loss),下面重點講一下Focal Loss。
2.2 ?Focal Loss分析
直接應(yīng)用Retinanet引出一個問題:在目標檢測中,one stage效果較差于two stage的主要原因是one stage在訓練時樣本比例不均衡(比如yolo v3等,在訓練時要生成3×13×13 + 3×26×26 + 3×52×52 = 10 647個box,但這些box中真正有物體的也就幾個,其他都是背景,這樣導(dǎo)致背景太多物體太少嚴重失衡;而two stage的faster-cnn通過RPN可以過濾掉大量的box,保留2 000個,雖然也不均衡,但相對于one stage好的多)。目前常見的解決方法是:在訓練的時候用不同的采樣頻率;給予不同的權(quán)重。而提出的focal loss不需要這些步驟。
新的損失函數(shù) Focal Loss主要思路是降低分類效果好(網(wǎng)絡(luò)預(yù)測的置信度confidence高)的樣本的loss值,讓模型聚焦在難學習的樣本中。這個損失函數(shù)在標準的交叉熵標準上添加了一個因子 (1- pt) γ 。設(shè)定 γ > 0 可以減小分類清晰的樣本的相對損失(pt >.5),使模型更加集中于困難的錯誤分類的樣本。
圖2顯示了交叉熵loss和focal loss的關(guān)系,橫軸表示網(wǎng)絡(luò)預(yù)測該類物體的置信度。當r=0時,cross entropy = focal loss,不同的r代表了不同的懲罰力度,作者使用r=2效果最好。在confidence高時,用cross entropy 時loss的值相對于focal loss大,如果使用cross entropy loss, 它使得模型傾向于這些樣本的訓練(由于預(yù)測的置信度已經(jīng)很高了,無須再多關(guān)注這個樣本),使用focal減小了這種傾向,使模型不過于關(guān)注效果好的樣本。在confidenct很低時,很有可能預(yù)測錯誤,此時focal loss和交叉熵loss十分接近,二者但作用接近。
試驗證明,在存在大量簡單背景樣本(background example)的情況下Focal Loss 函數(shù)可以訓練出準確度很高的密集對象檢測器。
2.3 ? 殘差神經(jīng)網(wǎng)絡(luò)ResNet
ResNet最初的靈感出自這個問題:在不斷增加神經(jīng)網(wǎng)絡(luò)的深度時,會出現(xiàn)一個Degradation(退化)的問題,即準確率會先上升然后達到飽和,再持續(xù)增加深度則會導(dǎo)致準確率下降。這并不是過擬合的問題,因為不光在測試集上誤差增大,訓練集本身誤差也會增大。
假設(shè)有一個比較淺的網(wǎng)絡(luò)達到了飽和的準確率,那么后面再加上幾個y=x的全等映射層,起碼誤差不會增加,即更深的網(wǎng)絡(luò)不應(yīng)該帶來訓練集上誤差上升。而這里提到的使用全等映射直接將前一層輸出傳到后面的思想,就是ResNet的基礎(chǔ)。假定某段神經(jīng)網(wǎng)絡(luò)的輸入是x,期望輸出是H(x),如果直接把輸入x傳到輸出作為初始結(jié)果,那么此時需要學習的目標就是F(x)=H(x)-x。如圖3所示,這就是一個ResNet的殘差學習單元。
可以看到x是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(xiàn)(X)是經(jīng)過第一層線性變化并激活后的輸出,該圖表示在殘差網(wǎng)絡(luò)中,第二層進行線性變化之后激活之前,F(xiàn)(x)加入了這一層輸入值x,然后再進行激活后輸出。在第二層輸出值激活前加入x,這條路徑稱作shortcut連接。
假設(shè)該層是冗余的,在引入ResNet之前,想讓該層學習到的參數(shù)能夠滿足h(x)=x,即輸入是x,經(jīng)過該冗余層后,輸出仍然為x。但是可以看見,要想學習h(x)=x恒等映射時的這層參數(shù)時比較困難的。ResNet想到避免去學習該層恒等映射的參數(shù),使用了如上圖的結(jié)構(gòu),讓h(x)=F(x)+x;這里的F(x)稱作殘差項。要想讓該冗余層能夠恒等映射,只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網(wǎng)絡(luò)中的參數(shù)初始化偏向于0,這樣在相比于更新該網(wǎng)絡(luò)層的參數(shù)來學習h(x)=x,該冗余層學習F(x)=0的更新參數(shù)能夠更快收斂。
普通直連的卷積神經(jīng)網(wǎng)絡(luò)和ResNet的最大區(qū)別在于,ResNet有很多旁路的支線將輸入直接連到后面的層,使得后面的層直接學習殘差,這種結(jié)構(gòu)也被稱為shortcut或skip connections。
傳統(tǒng)的卷積層或全連接層在信息傳遞時,或多或少會存在信息丟失、損耗等問題。ResNet在某種程度上解決了這個問題,通過直接將輸入信息繞道傳到輸出,保護信息的完整性,整個網(wǎng)絡(luò)則只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度。
3 ? ? ?基于RetinaNet的航拍影像目標檢測
處理好模型需要的數(shù)據(jù)集后,可以將數(shù)據(jù)集分為訓練集和測試集,使用訓練集去進行訓練,測試集驗證模型的錯誤率。
訓練開始前需要設(shè)置模型訓練參數(shù),包括image-min-side,image-max-side模型圖片的輸入尺寸,batch-size每步訓練使用圖片數(shù)量,epochs訓練總共進行輪次,steps每個epoch訓練步數(shù),設(shè)置完成后,可以開始進行訓練,在訓練完成后將得到多個模型權(quán)重文件。
通過前面的操作得到了相對來說較好的模型權(quán)重文件,但是這個模型文件是不能直接用于檢測的,需要進行轉(zhuǎn)化才可以使用。選取一個模型文件進行轉(zhuǎn)化,得到推斷預(yù)測模型,使用這個模型進行目標檢測。
圖4為實際使用推斷模型對航拍圖片進行目標檢測的結(jié)果展示。
4 ? ? ?結(jié) ? ?語
航拍目標檢測作為目標檢測的子方向,是計算機視覺領(lǐng)域的重要研究內(nèi)容。航拍目標檢測在軍事目標智能識別,遙感影像解析以及民用航空等領(lǐng)域具備廣闊的應(yīng)用前景。但是,航拍圖像中的目標受顏色,長寬比變化以及復(fù)雜背景以及旋轉(zhuǎn)的影響很大。本文提出使用Resnet殘差網(wǎng)絡(luò)和損失函數(shù)Focal Loss來對航拍目標進行檢測。在保證檢測速度的前提下,提高了目標檢測精度,目標檢測準確度達到了90%以上。同時通過對數(shù)據(jù)集的增強處理,提高了模型預(yù)測的準確度。
在深度學習網(wǎng)絡(luò)方面,本文只采用了101層Resnet和50層的Resnet殘差網(wǎng)絡(luò)進行了測試學習,沒有進行更多種類的嘗試。本文只對航拍中比較清晰的高分辨率圖像進行了一定的嘗試,而對低分辨率的圖像有待驗證。在數(shù)據(jù)增強中,后面會考慮使用條件型生成對抗網(wǎng)絡(luò),使用CycleGAN進行更多的數(shù)據(jù)增強擴張,這部分工作會繼續(xù)進行下去。
主要參考文獻
[1]Tsung-Yi Lin, Priya Goyal, Ross Girshick, et al.Focal Loss for Dense Object Detection[C]//IEEE Transactions on Pattern Analysis and Machine Intelligence,2017.
[2]Kaiming He,Xiangyu Zhang,Shaoqing Ren,et al.Deep Residual Learning for Image Recognition[C]//IEEE Conference on Computer Vision and Pattern Recognition,2016.
[3]蔡強,劉亞東,曹建,等.圖像目標類別檢測綜述[J] .計算機科學與探索,2015(3):257-265.
[4]G Montufar,R Pascanu,K Cho,et al. On the Number of Linear Regions of Deep Neural Networks[C]//Proceedings of the 27th International Conference on Neural Information Proceeding Sytems-2,2014.
[5]高常鑫.基于深度學習的高分辨率遙感影像目標檢測[D] .武漢:華中科技大學,2014.
[6]豐曉霞.基于深度學習的圖像識別算法研究[D] .太原:太原理工大學,2015:29-32.