?以下文章轉(zhuǎn)載自CSDN博客。(小糖豆在找資料的時(shí)候發(fā)現(xiàn)了這篇文章,寫的確實(shí)非常精彩,分享給大家)
|來源:
https://blog.csdn.net/Gentleman_Qin/article/details/84349144
|作者:圖像所浩南哥
|聲明:遵循CC 4.0 BY-SA版權(quán)協(xié)議
算法概述
????建立在YOLOv1的基礎(chǔ)上,經(jīng)過Joseph Redmon等的改進(jìn),YOLOv2和YOLO9000算法在2017年CVPR上被提出,并獲得最佳論文提名,重點(diǎn)解決YOLOv1召回率和定位精度方面的誤差。在提出時(shí),YOLOv2在多種監(jiān)測數(shù)據(jù)集中都要快過其他檢測系統(tǒng),并可以在速度與精確度上進(jìn)行權(quán)衡。
??? YOLOv2采用Darknet-19作為特征提取網(wǎng)絡(luò),增加了批量標(biāo)準(zhǔn)化(Batch Normalization)的預(yù)處理,并使用224×224和448×448兩階段訓(xùn)練ImageNet,得到預(yù)訓(xùn)練模型后fine-tuning。
????相比于YOLOv1是利用FC層直接預(yù)測Bounding Box的坐標(biāo),YOLOv2借鑒了FSR-CNN的思想,引入Anchor機(jī)制,利用K-Means聚類的方式在訓(xùn)練集中聚類計(jì)算出更好的Anchor模板,在卷積層使用Anchor Boxes操作,增加Region Proposal的預(yù)測,同時(shí)采用較強(qiáng)約束的定位方法,大大提高算法召回率。同時(shí)結(jié)合圖像細(xì)粒度特征,將淺層特征與深層特征相連,有助于對小尺寸目標(biāo)的檢測。?
????下圖所示是YOLOv2采取的各項(xiàng)改進(jìn)帶了的檢測性能上的提升:
??? YOLO9000 的主要檢測網(wǎng)絡(luò)也是YOLO v2,同時(shí)使用WordTree來混合來自不同的資源的訓(xùn)練數(shù)據(jù),并使用聯(lián)合優(yōu)化技術(shù)同時(shí)在ImageNet和COCO數(shù)據(jù)集上進(jìn)行訓(xùn)練,目的是利用數(shù)量較大的分類數(shù)據(jù)集來幫助訓(xùn)練檢測模型,因此,YOLO 9000的網(wǎng)絡(luò)結(jié)構(gòu)允許實(shí)時(shí)地檢測超過9000種物體分類,進(jìn)一步縮小了檢測數(shù)據(jù)集與分類數(shù)據(jù)集之間的大小代溝。
????下面將具體分析YOLOv2的各個(gè)創(chuàng)新點(diǎn):
算法創(chuàng)新點(diǎn)
批量標(biāo)準(zhǔn)化(Batch Nomalization)(使mAP提升2%)
BN概述:
????對數(shù)據(jù)進(jìn)行預(yù)處理(統(tǒng)一格式、均衡化、去噪等)能夠大大提高訓(xùn)練速度,提升訓(xùn)練效果。BN正是基于這個(gè)假設(shè)的實(shí)踐,對每一層輸入的數(shù)據(jù)進(jìn)行加工。
??? BN是2015年Google研究員在論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》一文中提出的,同時(shí)也將BN應(yīng)用到了2014年的GoogLeNet上,也就是Inception-v2。
??? BN層簡單講就是對網(wǎng)絡(luò)的每一層的輸入都做了歸一化,這樣網(wǎng)絡(luò)就不需要每層都去學(xué)數(shù)據(jù)的分布,收斂會更快。YOLOv1算法(采用的是GoogleNet網(wǎng)絡(luò)提取特征)是沒有BN層的,而在YOLOv2中作者為每個(gè)卷積層都添加了BN層。
????使用BN對網(wǎng)絡(luò)進(jìn)行優(yōu)化,讓網(wǎng)絡(luò)提高了收斂性,同時(shí)還消除了對其他形式的正則化(regularization)的依賴,因此使用BN后可以從模型中去掉Dropout,而不會產(chǎn)生過擬合。
BN優(yōu)點(diǎn):
神經(jīng)網(wǎng)絡(luò)每層輸入的分布總是發(fā)生變化,加入BN,通過標(biāo)準(zhǔn)化上層輸出,均衡輸入數(shù)據(jù)分布,加快訓(xùn)練速度,因此可以設(shè)置較大的學(xué)習(xí)率(Learning Rate)和衰減(Decay);
通過標(biāo)準(zhǔn)化輸入,降低激活函數(shù)(Activation Function)在特定輸入?yún)^(qū)間達(dá)到飽和狀態(tài)的概率,避免梯度彌散(Gradient Vanishing)問題;
輸入標(biāo)準(zhǔn)化對應(yīng)樣本正則化,BN在一定程度上可以替代 Dropout解決過擬合問題。
BN算法:
????在卷積或池化之后,激活函數(shù)之前,對每個(gè)數(shù)據(jù)輸出進(jìn)行標(biāo)準(zhǔn)化,方式如下圖所示:
????公式很簡單,前三行是 Batch內(nèi)數(shù)據(jù)歸一化(假設(shè)一個(gè)Batch中有每個(gè)數(shù)據(jù)),同一Batch內(nèi)數(shù)據(jù)近似代表了整體訓(xùn)練數(shù)據(jù)。第四行引入了附加參數(shù) γ 和 β,此二者的取值算法可以參考BN論文,在此不再贅述。
高分辨率模型(High Resolution Classifier)(使mAP提升4%)
??? fine-tuning:用已經(jīng)訓(xùn)練好的模型,加上自己的數(shù)據(jù)集,來訓(xùn)練新的模型。即使用別人的模型的前幾層,來提取淺層特征,而非完全重新訓(xùn)練模型,從而提高效率。一般新訓(xùn)練模型準(zhǔn)確率都會從很低的值開始慢慢上升,但是fine-tuning能夠讓我們在比較少的迭代次數(shù)之后得到一個(gè)比較好的效果。
??? YOLO模型分為兩部分,分類模型和檢測模型,前者使用在ImageNet上預(yù)訓(xùn)練好的模型,后者在檢測數(shù)據(jù)集上fine-tuning。
??? YOLOv1在預(yù)訓(xùn)練時(shí)采用的是224*224的輸入(在ImageNet數(shù)據(jù)集上進(jìn)行),然后在檢測的時(shí)候采用448*448的輸入,這會導(dǎo)致從分類模型切換到檢測模型的時(shí)候,模型還要適應(yīng)圖像分辨率的改變。
??? YOLOv2則將預(yù)訓(xùn)練分成兩步:先用224*224的輸入在ImageNet數(shù)據(jù)集訓(xùn)練分類網(wǎng)絡(luò),大概160個(gè)epoch(將所有訓(xùn)練數(shù)據(jù)循環(huán)跑160次)后將輸入調(diào)整到448*448,再訓(xùn)練10個(gè)epoch(這兩步都是在ImageNet數(shù)據(jù)集上操作)。然后利用預(yù)訓(xùn)練得到的模型在檢測數(shù)據(jù)集上fine-tuning。這樣訓(xùn)練得到的模型,在檢測時(shí)用448*448的圖像作為輸入可以順利檢測。
引入Anchor(Convolutional with Anchor Boxes)(mAP下降0.2%但recall提升7%)
??? YOLOv1將輸入圖像分成7*7的網(wǎng)格,每個(gè)網(wǎng)格預(yù)測2個(gè)Bounding Box,因此一共有98個(gè)Box,同時(shí)YOLOv1包含有全連接層,從而能直接預(yù)測Bounding Boxes的坐標(biāo)值,但也導(dǎo)致丟失較多的空間信息,定位不準(zhǔn)。
??? YOLOv2首先將YOLOv1網(wǎng)絡(luò)的FC層和最后一個(gè)Pooling層去掉,使得最后的卷積層可以有更高分辨率的特征,然后縮減網(wǎng)絡(luò),用416*416大小的輸入代替原來的448*448,使得網(wǎng)絡(luò)輸出的特征圖有奇數(shù)大小的寬和高,進(jìn)而使得每個(gè)特征圖在劃分單元格(Cell)的時(shí)候只有一個(gè)中心單元格(Center Cell)。
????為什么希望只有一個(gè)中心單元格呢?由于圖片中的物體都傾向于出現(xiàn)在圖片的中心位置,特別是比較大的物體,所以有一個(gè)單元格單獨(dú)位于物體中心的位置用于預(yù)測這些物體。
??? YOLOv2通過引入Anchor Boxes,通過預(yù)測Anchor Box的偏移值與置信度,而不是直接預(yù)測坐標(biāo)值。YOLOv2的卷積層采用32這個(gè)值來下采樣圖片,所以通過選擇416*416用作輸入尺寸最終能輸出一個(gè)13*13的特征圖。若采用FSRCNN中的方式,每個(gè)Cell可預(yù)測出9個(gè)Anchor Box,共13*13*9=1521個(gè)(YOLOv2確定Anchor Boxes的方法見是維度聚類,每個(gè)Cell選擇5個(gè)Anchor Box)。
????在FSRCNN中,以一個(gè)51*39大小的特征圖為例,其可以看做一個(gè)尺度為51*39的圖像,對于該圖像的每一個(gè)位置,考慮9個(gè)可能的候選窗口:3種面積3種比例。這些候選窗口稱為Anchor Boxes。下圖示出的是51*39個(gè)Anchor Box中心,以及9種Anchor Box示例。
YOLOv1和YOLOv2特征圖數(shù)據(jù)結(jié)構(gòu):
YOLOv1:S*S* (B*5 + C) => 7*7(2*5+20)
????其中B對應(yīng)Box數(shù)量,5對應(yīng)邊界框的定位信息(w,y,w,h)和邊界框置信度(Confidience)。分辨率是7*7,每個(gè)Cell預(yù)測2個(gè)Box,這2個(gè)Box共用1套條件類別概率(1*20)。
YOLOv2:S*S*K* (5 + C) => 13*13*9(5+20)
????分辨率提升至13*13,對小目標(biāo)適應(yīng)性更好,借鑒了FSRCNN的思想,每個(gè)Cell對應(yīng)K個(gè)Anchor box(YOLOv2中K=5),每個(gè)Anchor box對應(yīng)1組條件類別概率(1*20)。
維度聚類(Dimension Clusters)(與第5點(diǎn)結(jié)合使mAP提升5%)
????聚類:聚類是指事先沒有“標(biāo)簽”而通過某種成團(tuán)分析找出事物之間存在聚集性原因的過程。即在沒有劃分類別的情況下,根據(jù)數(shù)據(jù)相似度進(jìn)行樣本分組。
????在FSR-CNN中Anchor Box的大小和比例是按經(jīng)驗(yàn)設(shè)定的,然后網(wǎng)絡(luò)會在訓(xùn)練過程中調(diào)整Anchor Box的尺寸,最終得到準(zhǔn)確的Anchor Boxes。若一開始就選擇了更好的、更有代表性的先驗(yàn)Anchor Boxes,那么網(wǎng)絡(luò)就更容易學(xué)到準(zhǔn)確的預(yù)測位置。
??? YOLOv2使用K-means聚類方法類訓(xùn)練Bounding Boxes,可以自動找到更好的寬高維度的值用于一開始的初始化。傳統(tǒng)的K-means聚類方法使用的是歐氏距離函數(shù),意味著較大的Anchor Boxes會比較小的Anchor Boxes產(chǎn)生更多的錯(cuò)誤,聚類結(jié)果可能會偏離。由于聚類目的是確定更精準(zhǔn)的初始Anchor Box參數(shù),即提高IOU值,這應(yīng)與Box大小無關(guān),因此YOLOv2采用IOU值為評判標(biāo)準(zhǔn),即K-means 采用的距離函數(shù)(度量標(biāo)準(zhǔn)) 為:
d(box,centroid) = 1 - IOU(box,centroid)
????如下圖,左邊是聚類的簇個(gè)數(shù)和IOU的關(guān)系,兩條曲線分別代表兩個(gè)不同的數(shù)據(jù)集。分析聚類結(jié)果并權(quán)衡模型復(fù)雜度與IOU值后,YOLOv2選擇K=5,即選擇了5種大小的Box 維度來進(jìn)行定位預(yù)測。
????其中紫色和灰色也是分別表示兩個(gè)不同的數(shù)據(jù)集,可以看出其基本形狀是類似的。更重要的是,可以看出聚類的結(jié)果和手動設(shè)置的Anchor Box位置和大小差別顯著——結(jié)果中扁長的框較少,而瘦高的框更多(更符合行人的特征)。
??? YOLOv2采用的5種Anchor的Avg IOU是61,而采用9種Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是說本文僅選取5種box就能達(dá)到Faster RCNN的9中box的效果。選擇值為9的時(shí)候,AVG IOU更有顯著提高。說明K-means方法的生成的boxes更具有代表性。
直接位置預(yù)測(Direct location prediction)(與第4點(diǎn)結(jié)合使mAP提升5%)
????直接對Bounding Boxes求回歸會導(dǎo)致模型不穩(wěn)定,其中心點(diǎn)可能會出現(xiàn)在圖像任何位置,有可能導(dǎo)致回歸過程震蕩,甚至無法收斂,尤其是在最開始的幾次迭代的時(shí)候。大多數(shù)不穩(wěn)定因素產(chǎn)生自預(yù)測Bounding Box的中心坐標(biāo)(x,y)位置的時(shí)候。
??? YOLOv2的網(wǎng)絡(luò)在特征圖(13*13)的每一個(gè)單元格中預(yù)測出5個(gè)Bounding Boxes(對應(yīng)5個(gè)Anchor Boxes),每個(gè)Bounding Box預(yù)測出5個(gè)值(tx,ty,tw,th,t0),其中前4個(gè)是坐標(biāo)偏移值,t0是置信度結(jié)果(類似YOLOv1中的邊界框置信度Confidence)。YOLOv2借鑒了如下的預(yù)測方式,即當(dāng)Anchor Box的中心坐標(biāo)和寬高分別是(xa,ya)和(wa,wh)時(shí),Bounding Box坐標(biāo)的預(yù)測偏移值(tx,ty,tw,th)與其坐標(biāo)寬高(x,y,w,h)的關(guān)系如下:? ? ? ? ? ? ? ? ? ? ? ? ?
tx?=?(x-xa)/wa
ty= (y-ya)/ha
tw?=?log(w/wa)
th?= log(h/ha)
????基于這種思想,YOLOv2在預(yù)測Bounding Box的位置參數(shù)時(shí)采用了如下強(qiáng)約束方法:
????上圖中,黑色虛線框是Anchor Box,藍(lán)色矩形框就是預(yù)測的Bounding Box結(jié)果,預(yù)測出的Bounding Box的坐標(biāo)和寬高為(bx,by)和(bw,bh),計(jì)算方式如圖中所示,其中:對每個(gè)Bounding Box預(yù)測出5個(gè)值(tx,ty,tw,th,t0),Cell與圖像左上角的橫縱坐標(biāo)距離為(cx,cy),σ定義為sigmoid激活函數(shù)(將函數(shù)值約束到[0,1]),該Cell對應(yīng)的Anchor Box對應(yīng)的寬高為(pw,ph)。
????簡而言之,(bx,by)就是(cx,cy)這個(gè)Cell附近的Anchor Box針對預(yù)測值(tx,ty)得到的Bounding Box的坐標(biāo)預(yù)測結(jié)果,同時(shí)可以發(fā)現(xiàn)這種方式對于較遠(yuǎn)距離的Bounding Box預(yù)測值(tx,ty)能夠得到很大的限制。
細(xì)粒度特征(Fine-Grained Features)(特征融合)(使mAP提升1%)
??? YOLOv2通過添加一個(gè)轉(zhuǎn)移層,把高分辨率的淺層特征連接到低分辨率的深層特征(把特征堆積在不同Channel中)而后進(jìn)行融合和檢測。具體操作是先獲取前層的26*26的特征圖,將其同最后輸出的13*13的特征圖進(jìn)行連接,而后輸入檢測器進(jìn)行檢測(檢測器的FC層起到了全局特征融合的作用),以此來提高對小目標(biāo)的檢測能力。? ??
多尺度訓(xùn)練(Muinti-Scale Training)(使mAP提升1%)
????為了適應(yīng)不同尺度下的檢測任務(wù),YOLOv2在訓(xùn)練網(wǎng)絡(luò)時(shí),其在檢測數(shù)據(jù)集上fine-tuning時(shí)候采用的輸入圖像的size是動態(tài)變化的。具體來講,每訓(xùn)練10個(gè)Batch,網(wǎng)絡(luò)就會隨機(jī)選擇另一種size的輸入圖像。因?yàn)閅OLOv2用到了參數(shù)是32的下采樣,因此也采用32的倍數(shù)作為輸入的size,即采用{320,352,…,608}的輸入尺寸(網(wǎng)絡(luò)會自動改變尺寸,并繼續(xù)訓(xùn)練的過程)。
這一策略讓網(wǎng)絡(luò)在不同的輸入尺寸上都能達(dá)到較好的預(yù)測效果,使同一網(wǎng)絡(luò)能在不同分辨率上進(jìn)行檢測。輸入圖片較大時(shí),檢測速度較慢,輸入圖片較小時(shí),檢測速度較快,總體上提高了準(zhǔn)確率,因此多尺度訓(xùn)練算是在準(zhǔn)確率和速度上達(dá)到一個(gè)平衡。
????上表反映的是在檢測時(shí),不同大小的輸入圖片情況下的YOLOv2和其他目標(biāo)檢測算法的對比。可以看出通過多尺度訓(xùn)練的檢測模型,在測試的時(shí)候,輸入圖像在尺寸變化范圍較大的情況下也能取得mAP和FPS的平衡。
網(wǎng)絡(luò)訓(xùn)練
訓(xùn)練分類網(wǎng)絡(luò)(預(yù)訓(xùn)練)
??? YOLOv1采用的訓(xùn)練網(wǎng)絡(luò)是GoogleNet,YOLOv2采用了新的分類網(wǎng)絡(luò)Darknet-19作為基礎(chǔ)網(wǎng)絡(luò),它使用了較多的3*3卷積核,并把1*1的卷積核置于3*3的卷積核之間,用來壓縮特征,同時(shí)在每一次池化操作后把通道(Channels)數(shù)翻倍(借鑒VGG網(wǎng)絡(luò))。
??? YOLOv1采用的GooleNet包含24個(gè)卷積層和2個(gè)全連接層,而Darknet-19包含19個(gè)卷積層和5個(gè)最大池化層(Max Pooling Layers),后面添加Average Pooling層(代替v1中FC層),而Softmax分類器作為激活被用在網(wǎng)絡(luò)最后一層,用來進(jìn)行分類和歸一化。
????在ImageNet數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,主要分兩步(采用隨機(jī)梯度下降法):
輸入圖像大小是224*224,初始學(xué)習(xí)率(Learning Rate)為0.1,訓(xùn)練160個(gè)epoch,權(quán)值衰減(Weight Decay)為0.0005,動量(Momentum)為0.9,同時(shí)在訓(xùn)練時(shí)采用標(biāo)準(zhǔn)的數(shù)據(jù)增強(qiáng)(Data Augmentation)方式如隨機(jī)裁剪、旋轉(zhuǎn)以及色度、亮度的調(diào)整。
fine-tuning:第1步結(jié)束后,改用448*448輸入(高分辨率模型),學(xué)習(xí)率改為0.001,訓(xùn)練10個(gè)epoch,其他參數(shù)不變。結(jié)果表明:fine-tuning后的top-1準(zhǔn)確率為76.5%,top-5準(zhǔn)確率為93.3%,若按照原來的訓(xùn)練方式,Darknet-19的top-1準(zhǔn)確率是72.9%,top-5準(zhǔn)確率為91.2%。可以看出,兩步分別從網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練方式方面入手提高了網(wǎng)絡(luò)分類準(zhǔn)確率。
訓(xùn)練檢測網(wǎng)絡(luò)(fine-tuning)
????預(yù)訓(xùn)練之后,開始基于檢測的數(shù)據(jù)集再進(jìn)行fine-tuning。? ??
????首先,先把最后一個(gè)卷積層去掉,然后添加3個(gè)3*3的卷積層,每個(gè)卷積層有1024個(gè)卷積核,并且后面都連接一個(gè)1*1的卷積層,卷積核個(gè)數(shù)(特征維度)根據(jù)需要檢測的類數(shù)量決定。(比如對VOC數(shù)據(jù),每個(gè)Cell需要預(yù)測5個(gè)Boungding Box,每個(gè)Bounding Box有4個(gè)坐標(biāo)值、1個(gè)置信度值和20個(gè)條件類別概率值,所以每個(gè)單元格對應(yīng)125個(gè)數(shù)據(jù),此時(shí)卷積核個(gè)數(shù)應(yīng)該取125。)
????然后,將最后一個(gè)3*3*512的卷積層和倒數(shù)第2個(gè)卷積層相連(提取細(xì)粒度特征),最后在檢測數(shù)據(jù)集上fine-tuning預(yù)訓(xùn)練模型160個(gè)epoch,學(xué)習(xí)率采用0.001,并且在第60和90個(gè)epoch的時(shí)候?qū)W(xué)習(xí)率除以10,權(quán)值衰減、動量和數(shù)據(jù)增強(qiáng)方法與預(yù)訓(xùn)練相同。
YOLO9000的實(shí)現(xiàn)(數(shù)據(jù)及融合及聯(lián)合訓(xùn)練)
??? YOLO9000通過結(jié)合分類和檢測數(shù)據(jù)集,使得訓(xùn)練得到的模型可以檢測約9000類物體,利用帶標(biāo)注的分類數(shù)據(jù)集量比較大的特點(diǎn),解決了帶標(biāo)注的檢測數(shù)據(jù)集量比較少的問題。具體方法是:一方面采用WordTree融合數(shù)據(jù)集,另一方面聯(lián)合訓(xùn)練分類數(shù)據(jù)集和檢測數(shù)據(jù)集。
用WordTree融合數(shù)據(jù)集
????分類數(shù)據(jù)集和檢測數(shù)據(jù)集存在較大差別:檢測數(shù)據(jù)集只有粗粒度的標(biāo)記信息,如“貓”、“狗”,而分類數(shù)據(jù)集的標(biāo)簽信息則更細(xì)粒度,更豐富。比如“狗”就包括“哈士奇”、“金毛狗”等等。所以如果想同時(shí)在檢測數(shù)據(jù)集與分類數(shù)據(jù)集上進(jìn)行訓(xùn)練,那么就要用一種一致性的方法融合這些標(biāo)簽信息。
????用于分類的方法,常用Softmax(比如v2),Softmax意味著分類的類別之間要互相獨(dú)立的,而ImageNet和COCO這兩種數(shù)據(jù)集之間的分類信息不相互獨(dú)立(ImageNet對應(yīng)分類有9000種,而COCO僅提供80種目標(biāo)檢測),所以使用一種多標(biāo)簽?zāi)P蛠砘旌蠑?shù)據(jù)集,即假定一張圖片可以有多個(gè)標(biāo)簽,并且不要求標(biāo)簽之間獨(dú)立,而后進(jìn)行Softmax分類。
????由于ImageNet的類別是從WordNet選取的,作者采用以下策略重建了一個(gè)樹形結(jié)構(gòu)(稱為WordTree):
遍歷ImageNet的標(biāo)簽,然后在WordNet中尋找該標(biāo)簽到根節(jié)點(diǎn)(所有的根節(jié)點(diǎn)為實(shí)體對象)的路徑;
如果路徑只有一條,將該路徑直接加入到WordTree結(jié)構(gòu)中;
否則,從可選路徑中選擇一條最短路徑,加入到WordTree結(jié)構(gòu)中。
WordTree的作用就在于將兩種數(shù)據(jù)集按照層級進(jìn)行結(jié)合。
????如此,在WordTree的某個(gè)節(jié)點(diǎn)上就可以計(jì)算該節(jié)點(diǎn)的一些條件概率值,比如在terrier這個(gè)節(jié)點(diǎn),可以得到如下條件概率值:
????進(jìn)而,如果要預(yù)測此節(jié)點(diǎn)的概率(即圖片中目標(biāo)是Norfolk terrier的概率),可以根據(jù)WordTree將該節(jié)點(diǎn)到根節(jié)點(diǎn)的條件概率依次相乘得到,如下式:
其中:? ? ? ??
??? YOLO9000在WordTree1k(用有1000類別的ImageNet1k創(chuàng)建)上訓(xùn)練了Darknet-19模型。為了創(chuàng)建WordTree1k作者添加了很多中間節(jié)點(diǎn)(中間詞匯),把標(biāo)簽由1000擴(kuò)展到1369。
????訓(xùn)練過程中GroundTruth標(biāo)簽要順著向根節(jié)點(diǎn)的路徑傳播:為了計(jì)算條件概率,模型預(yù)測了一個(gè)包含1369個(gè)元素的向量,而且基于所有“同義詞集”計(jì)算Softmax,其中“同義詞集”是同一概念下的所屬詞。
????現(xiàn)在一張圖片是多標(biāo)記的,標(biāo)記之間不需要相互獨(dú)立。在訓(xùn)練過程中,如果有一個(gè)圖片的標(biāo)簽是“Norfolk terrier”,那么這個(gè)圖片還會獲得“狗”以及“哺乳動物”等標(biāo)簽。
????如上圖所示,之前的ImageNet分類是使用一個(gè)大Softmax進(jìn)行分類,而現(xiàn)在WordTree只需要對同一概念下的同義詞進(jìn)行Softmax分類。然后作者分別兩個(gè)數(shù)據(jù)集上用相同訓(xùn)練方法訓(xùn)練Darknet-19模型,最后在ImageNet數(shù)據(jù)集上的top-1準(zhǔn)確率為72.9%,top-5準(zhǔn)確率為91.2%;在WordTree數(shù)據(jù)集上的top-1準(zhǔn)確率為71.9%,top-5準(zhǔn)確率為90.4%。
????這種方法的好處是有“退而求其次”的余地:在對未知或者新的物體進(jìn)行分類時(shí),性能損失更低,比如看到一個(gè)狗的照片,但不知道是哪種種類的狗,那么就預(yù)測其為“狗”。
????以上是構(gòu)造WordTree的原理,下圖是融合COCO數(shù)據(jù)集和ImageNet數(shù)據(jù)集以及生成它們的WordTree的示意圖(用顏色區(qū)分了COCO數(shù)據(jù)集和ImageNet數(shù)據(jù)集的標(biāo)簽節(jié)點(diǎn)), 混合后的數(shù)據(jù)集對應(yīng)的WordTree有9418個(gè)類。另一方面,由于ImageNet數(shù)據(jù)集太大,YOLO9000為了平衡兩個(gè)數(shù)據(jù)集之間的數(shù)據(jù)量,通過過采樣(Oversampling)COCO數(shù)據(jù)集中的數(shù)據(jù),使COCO數(shù)據(jù)集與ImageNet數(shù)據(jù)集之間的數(shù)據(jù)量比例達(dá)到1:4。
????對YOLO9000進(jìn)行評估,發(fā)現(xiàn)其mAP比DPM高,而且YOLO有更多先進(jìn)的特征,YOLO9000是用部分監(jiān)督的方式在不同訓(xùn)練集上進(jìn)行訓(xùn)練,同時(shí)還能檢測9000個(gè)物體類別,并保證實(shí)時(shí)運(yùn)行。雖然YOLO9000對動物的識別性能很好,但是對衣服或者裝備的識別性能不是很好(這跟數(shù)據(jù)集的數(shù)據(jù)組成有關(guān))。
聯(lián)合訓(xùn)練分類數(shù)據(jù)集與檢測數(shù)據(jù)集
??? YOLO9000的網(wǎng)絡(luò)結(jié)構(gòu)和YOLOv2類似,區(qū)別是每個(gè)單元格只采用3個(gè)Anchor Boxes。
??? YOLO9000提出了一種在分類數(shù)據(jù)集和檢測數(shù)據(jù)集上聯(lián)合訓(xùn)練的機(jī)制,即使用檢測數(shù)據(jù)集(COCO)的圖片去學(xué)習(xí)檢測相關(guān)的信息即查找對象(例如預(yù)測邊界框坐標(biāo)、邊界框是否包含目標(biāo)及目標(biāo)屬于各個(gè)類別的概率),使用僅有類別標(biāo)簽的分類數(shù)據(jù)集(ImageNet)中的圖片去擴(kuò)展檢測到的對象的可識別種類。
????具體方法是:當(dāng)網(wǎng)絡(luò)遇到一個(gè)來自檢測數(shù)據(jù)集的圖片與標(biāo)記信息,就把這些數(shù)據(jù)用完整的損失函數(shù)(v2和9000均沿用了v1網(wǎng)絡(luò)的損失函數(shù))反向傳播,而當(dāng)網(wǎng)絡(luò)遇到一個(gè)來自分類數(shù)據(jù)集的圖片和分類標(biāo)記信息,只用代表分類誤差部分的損失函數(shù)反向傳播這個(gè)圖片。
性能評估
??? YOLO v2 在大尺寸圖片上能夠?qū)崿F(xiàn)高精度,在小尺寸圖片上運(yùn)行更快,可以說在速度和精度上達(dá)到了平衡,具體性能表現(xiàn)如下所示。
coco數(shù)據(jù)集
voc2012數(shù)據(jù)集