YOLO9000(v2)論文翻譯
(本文僅供學術交流,未經允許請勿轉載)
(本文翻譯自:YOLO9000: Better, Faster, Stronger)
摘要
我們推出的YOLO9000是一款先進的實時目標檢測系統,可檢測9000多種目標類別。首先,我們提出對YOLO檢測方法的各種改進,這些改進有獨創的,也有的是來源於以前的研究。改進後的模型YOLOv2在PASCAL VOC和COCO等標準檢測任務中處於技術領先地位。通過使用一種新穎的多尺度訓練方法,同樣的YOLOv2模型可以以不同的尺寸運行,在速度和準確性之間提供了一個簡單的折衷。在67 FPS時,YOLOv2在VOC 2007上獲得了76.8 mAP。在40 FPS時,YOLOv2獲得了78.6 mAP,超越了採用ResNet和SSD的Faster R-CNN等先進的方法,同時運行速度仍然更快。最後我們提出一種聯合訓練目標檢測和分類的方法。使用這種方法,我們在COCO檢測數據集和ImageNet分類數據集上同時訓練YOLO9000。我們的聯合訓練使YOLO9000能夠預測未標註檢測數據的目標類別的檢測結果。我們在ImageNet檢測任務上驗證了我們的方法。 YOLO9000在ImageNet檢測驗證集上獲得19.7 mAP,儘管200個類中只有44個具有檢測數據。在COCO上沒有的156種類上,YOLO9000獲得16.0 mAP。但YOLO可以檢測超過200個種類;它預測超過9000個不同的目標類別的檢測結果,而且它仍然是實時運行的。
1. 引言
通用的目標檢測應該快速,準確,並且能夠識別各種各樣的目標。自從引入神經網路,檢測框架變得越來越快速和準確。但是,大多數檢測方法僅限於檢測一小部分目標。
與分類和標記等其他任務的數據集相比,目前目標檢測數據集是有限的。最常見的檢測數據集包含成千上萬到數十萬張具有成百上千個標籤的圖像[3][10][2]。而分類數據集有數以百萬計的圖像,數十或數百萬個類別[20][2]。
我們希望檢測的類別能夠擴展到目標分類的級別。但是,標註檢測圖像要比標註分類或貼標籤要昂貴得多(標籤通常是用戶免費提供。因此,我們不太可能在近期內看到與分類數據集相同規模的檢測數據集。
我們提出了一種新方法——通過利用我們已有的大量分類數據來擴大當前檢測系統的範圍。 我們的方法使用目標分類的分層視圖,使得我們可以將不同的數據集組合在一起。
我們還提出了一種聯合訓練演算法,它允許我們在檢測和分類數據上訓練目標檢測器。 我們的方法利用標記檢測圖像來學習精確定位目標,同時使用分類圖像來增加辭彙量和魯棒性。
我們使用這種方法訓練YOLO9000——一種可以檢測超過9000種不同的目標類別的實時目標檢測器。 首先,我們改進YOLO基礎檢測系統,生成最先進的實時檢測器YOLOv2。 然後,採用我們的數據集組合方法和聯合訓練演算法,使用來自ImageNet的9000多個類以及COCO的檢測數據來訓練模型。
我們所有代碼和預訓練模型都可在線獲得:http://pjreddie.com/yolo9000/。
2.更好
與最先進的檢測系統相比,YOLO存在各種缺點。 YOLO與Fast R-CNN的誤差比較分析表明,YOLO產生了大量的定位錯誤。此外,與生成候選區域方法相比,YOLO召回率相對較低。 因此,我們主要關注改善召回率和定位,同時保持分類準確性。
計算機視覺通常趨向於更大更深的網路[6] [18] [17]。 更好的性能通常取決於訓練更大的網路或將多個模型組合在一起。 但是,對於YOLOv2,我們需要一個更精確的檢測器,而且保持很快的速度。 我們不是要擴大網路,而是簡化網路,然後讓表徵更易於學習。 我們將以往工作中的各種創意與我們自己新穎的方法結合起來,以提高YOLO的表現。 表2列出了結果的總結。
批量標準化。批量標準化(batch normalization)可以顯著改善收斂性,而且不再需要其他形式的正則化[7]。 通過在YOLO中的所有卷積層上添加批量標準化,可以在mAP中獲得了2%以上的改進。 批量標準化也有助於規範模型。 通過批量標準化,可以從模型中刪除dropout而不會發生過擬合。
高解析度分類器。所有的最先進的檢測方法都使用在ImageNet上預先訓練好的分類器[16]。 從AlexNet開始,大多數分類器用小於256×256的圖像作為輸入[8]。 最初的YOLO以224×224的圖像訓練分類器網路,並將解析度提高到448以進行檢測訓練。 這意味著網路必須切換到目標檢測的學習,同時能調整到新的輸入解析度。
對於YOLOv2,我們首先以448×448的全解析度在ImageNet上進行10個迭代周期的微調。這給予網路一些時間,以調整其濾波器來更好地處理更高解析度的輸入。然後,我們再對該檢測網路進行微調。 這個高解析度的分類網路使mAP增加了近4%。
與錨框相卷積。 YOLO直接使用卷積特徵提取器頂部的全連接層來預測邊界框的坐標。 Fast R-CNN不是直接預測坐標,而是使用手工選取的先驗來預測邊界框[15]。 Faster R-CNN中的候選區域生成網路(RPN)僅使用卷積層來預測錨框的偏移和置信度。由於預測層是卷積的,所以RPN可以在特徵圖中的每個位置預測這些偏移。使用預測偏移代替坐標,可以簡化問題並使網路更易於學習。
我們從YOLO中移除全連接層,並使用錨框來預測邊界框。 首先我們消除一個池化層,以使網路卷積層的輸出具有更高的解析度。 我們還縮小網路,使其在解析度為416X416的輸入圖像上運行,而不是448×448。我們這樣做是因為我們想要在特徵圖中有奇數個位置,只有一個中心單元。目標,尤其是大的目標,往往佔據圖像的中心,所以最好在正中心擁有單獨一個位置來預測這些目標,而不是在中心附近的四個位置。 YOLO的卷積層將圖像下採樣32倍,所以通過使用416的輸入圖像,我們得到13×13的輸出特徵圖。
引入錨框後,我們將類預測機制與空間位置分開處理,單獨預測每個錨框的類及其目標。 遵循原來的YOLO的做法,目標預測依然預測了真實標籤框(ground truth box)和候選框的IOU,而類別預測也是預測了當有目標存在時,該類別的條件概率。
使用錨框,精確度會小幅下降。因為原始的YOLO僅為每個圖片預測98個框,但使用錨框後,我們的模型預測的框數超過一千個。 如果沒有錨框,我們的中等模型將獲得69.5 的mAP,召回率為81%。 使用錨框,我們的模型獲得了69.2 的mAP,召回率為88%。儘管mAP減少,但召回率的增加意味著我們的模型有更大的改進空間。
維度集群。當把錨框與YOLO一起使用時,我們會遇到兩個問題。 首先是框的尺寸是手工挑選的。雖然網路可以通過學習適當地調整方框,但是如果我們從一開始就為網路選擇更好的先驗,就可以讓網路更容易學習到更好的檢測結果。
我們不用手工選擇先驗,而是在訓練集的邊界框上運行k-means,自動找到良好的先驗。 如果我們使用具有歐幾里得距離的標準k-means,那麼較大的框比較小的框產生更多的誤差。 然而,我們真正想要的是獨立於框的大小的,能獲得良好的IOU分數的先驗。 因此對於距離度量我們使用:
d(box, centroid) = 1 - IOU(box, centroid)
我們用不同的k值運行k-means,並繪製最接近質心的平均IOU(見圖2)。為了在模型複雜度和高召回率之間的良好折衷,我們選擇k = 5。集群質心與手工選取的錨框顯著不同,它有更少的短且寬的框,而且有更多既長又窄的框。
表1中,我們將聚類策略的先驗中心數和手工選取的錨框數在最接近的平均IOU上進行比較。僅5個先驗中心的平均IOU為61.0,其性能類似於9個錨框的60.9。 使用9個質心會得到更高的平均IOU。這表明使用k-means生成邊界框可以更好地表示模型並使其更容易學習。
直接位置預測。當在YOLO中使用錨框時,我們會遇到第二個問題:模型不穩定,尤其是在早期迭代的過程中。 大多數不穩定來自於預測框的(x,y)位置。 在候選區域網路中,網路預測的 ,和中心坐標(x,y)計算如下:
例如,預測 = 1會使該框向右移動錨框的寬度,而預測 = -1會將其向左移動相同的量。
這個公式是不受約束的,所以任何錨框都可以在圖像中的任何一點結束,而不管這個框是在哪個位置預測的。隨機初始化模型需要很長時間才能穩定以預測合理的偏移。
我們沒有預測偏移,而是遵循YOLO的方法,預測相對於網格單元位置的位置坐標。這使得真實值的界限在0到1之間。我們使用邏輯激活來限制網路的預測落在這個範圍內。
網路為特徵圖的輸出的每個單元預測5個邊界框。網路預測每個邊界框的5個坐標,, , , 和 。如果單元格從圖像的左上角偏移了 ,並且之前的邊界框具有寬度和高度, ,則預測對應於:
由於我們限制位置預測,因此參數化更容易學習,從而使網路更加穩定。 使用維度集群並直接預測邊界框中心位置,可以使YOLO比錨框的版本提高近5%。
細粒度功能。修改後的YOLO在13×13特徵圖上預測檢測結果。 雖然這對於大型物體是足夠的,但使用更細粒度特徵對定位較小物體有好處。Faster R-CNN和SSD都在網路中的各種特徵圖上運行網路,以獲得多個解析度。 我們採取不同的方法,只需添加一個直通層,以26×26的解析度從較早的層中提取特徵。
直通層將高解析度特徵與低解析度特徵連接起來,將相鄰特徵疊加到不同的通道中,而不是空間位置上,類似於ResNet中的恆等映射。將26×26×512的特徵圖變為13×13×2048的特徵圖,然後就可以與原始的特徵連接。我們的檢測器運行在這張擴展的特徵圖的頂部,以便它可以訪問細粒度的功能。這使性能提高了1%。
多尺度訓練。原來的YOLO使用448×448的輸入解析度。通過添加錨框,我們將解析度更改為416×416。但是,由於我們的模型僅使用卷積層和池化層,因此可以實時調整大小。我們希望YOLOv2能夠在不同尺寸的圖像上運行,因此我們可以將多尺度訓練應到模型中。
我們不需要修改輸入圖像大小,而是每隔幾次迭代就改變一次網路。每10個批次我們的網路會隨機選擇一個新的圖像尺寸大小。由於我們的模型縮減了32倍,所以我們從32的倍數中抽取:{320,352,…,608}。因此,最小的選項是320×320,最大的是608×608。我們調整網路的尺寸並繼續訓練。
這個策略迫使網路學習如何在各種輸入維度上做好預測。這意味著相同的網路可以預測不同解析度下的檢測結果。網路在較小的尺寸下運行速度更快,因此YOLOv2在速度和準確性之間提供了一個簡單的折衷。
在低解析度下,YOLOv2作為一種便宜但相當準確的檢測器工作。 在288×288情況下,它的運行速度超過90 FPS,而mAp幾乎與Fast R-CNN一樣好。這使其成為小型GPU,高幀率視頻或多視頻流的理想選擇。
在高解析度下,YOLOv2是一款先進的檢測器,在VOC2007上獲得了78.6的mAP,同時仍以高於實時速度運行。請參閱表3,了解YOLOv2與其他框架在VOC 2007上的比較
進一步的實驗。 我們在VOC 2012上訓練YOLOv2進行檢測。表4顯示了YOLOv2與其他最先進的檢測系統的性能比較。 YOLOv2運行速度遠高於對手,且精度達到73.4 mAP。 我們還在COCO上訓練,並與表5中的其他方法進行比較。使用VOC度量(IOU = 0.5),YOLOv2獲得44.0 mAP,與SSD和Faster R-CNN相當。
表3:PA S C A L VOC 2007的檢測框架。YOLOv2比以前的檢測方法更快,更準確。它也可以以不同的解析度運行,以便在速度和準確性之間輕鬆折衷。每個YOLOv2項實際上都是具有相同權重的相同訓練模型,只是以不同的大小進行評估。所有的時間的測試都運行在Geforce GTX Titan X(原始的,而不是Pascal模型)
3.更快
我們希望檢測結果準確,但我們也希望檢測速度更快。 大多數用於檢測的應用程序(如機器人或自動駕駛汽車)都依賴於低延遲預測。 為了最大限度地提高性能,我們從頭開始設計YOLOv2。
大多數檢測框架依賴於VGG-16作為基本特徵提取器[17]。 VGG-16是一個功能強大,準確的分類網路,但它有不必要的複雜度。 VGG-16的卷積層在一個224×224解析度單個圖像上運行一次需要306.90億浮點運算。
YOLO框架使用基於Googlenet架構的自定義網路[19]。這個網路比VGG-16更快,一次前向傳播只要85.2億次運行。然而,它的準確性略低於VGG-16。在Imagenet上,用224×224的單張裁剪圖像,YOLO的自定義模型的精度為88.0%而VGG-16則為90.0%。
Darknet-19。我們提出了一個新的分類模型作為YOLOv2的基礎。我們的模型建立在網路設計的先前工作以及該領域的常識上。與VGG模型類似,我們大多使用3×3濾波器,並且在池化層步驟後使用兩倍的通道數[17]。按照Network in Network(NIN)的方法,我們使用全局平均池化來做預測,並使用1×1濾波器來壓縮3×3卷積的特徵表示[9]。我們使用批量歸一化來穩定訓練,加速收斂,並規範模型[7]。
最終的模型叫做Darknet-19,它有19個卷積層和5個Maxpool層。 Darknet-19隻需要55.8億次操作來處理圖像,但在ImageNet上實現了72.9%的top-1精度和91.2%的top-5精度。
分類訓練。我們使用DarkNet神經網路框架,使用隨機梯度下降,初始學習率為0.1,多項式速率衰減為4,權重衰減為0.0005,動量為0.9,在標準ImageNet 1000類別分類數據集上對網路進行160個迭代周期的訓練[13]。在訓練過程中,我們使用標準數據增強技巧,包括隨機截取,旋轉和改變色相,飽和度和曝光。
如上所述,在我們對224×224圖像進行初始訓練之後,我們用更大的解析度(448)對網路進行了微調。微調時,我們使用上述參數進行訓練,但僅用10個周期,並且開始時的學習率為10-3。在這個更高的解析度下,我們的網路實現了76.5%的top-1精度和93.3%的top-5精度。
檢測訓練。我們這樣修改網路:去除最後一個卷積層,然後添加三個具有1024個濾波器的3X3的卷積層,然後在最後添加1×1卷積層,該層的濾波器數量是檢測需要的輸出數量。 對於VOC,我們預測5個邊界框,每個邊界框有5個坐標和20個類別,所以有125個濾波器。我們還添加了從最後的3×3×512層到倒數第二層卷積層的直通層,以便我們的模型可以使用細粒度特徵。
我們訓練網路160個迭代周期,初始學習率為10-3,在60和90周期除以10。我們使用0.0005的權值衰減和0.9的動量。我們對YOLO和SSD進行類似的數據增強,隨機裁剪,色彩修改等。我們對COCO和VOC使用相同的訓練策略。
4.更強
我們提出了一個聯合訓練分類和檢測數據的機制。 我們的方法使用了用於檢測的圖像來學習檢測特定信息,如邊界框坐標預測和目標以及如何對常見目標進行分類。通過使用僅具有類標籤的圖像來擴展其可檢測類別的數量。
在訓練期間,我們混合來自檢測和分類數據集的圖像。 當我們的網路看到標記為檢測的圖像時,可以根據完整的YOLOv2損失函數進行反向傳播。 當它看到分類圖像時,只會反向傳播分類部分的損失。
這種方法帶來了一些難題。檢測數據集只有常用的目標和通用的標籤,如「狗」或「船」。分類數據集具有更廣泛和更深入的標籤範圍。 ImageNet擁有多種犬種,包括Norfolk terrier,Yorkshire terrier和Bedlington terrier。如果我們想在兩個數據集上進行訓練,則需要採用一致的方式來合併這些標籤。
大多數分類方法使用涵蓋所有可能類別的softmax層來計算最終概率分布。使用softmax,意味著類是相互排斥的。這給組合數據集帶來了問題,例如,你不能用這個模型來組合ImageNet和COCO,因為類Norfolk terrier和dog不是互斥的。
相反,我們可以使用多標籤模型來組合不會互相排斥的數據集。這個方法忽略了我們所知道的關於數據的所有結構,例如所有的COCO類都是相互獨立的。
分層分類。 ImageNet標籤是從WordNet中提取的,WordNet是一個構建概念及其相互關係的語言資料庫[12]。 Norfolk terrier和Yorkshire terrier都是terrier的下義詞,terrier是一種hunting dog,hunting dog是dog,dog是canine等。大多數分類的方法假設標籤是一個扁平結構,但是對於組合數據集,結構正是我們所需要的。
WordNet的結構是有向圖,而不是樹,因為語言很複雜。 例如,「狗」既是一種「犬」又是一種「家養動物」,它們都是WordNet中的同義詞。 我們不使用完整的圖結構,而是通過從ImageNet中的概念構建分層樹來簡化問題。
WordNet的結構是有向圖,而不是樹,因為語言很複雜。例如,一隻狗既是一種犬科動物,又是一種家養動物,它們都是WordNet中的同種動物。我們沒有使用完整的圖結構,而是通過從ImageNet中的概念構建分層樹來簡化問題。
為了構建這棵樹,我們檢查ImageNet中的視覺名詞,並查看它們通過WordNet圖到根節點的路徑,在這種情況下是「物理目標」。 許多同義詞只有在圖上一條路徑,所以首先我們將所有這些路徑添加到我們的樹中。 然後,我們反覆檢查我們留下的概念,並儘可能少地添加生成樹的路徑。 所以如果一個概念有兩條通向根的路徑,一條路徑會為我們的樹增加三條邊,另一條路只增加一條邊,我們選擇較短的路徑。
最終的結果是WordTree,一個視覺概念的分層模型。為了使用WordTree進行分類,我們預測每個節點的條件概率,以得到同義詞集合中每個同義詞下義詞的概率。例如,在terrier節點我們預測:
如果我們想要計算一個特定節點的絕對概率,我們只需沿著通過樹到達根節點的路徑,再乘以條件概率。所以如果我們想知道一張圖片是否是Norfolk terrier,我們計算:
為了實現分類,我們假定圖像包含一個目標: .
為了驗證這種方法,我們在使用1000類ImageNet構建的WordTree上訓練Darknet-19模型。 為了構建WordTree1k,我們添加了所有中間節點,將標籤空間從1000擴展到1369。在訓練過程中,我我們將真實標籤向樹上面傳播,以便如果圖像被標記為Norfolk terrier,則它也被標記為dog和mamal等。為了計算條件概率,我們的模型預測了1369個值的向量,並且我們計算了相同概念的下義詞在所有同義詞集上的softmax,見圖5。
使用與以前相同的訓練參數,我們的分層Darknet-19達到了71.9%的top-1精度和90.4%的top-5精度。 儘管增加了369個附加概念,並且我們的網路預測了樹狀結構,但我們的精度僅略有下降。 以這種方式進行分類也有若干好處。 在新的或未知的目標類別上,性能會優雅低降低。 例如,如果網路看到一張狗的照片,但不確定它是什麼類型的狗,它仍然會高度自信地預測「dog」,只是所有下義詞會有較低的置信度。
該方法也適用於檢測。現在,我們不用假定每個圖像都有一個目標物體,而是使用YOLOv2的目標預測器給出P r(目標物體)的值。檢測器預測邊界框和概率樹。我們遍歷樹,在每次分割中選取具有最高的置信度的路徑,直到達到某個閾值,然後我們得到該目標的類。
數據集與WordTree的組合。我們可以使用WordTree以可行的方式將多個數據集組合在一起。我們只需將數據集中的類別映射到樹中的synsets即可。圖6顯示了一個使用WordTree組合來自ImageNet和COCO的標籤的示例。 WordNet非常多樣化,因此我們可以將這種技術用於大多數數據集。
聯合分類和檢測。現在我們可以使用WordTree組合數據集,在分類和檢測上訓練聯合模型。我們想要訓練一個非常大規模的檢測器,所以使用COCO檢測數據集和完整ImageNet版本中的前9000類創建我們的組合數據集。我們還需要評估我們的方法,以便從ImageNet檢測挑戰中添加任何尚未包含的類。該數據集的相應WordTree具有9418個類。ImageNet有更大的數據集,所以我們通過對COCO進行過採樣來平衡數據集,使得ImageNet與COCO的比例略大於4:1。
我們使用上述的數據集訓練YOLO9000。 我們使用基本的YOLOv2架構,但只有3個先驗而不是5個來限制輸出大小。當我們的網路處理檢測圖像時,我們會像平常一樣反向傳播損失。對於分類損失,我們只是將損失反向傳播到標籤相應級別或更高的級別。 例如,如果標籤是狗,我們不會將任何錯誤給樹做進一步預測,如德國牧羊犬與黃金獵犬,因為我們沒有這些信息。
當網路處理分類圖像時,我們只是反向傳播分類損失。要做到這一點,我們只需找到預測該類別最高概率的邊界框,然後在預測的樹上計算損失。我們還假設預測框與真實框的IOU至少為0.3,並且基於這個假設我們反向傳播目標損失。
利用這種聯合訓練,YOLO9000學習使用COCO中的檢測數據來查找圖像中的目標,並學習使用來自ImageNet的數據對各種這些目標進行分類。
我們在ImageNet檢測任務上評估YOLO9000。 ImageNet的檢測任務與COCO共享44個目標類別,這意味著YOLO9000看到的測試圖像大多數是分類數據,而不是檢測數據。 YOLO9000的總mAp是19.7 mAP,其中在不相交的156個目標類上,YOLO9000從未見過這些類的任何檢測數據的標籤,仍獲得了16.0mAP。這個mAP高於DPM的結果,但YOLO9000是在部分監督[4]的不同的數據集上訓練的。而且它能同時檢測9000個其他目標類別,所有的檢測都是實時的。
在分析YOLO9000在ImageNet上的表現時,我們發現它很好地學習了新的動物種類,但是在像服裝和設備這樣的學習類別中表現不佳。新動物更容易學習,因為目標預測可以從COCO中的動物泛化的很好。相反,COCO沒有任何類型的衣服的邊界框標籤,只針對人,因此YOLO9000在分類「墨鏡」或「泳褲」等類別上存在困難。
5.結論
我們介紹實時檢測系統YOLOv2和YOLO9000。 YOLOv2在各種檢測數據集中都是最先進的,並且比其他檢測系統更快。此外,它可以在各種圖像尺寸下運行,以提供速度和準確性之間的平滑折衷。
YOLO9000是一個通過聯合優化檢測和分類來檢測超過9000個目標類別的實時框架。我們使用WordTree將各種來源的數據和我們的聯合優化技術相結合,在ImageNet和COCO上同時進行訓練。 YOLO9000向縮小檢測和分類之間的數據集大小的差距邁出了堅實的一步。
我們的許多技術都是泛化到目標檢測之外的領域。 ImageNet的WordTree表示方法為圖像分類提供了更豐富,更詳細的輸出空間。使用分層分類的數據集組合在分類和分割領域將會很有用。像多尺度訓練這樣的訓練技術可以為各種視覺任務提供幫助。
對於未來的工作,我們希望使用類似的技術進行弱監督圖像分割。我們還計劃使用更強大的匹配策略來改善我們的檢測結果,以在訓練期間將弱標籤分配給分類數據。計算機視覺擁有大量的標記數據。我們將繼續尋找方法,將不同的數據來源和數據結構結合在一起,形成更強大的視覺世界模型。
推薦閱讀:
TAG:深度學習DeepLearning | 論文翻譯 | 目標檢測 |