史宇
(合肥工業(yè)大學,安徽合肥 230009)
目標檢測的目的是在圖像中尋找特定的目標(物體),并確定它們的位置和大小。首先,我們來看看如何理解一張圖片?根據任務需要,可以分為三個階段:一是分類,即圖像以特定的信息類別結構化,并且使用預定義的類別(string)或存在標識符來描述圖像。二是檢測,分類功能負責整體并描述整個圖像的內容,抓取可深入了解圖像的前景和背景。三是分割,涉及語義分割和事件分割,以解決“每個像素屬于什么目標或場景”的問題[1]。
深度學習是一種人工智能技術或想法。麻省理工科技評論(深度學習#1)認為它是2013 年十大重要技術之一。深度學習在計算機視野中成長速度快,有很多趨勢。它從圖像排序開始,逐漸擴展到圖像搜索、圖像分割等。
本文展示了如何利用深度學習進行目標檢測。可以通過目標檢測解決三個主要問題:目標可以顯示在圖像的任何部分;有不同類型的目標;有不同形狀的目標。如果使用長方塊來表示目標,則矩形比率會有所不同。由于目標條件不同,使用滑動窗口來捕捉圖像質量和解決視覺問題的成本是巨大的。
目標檢測可以使用在很多地方,主要應用在以下領域:
人臉檢測是解決“人臉在哪里”的問題,從圖像中識別實際人臉區(qū)域,利于對面部進行診斷和識別。在圖片上先進行一次目標檢測可以去除圖片上非人臉部分的影響,提高人臉識別的準確率,也可以在圖片上找到人臉進行美顏等功能。
行人檢測包括智能駕駛輔助、智能監(jiān)控、行人檢測和智能機器人。在交通統計、自主駕駛等方面也發(fā)揮著重要作用。動作提取、變形處理、閉合和排序是四個行人檢測中的重要部分。
識別交通信號燈、道路標志等交通標志對于自動駕駛也非常重要。有必要根據交通燈的狀況來評估車輛左轉或右轉、掉頭的運行情況。告訴駕駛員前面多遠有行人或者車輛,車輛有哪些種類,多久有紅綠燈。使人們的駕駛更安全。
高分辨率數據驅動的圖像目標檢測是目前遙感圖像處理的一個重要研究領域。傳統的目標跟蹤識別方法難以適應海量數據。它們所基于的實際表示是手工制作的、耗時的,取決于數據本身的專業(yè)知識和屬性,并且難以從大量數據中學習一個高效的分類系統可以完全分析數據相關性。復雜動作的強大表達(更抽象和有意義的含義)和深度學習的學習能力可以為在圖像中繪制目標提供有效的框架。相關研究包括車輛檢驗、船舶檢驗、作物檢驗和建筑檢驗。除了傳統的CNN 之外,診斷模型有基于超像素劃分和弱監(jiān)督學習。我們可以基于谷歌影像進行訓練,生成想要檢測的物體在地圖上的坐標點,然后就可以在地圖上可視化顯示出物體的位置[2]。
在高分圖像中分析深度學習目標的模型由兩個主要部分組成。首先是通過深度學習引入目標特征。從圖像像素入手,創(chuàng)建深度圖像學習網絡,通過為學習來實現圖像呈現。深度網絡的每一層都有特殊的意義,可以更有效地表達其目標。另一個是使用上下文信息定制深度網絡。圖像分析完成后,利用目標標記、目標框架和站點框架信息來調整深度網絡的權重,與環(huán)境的交互提高了深度網絡的可見性,提高了目標檢測的性能。
有兩種深度學習的目標檢測算法:一是兩階段(2-stage)檢測模型,例如有R-CNN 算法和FastR-CNN 算法等。二是單階段(1-stage)檢測模型,例如YOLO、SSD 等算法[3]。目標檢測模型成功的關鍵是分析的準確性和速度。具體來說,集中分析不僅要評估分類的準確性,還要評估對象放置的準確性。以下是使用每種經典算法的過程和算法。
3.1.1 R-CNN
R-CNN 使用供應鏈方法生成大約2000 個ROI。把區(qū)域變成固定長寬的圖片,并相應地添加到神經系統中(原始圖像依據ROI 進行裁剪,修改,然后發(fā)送到神經網絡進行訓練)[4]。網絡后面是幾個完全互連的層,得到一個目標分類并設置一個約束框。使用候選站點、CNN、相關點來確定目標。利用始終如一的高質量ROI,R-CNN 比彈出式方法更加迅速正確。
(1)算法:R-CNN 首先搜索區(qū)域,然后對候選區(qū)域進行排名。R-CNN 使用selective search 辦法生成候選區(qū)域。首先通過簡單的區(qū)域算法將圖像分成幾個較小的區(qū)域,然后通過層次分組的方法將它們按照某種約定進行組合,最后剩下的區(qū)域為候選區(qū)域[3]。它是一個區(qū)域并且可以包含對象。
(2)流程:一是根據圖像建議一系列可以包含物體的區(qū)域(即裁剪局部圖像)。使用選擇性搜索算法。二是在這些建議的區(qū)域中以有史以來最好的性能運行,可以獲得每個區(qū)域中對象的類別。
(3)貢獻:CNN 可用于按區(qū)域放置和分割對象。如果監(jiān)督下的訓練樣本數量很少,則帶有附加數據的預訓練模型在分配點后可以得到很好的結果。
(4)缺點:必須訓練三個不同的模型,性能問題。
3.1.2 Fast R-CNN
R-CNN 使用多個可用區(qū)域來提高正確率,但實際上大部分區(qū)域是重復的,使得R-CNN 的使用和實現非常緩慢。比如有2000個候選頁面,并且需要將每個頁面分別發(fā)送到CNN,則需要為每個ROI多次解壓2000個特征[5](R-CNN 上需要多次合并重復)。
特征圖可以直接用來識別物體而不是需要利用原始圖像嗎?Fast R-CNN 不是從一開始就重復檢查每個圖像塊,而是使用屬性選擇器(CNN)來提取整個圖像的屬性。因此可以使用應用程序區(qū)域辦法直接在提取器上創(chuàng)造它。比如,Fast RCNN 使用從VGG16的轉換圖來生成ROI。然后將這些范圍組合成匹配的動作地圖,將它們切割成動作框并使用它們來尋找目標。ROI 組允許將動作框的大小調整為固定的,并將它們移動到完美統一的層中以進行評估和放置。Fast R-CNN 不會多次檢查屬性,可以縮短處理時間[6]。
下面是Fast R-CNN 的過程圖:
在下面的偽代碼中,因為計算機密集型挖掘過程已從For Loop 站點中刪除。Fast R-CNN 的計算速度比R-CNN 快10倍,最終速度比R-CNN快150倍。
Fast R-CNN 的關鍵在于可以訓練整個網絡,包括從端到端的多任務處理中選擇特征、評級和盒對盒反饋[7]。這種多任務損失是估值和投資損失的組合,很大程度上提高了模型的正確性。
(1)算法:Fast R-CNN(Fast Region-based Convolutional Network)旨在縮短候選區(qū)域計算向量所使用的時間。R-CNN 要求將每個候選站點單獨發(fā)送到CNN 模型中來計算向量,這需要很長時間。RoI pooling 原理是根據供應區(qū)域找到CNN 屬性圖對應的屬性區(qū)域,將其分成若干子集(根據創(chuàng)建的屬性圖的大小),并使用每個子集的max pooling得到活動圖的大小,這個過程是可控的。
(2)步驟:首先拿到feature map,同時找到ROI并分配到feature map上。然后對每個RoI 執(zhí)行RoI Pooling得到一個具有相同長度屬性的向量,正負樣本同時處理進行分揀和返回,并統一損失。
3.1.3 Faster R-CNN
Fast R-CNN 憑借于替代的候選實踐。但是它在CPU 上計算非常慢。在實驗時,R-CNN 做出預測的時間是2.3s,而創(chuàng)建2000 ROI 的時間是2s[8]。
Faster R-CNN 使用與Fast R-CNN 一樣的項目,但是它用內里深度網絡替換了候選段的工作。新的站點網絡(RPN)可以更有效地創(chuàng)建ROI,并以10 毫秒的速率為每張圖像執(zhí)行。
Faster R-CNN 的流程圖與Fast R-CNN 相同。
候選域(RPN)從第一個聊天網絡的端口管理器獲取映射。使用模型卡3x3校正核心使用旋轉系統構建獨立的候選控制系統??梢允褂闷渌呒壪到y(例如VGG 和ResNet)完成功能的完整轉換,但是速度會變慢。ZF 系統將256 個值傳輸并傳輸到兩個與預測目標框和兩個對象編號密切相關的獨立矩陣,以測量目標是否在目標框內。
RPN 為每個模型地圖位置預測k 次,因此,RPN 為每個節(jié)點創(chuàng)建4×k 和2×k 節(jié)點。下圖顯示了8x8 模型圖。為此,有一個3x3 的錐體核心,并且得出8×8×3 個ROI(k=3)。這里有三個想法。第一個選擇包括所有形狀和尺寸,因為只需要一個正確的選擇。所以,Faster R-CNN 不會制作無限框。恰恰相反的是,它假設一些偏差(x、y 等)與原始圖像有關,即左側的“附著點”。附著點的選擇是一樣的,因為使用了這些偏移值。
為了預測任何地方,我們需要在各個地方的核心有一個附著點k。其中各個假設都和一個特定的附著點有聯系,但不一樣的位置區(qū)分同一類型的附著點。
因為這些附著點是經過細細選擇的,所以是不同的,并以相同的圖像大小和形狀覆蓋玻璃。這使得可以使用更準確的估計指導第一個實驗,并將每個預測定位到更準確的方法。這種設計有利于基礎訓練。
Faster R-CNN 有很多附著點。分配了9 個不同大小的附著框。一個地方使用9 個附著點,則會創(chuàng)建2×9個對象編號和4×9個位置s[9]。
(1)算法:在fast R-CNN的情況下,需要另一種專門的搜索方法來創(chuàng)建耗時的候選區(qū)域。為了解決這個問題,模型Faster R-CNN 使用RPN 來創(chuàng)建瞬時候選站點。Fast R-CNN=RPN+fast R-CNN。
對于RPN,首先使用CNN 標準獲取大圖并導出屬性圖。然后在此圖上使用N×N滑塊并為滑塊中的每個位置分配小功能。此功能分為兩個完全相關的層。每個供應區(qū)域都包含一個對象或背景概率值,回歸級別提取四個坐標值表示每個供應區(qū)域的狀態(tài)。滑塊窗口中的每個位置都將這兩個完美互連的級別共享。
(2)流程:在滑塊窗口中創(chuàng)建不同大小的錨框,設置IoU 閾值,并根據Ground Truth 調整這些錨框的優(yōu)劣將雙重分類和回歸損失集成為RPN網絡訓練,并使用多任務處理將兩種損害結合起來。
(3)算法貢獻:網絡RPN替代了專門搜索算法,讓神經系統可以完成端到端的過程。
3.2.1 YOLO
YOLO 利用DarkNet 功能來分析開發(fā)活動,并沒有使用多個功能圖進行獨立分析。相反,它會部分展平行動卡并將其與其他一張低分辨率卡組合。比如YOLO把一個28×28×512的層轉換成14×14×2048,與14×14×1024 的功能圖接連起來。YOLO 使用新的14×14×3072 層中的復雜核心進行假設。
YOLO(v2)在實踐時有許多變化,把mAP 值從宣布時的63.4提升至78.6。YOLO9000 能夠計算9000 種元件類型s[10]。
下面是YOLO文檔中mAP與FPS不同傳感器的比較。YOLOv3 運用更復雜的旋轉網絡來利用這些特性。DarkNet-53 大概根據3×3 與1×1 可折疊內核和相應的ResNet 跳轉循環(huán)組成。相較于ResNet-152,DarkNet 具有更小的BFLOP,但能夠用兩倍的速率實現同樣的排序精度。
YOLOv3 還增加了一個特點椎體,使得更快速地識別小物體。
(1)貢獻:通過將檢測活動表示為一個集成的端到端回歸問題,圖像可以處理一次,同時重新排列和排序。
(2)問題:標線粗糙,小物體檢測受限。但是,此后YOLOv2和YOLOv3將網絡改進取得了更好的檢測結果。
3.2.2 SSD
SSD 是根據VGG19 系統作為移除特征的關鍵傳感器(類似于在Faster R-CNN 中的CNN)。在系統背面添加標準線圈表(藍色)并使用線圈芯(綠色)進行假設s[5]。但是,卷積類別減小了空間的大小和精度。所以上面的例子只能識別更大的物體。根據這些問題本文使用多級模型卡進行獨立研究。
以下是特征圖圖示。
SSD 使用重復網絡深層來識別對象。以幾乎真實的大小重復上面的圖像,會看到圖片的精度明顯減小,并且在低精度下難以看到的小物體不可見。此問題仍然存在則需要提高輸入圖片的精度s[4]。
(1)算法:SSD 網絡分為兩部分。一個是默認的圖像評級網絡,另一個是多尺度發(fā)現的映射級別,以便可以實現不同的檢測。
(2)與YOLO 相比,SSD 具有以下優(yōu)勢:多尺度feature map:依據VGG卷積不一樣的段,將feature map發(fā)送給回歸器。這是提高識別小物體的正確性的。
目標檢測對人類來說并不困難。識別圖像中的不同顏色單位可以更輕松地查找和排序目標,但對計算機而言,很難直接從圖像中提取和定位抽象概念,而且在某些情況下還會受到更模糊的對象和背景的組合的阻礙。Faster R-CNN、R-CNN和SSD是常用的檢測算法,而且利用深度學習進行目標檢測的流程變得越發(fā)簡單、速率也變快了。當然,對于目標檢測還有很長的路要走,期待未來利用深度學習的目標檢測的發(fā)展。