李秋珍 熊饒饒 王汝鵬 祁 迪
(1.武漢數字工程研究所 武漢 430074)(2.華中科技大學計算機科學與技術學院 武漢 430074)
近年來,無人機技術的快速發展及無人機使用門檻不斷降低,無人機在軍事、民用等領域得到了廣泛運用。同時也帶來了一些新問題,如無人機非法入侵私人區域、無人機碰撞行人等引發的安全問題,因此無人機管控勢在必行。由于無人機具有體積小、低速以及電磁信號強度低等特點,所以傳統的安全措施如聲傳感器或雷達是無法檢測到小型無人機的,迫切需要建立一套對指定區域無人機目標進行實時、準確地識別和監控系統。無人機識別系統的重要組成部分是圖像識別,其功能是將攝像頭捕捉到的圖像或視頻信息進行預處理,從中識別出無人機,從而實現對無人機的檢測、識別、監控和預警。圖像物體的檢測與分類一直是計算機視覺領域研究的重要課題,受益于近幾年深度學習的快速發展,物體檢測與分類識別有了理論支持和準確性的保障。在物體檢測方面有YOLO算法以及后來的SSD算法;由于YOLO簡單粗暴地將圖像進行網格劃分,然后對每個網格進行處理,這樣導致定位不精確等問題,特別是小物體及相互靠近的物體,效果不夠理想。而SSD算法結合了YOLO和anchor進行檢測,在檢測的速度和準確性方面優于YOLO。物體分類識別最開始使用的是KNN(K-Nearest Neighbor,K最近鄰)算法,其優點是實現方便、數據訓練快,缺點是無法適用于太大數量的數據,程序運行時算法加載和初始化過程太耗時。后來又使用深度網絡AlexNet,其精確度比KNN要好很多。
基于現有的方法和理論,提出了兩種基于SSD算法的實時無人機識別方法,設計并實現了一套實時無人機識別系統,它能夠直接從攝像頭讀入視頻流,對視頻流中的圖像實時識別,將識別結果加入到原始圖像中形成新的視頻流,并向瀏覽器推送新的視頻流和識別結果。
目前,無人機檢測主要有以下兩類方法。
一是采用傳統方法。首先通過滑動窗口來產生不同大小和位置的候選區域圖像(圖像金字塔),然后對候選區域圖像手工提取特征,如SIFT、HOG等特征,最后采用SVM、Adaboost等分類器進行分類。
二是采用深度神經網絡[1~2]的方法進行對象檢測。Girshick R在文獻[3]中提出了R-CNN(Regions with CNN features)方法,該方法首先對輸入圖像提取約兩千個感興趣區域(ROI),然后對每一個ROI計算CNN特征,然后對每個ROI使用SVM分類器進行分類,如圖1所示,該方法缺點在于需要大量計算,計算一張圖片需要數十秒,顯然無法滿足實際要求。文獻[4]中提出了SPP-Net(Spatial Pyramid Pooling-Network,SPP網絡),如圖2所示,該方法在R-CNN的卷積層和全連接層之間增加了Spatial Pyramid Pooling(空間金字塔池化)層,使得SPP-Net比R-CNN有著更快的檢測速度,但缺點是訓練時間長、存儲開銷大、訓練網絡過程中無法更新SPP以下的層。針對這兩種方法的局限性,Girshick R對R-CNN進行了改善,提出了Fast-RCNN[5],如圖3所示,該方法采用了ROI Pooling代替SPP,訓練過程在一個階段完成,速度和準確性都有了較大的提升。針對候選區域的產生方法,文獻[6]中提出的FasterR-CNN方法,該方法使用RPN(Region Proposal Network,候選區域網絡)來產生候選區域,如圖4所示,FasterR-CNN在計算速度上有一定的提高,但對實時計算引用仍然不夠快。Redmon J在文獻[7]中提出了YOLO算法,相比于Faster R-CNN方法,YOLO的網絡結構非常簡單,圖像經過一次網絡,就能得到圖中物體對應的位置和該位置所屬類的置信概率,如圖5所示;首先,將原圖劃分為S*S的網格,目標中心點所在地各自負責該目標的相關檢測,每個網格預測B個邊框及其置信度,以及C種類別的概率,YOLO中,S,B,C取決于數據集中的物體類別個數。文獻[8]提出了SSD算法用于對象檢測,該算法在檢測的速度和準確性方面優于YOLO。

圖1 R-CNN的基本算法流程

圖2 SPP-Net的基本算法流程

圖3 Fast R-CNN的基本算法流程

圖4 RPN網絡結構

圖5 YOLO的基本算法流程
無人機的分類方法通常分為兩大類:一類是利用傳統方法,對檢測到的無人機提取手工特征,例如無人機的機翼形狀、顏色等特征;另一類是采用深度神經網絡的方法,提取無人機的特征,淺層的網絡如LeNet[9]、AlexNet[10],深層的網絡例如ResNet[11]、InceptionNet[12],然后將提取到的特征送入到一般的淺層分類器里面,進行訓練和預測。
1)系統處理流程
在實際應用中,為了能夠實時、準確地識別劃定區域內的無人機,通常采用網絡攝像頭對劃定區域進行監控,將網絡攝像頭輸出的視頻流送入到無人機識別系統中。圖6所示為系統處理流程圖。首先采用視頻處理工具JavaCV對視頻流進行抓幀;然后對抓取到的圖像進行預處理,生成300*300大小的圖像;其次將預處理后的圖像送入到SSD中進行檢測;將檢測到的無人機圖像摳取出來,送入到無人機分類器中進行分類,最終識別出無人機種類;最后將無人機的位置、種類和置信度標識在原圖像中,壓縮成新的視頻流推送到前端瀏覽器上實時展示;在瀏覽器中安裝VLC插件,可以實時播放無人機識別信息。

圖6 無人機識別系統處理流程圖
2)流式計算框架Storm
系統基于Storm分布式實時流式計算框架。抓幀線程運行在Spout中作為數據源,不斷地向下面的bolt傳遞幀數據。SSD bolt接收到Spout抓取的幀圖像(經過預處理)之后,識別圖像中的無人機,然后將無人機的坐標以及原始圖像發送給Resnet bolt。Resnet負責將SSD檢測到的無人機特征提取出來,然后發送給KNN進行分類。KNN會在程序啟動的時候加載數據集,并且進行訓練得到模型,在接收到Resnet提取的特征之后,KNN根據提前訓練好的模型對其進行分類,最終得到該幀出現的無人機種類。
Caffe框架是由美國加州伯克利大學開發的一個深度學習框架,由C++語言編寫,運行速度快,Caffe內部提供了一套基本的編程框架,可以實現GPU并行架構下的深度卷積神經網絡、深度學習等算法,并且支持GPU和CPU的無縫切換。網絡定義采用文本文件定義,方便編寫。因此,本識別系統就是采用Caffe框架完成底層的深度學習算法實現。
深度神經網絡能夠有良好的學習效果,決定性因素之一就是訓練集大小。如果訓練集的規模太小,達不到網絡模型參數要求,那么神經網絡將難以提取足夠的特征進行學習,在實際應用時也達不到很好的效果。本系統所需要的無人機圖像數據主要來自互聯網,很多情況下無法獲取大量圖像數據,所以采用對圖像進行預處理,就可以提升圖像數據量。圖像預處理主要包括改變圖像寬高比、旋轉、剪切變換、放大縮小等。
上述介紹了目前常用的對象檢測方法和理論,為了滿足識別系統的實時性和準確性要求,本文采用SSD算法對無人機進行檢測。如圖7所示,與YOLO不同的是,SSD采用了特征金字塔結構進行檢測,使用了多尺度featuremaps(特征平面)同時進行Softmax分類和位置回歸,因此在檢測的速度和準確性方面優于YOLO。相比R-CNN系列,拋棄了regionproposal的過程,計算速度更快。

圖7 SSD和YOLO網絡結構比較
SSD算法采用了VGG16(一種深度卷積神經網絡)前面的5層網絡,然后利用atrous算法將fc6和fc7層轉化成兩個卷積層,另外再增加了3個卷積層和一個均值池化層,不同層次的feature map分別用于defaultbox(缺省窗口)的偏移和不同類別的預測,最終通過非極大值抑制方法得到最終的檢測結果。
在訓練策略上,SSD首先找到每個groundtruthbox(人工標注窗口)對應的default box中IOU大于0.5的default box作為正樣本,剩余的作為負樣本,因此一個groundtruth照片可能對應多個正樣本。下面公式是訓練目標函數,其中N表示正樣本數目。

Defaultbox在不同層的feature map下生成的,所以對不同尺度的物體檢測效果都比較好。用于預測的feature map上的每個點都對應有6個不同的default box,顯然會導致正負樣本不平衡,在訓練過程中,采用了Hard Negative Mining的策略(根據confidence loss對所有的box進行排序,使正負例的比例保持在1:3來平衡正負樣本的比率。
SSD官方在Github上面公開了代碼,且提供了基于PASCAL VOC2007、VOC2012和COCO數據集的Caffe深度學習框架下訓練好的模型文件,這里可以直接利用模型文件做網絡前向運算,得到無人機對象的位置信息。
上述已介紹了常用無人機分類方法,為了滿足識別系統的實時性和準確性要求,本文采用深度神經網絡方法進行無人機分類。即有兩種方法:一種方法是通過深度神經網絡提取無人機的深度特征,然后結合線性分類器;另一種方法是采用已經訓練好的模型進行Fine-tuning,直接進行端到端的預測。
1)基于ResNet(殘差網絡)和KNN的無人機分類方法
傳統的CNN在網絡層數增加后會出現“梯度消失”問題,網絡參數無法更新,性能趨于飽和甚至下降,這會使得深度網絡的訓練變得十分困難。
ResNet提出了殘差學習的概念,優化目標從原來的擬合輸出變成了輸出和輸入的差。如圖8所示,殘差網絡的結構塊中,一共有兩層,第一層對輸入x做一次前向運算,然后通過一個shortcut和第二個Relu層一起獲得輸出。實驗表明,殘差網絡能夠訓練更加深的網絡,有利于提取更高層次的特征,因此采用ResNet提取無人機的深度特征是非常合適的。

圖8 ResNet網絡結構塊
提取深度網絡特征后,采用KNN算法對提取到的特征進行分類。KNN核心思想是:如果一個樣本在特征空間中的K個最相鄰的樣本中大多數屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本特性。該方法在確定分類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

圖9 KNN示意圖
KNN是一種惰性分類算法,隨著訓練數據的輸入逐步訓練,如圖9所示,如果要判斷圓形是哪一類,根據K值的取值不同得到的結果也不一樣,當K=3,圓形被賦予三角形的類,當K=5,圓形被賦予四方形類,KNN訓練過程就是要確定最佳K值。在KNN的訓練過程中,通過不斷嘗試K值,統計分類準確率,選擇最佳最終確定最佳的K值。
在KNN中,通過計算對象的距離來衡量各個對象的相似性指標,一般使用馬氏距離或曼哈頓距離,如下列公式所示。
歐式距離:

曼哈頓距離:

2)基于AlexNet的無人機分類方法
AlexNet是在2012年ImageNet競賽冠軍獲得者Hinton和他的學生設計的。AlexNet由5個卷積層加上3個全連接層構成,參數個數為60M,神經元個數650K,分類數目為1000類,圖10所示為AlexNet結構圖。由于無人機樣本數量有限,且缺少大量的標注數據,因此這里選擇采用AlexNet在ImageNet數據集訓練好的模型進行Fine-tuning,保留前面的5個卷積層,將后面的3個全連接層的output參數分別修改為1024,512,5。
抓幀和推流使用的都是視頻處理工具JavaCV,該工具將FFmpeg和OpenCV用Java進行了封裝,幾乎FFmpeg所有功能都能使用,主要通過JNI的形式調用FFmpeg的服務。

圖10 AlexNet結構圖
FFmpegFrameGrabber工具用來抓幀,其原理是FFmpeg在后臺啟動一個線程,不斷地從視頻源中抓取圖像數據,然后推到緩沖隊列中。該工具支持多種視頻流格式,包括RTSP、RTMP以及主流格式的視頻文件等。FFmpegFrameRecorder工具用來推流,該工具支持推送RTMP和RTP的視頻直播流,也可以將視頻幀錄制成離線視頻,這就需要在調用前配置bitrate、fps及編碼格式等即可。
數據集獲取:利用Python爬蟲從互聯網上爬取無人機照片,然后進行數據清洗和手動分類,標注無人機的種類。無人機可分為五類:固定翼、四旋翼、六旋翼、八旋翼和直升機。數據集分布如表1所示,訓練集共有1366張圖片,測試集共有339張圖片。

表1 無人機數據集分布
采用了兩種方法對無人機進行分類,一種方法是將無人機送入到ResNet網絡中提取1000維無人機的深度特征,然后利用KNN訓練合理的K值,得到最終的分類結果;另一種方法對AlextNet訓練好的模型做Fine-tuning(微調),將AlexNet的最后三層參數的輸入卷積核的個數做些修改,修改后求解網絡,修改后的AlexNet的網絡結構如表2所示。

表2 修改后的AlexNet網絡結構
1)基于ResNet和KNN的無人機分類結果
利用ResNet在VOC和COCO訓練集上的模型提取深度特征,訓練KNN分類器,得到最終分類結果,如下表所示。當K取5時準確率較高,可以達到79%。

表3 ResNet+KNN分類結果
2)基于AlexNet的無人機分類結果
經過Fine-tuning的AlexNet網絡模型訓練耗時大概花費6h,網絡收斂較快,迭代到第79代時達到了最高準確率83.75%,準確率曲線如圖1所示,略優于官方提供的AlexNet數據模型(top 1-5的準確率達到80.2%)的準確率。

圖11 AlexNetFine-tuning過程迭代準確率曲線
上述兩種方法都能實現實時無人機識別,且準確率方面第二種方法優于第一種方法。無人機識別效果如圖12所示,本無人機識別系統能夠實時對視頻文件或攝像頭拍攝的視頻流進行無人機識別,并且實時對無人機類別和相似度做出標記。

圖12 無人機識別效果圖
針對圖像中無人機目標的快速檢測和識別問題,本文提出了兩種基于SSD算法的實時無人機識別方法,設計并實現了一套實時無人機識別系統,即能夠實時檢測無人機的位置、識別無人機的種類;最高識別準確率達到83.75%,略優于官方提供的AlexNet數據模型的準確率80.2%,識別速度也基本滿足實時性要求;該系統已應用到實際項目中。由于無人機的有效標記數據非常少,不同視角觀測的無人機差異非常大,導致無人機在真實應用場景下的識別率比較低,難以有效區分無人機種類。所以下一步工作是收集更多不同視角的無人機數據以及改進識別模型,進一步提高無人機識別準確率。