0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

YOLO的核心思想及YOLO的實(shí)現(xiàn)細(xì)節(jié)

電子工程師 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-05 09:12 ? 次閱讀

YOLOv1

這是繼 RCNN,fast-RCNN 和 faster-RCNN之后,Ross Girshick 針對(duì) DL 目標(biāo)檢測(cè)速度問(wèn)題提出的另外一種框架。YOLO V1 其增強(qiáng)版本在 GPU 上能跑45fps,簡(jiǎn)化版本155fps。

論文下載

http://arxiv.org/abs/1506.02640

代碼下載:

https://github.com/pjreddie/darknet

1.YOLO 的核心思想

YOLO 的核心思想就是利用整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸 bounding box(邊界框) 的位置及其所屬的類別。

faster-RCNN 中也直接用整張圖作為輸入,但是 faster-RCNN 整體還是采用了RCNN 那種 proposal+classifier 的思想,只不過(guò)是將提取 proposal 的步驟放在 CNN 中實(shí)現(xiàn)了,而 YOLO 則采用直接回歸的思路。

2.YOLO 的實(shí)現(xiàn)方法

將一幅圖像分成 SxS 個(gè)網(wǎng)格(grid cell),如果某個(gè) object 的中心落在這個(gè)網(wǎng)格中,則這個(gè)網(wǎng)格就負(fù)責(zé)預(yù)測(cè)這個(gè) object。

每個(gè)網(wǎng)格要預(yù)測(cè) B 個(gè) bounding box,每個(gè) bounding box 除了要回歸自身的位置之外,還要附帶預(yù)測(cè)一個(gè) confidence 值。

這個(gè) confidence 代表了所預(yù)測(cè)的 box 中含有 object 的置信度和這個(gè) box 預(yù)測(cè)的有多準(zhǔn)這兩重信息,其值是這樣計(jì)算的:

其中如果有 object 落在一個(gè) grid cell 里,第一項(xiàng)取 1,否則取 0。 第二項(xiàng)是預(yù)測(cè)的 bounding box 和實(shí)際的 groundtruth 之間的 IoU 值。

每個(gè) bounding box 要預(yù)測(cè) (x, y, w, h) 和 confidence 共5個(gè)值,每個(gè)網(wǎng)格還要預(yù)測(cè)一個(gè)類別信息,記為 C 類。則 SxS個(gè) 網(wǎng)格,每個(gè)網(wǎng)格要預(yù)測(cè) B 個(gè) bounding box 還要預(yù)測(cè) C 個(gè) categories。輸出就是 S x S x (5*B+C) 的一個(gè) tensor。

注意:class 信息是針對(duì)每個(gè)網(wǎng)格的,confidence 信息是針對(duì)每個(gè) bounding box 的。

舉例說(shuō)明:在PASCAL VOC 中,圖像輸入為 448x448,取 S=7,B=2,一共有20 個(gè)類別(C=20),則輸出就是 7x7x30 的一個(gè) tensor。

整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:

在 test 的時(shí)候,每個(gè)網(wǎng)格預(yù)測(cè)的 class 信息和 bounding box 預(yù)測(cè)的 confidence信息相乘,就得到每個(gè) bounding box 的 class-specific confidence score:

等式左邊第一項(xiàng)就是每個(gè)網(wǎng)格預(yù)測(cè)的類別信息,第二、三項(xiàng)就是每個(gè) bounding box 預(yù)測(cè)的 confidence。這個(gè)乘積即 encode 了預(yù)測(cè)的 box 屬于某一類的概率,也有該 box 準(zhǔn)確度的信息。

得到每個(gè) box 的 class-specific confidence score 以后,設(shè)置閾值,濾掉得分低的 boxes,對(duì)保留的 boxes 進(jìn)行 NMS 處理,就得到最終的檢測(cè)結(jié)果。

注:

*由于輸出層為全連接層,因此在檢測(cè)時(shí),YOLO 訓(xùn)練模型只支持與訓(xùn)練圖像相同的輸入分辨率。

*雖然每個(gè)格子可以預(yù)測(cè) B 個(gè) bounding box,但是最終只選擇只選擇 IOU 最高的 bounding box 作為物體檢測(cè)輸出,即每個(gè)格子最多只預(yù)測(cè)出一個(gè)物體。當(dāng)物體占畫面比例較小,如圖像中包含畜群或鳥群時(shí),每個(gè)格子包含多個(gè)物體,但卻只能檢測(cè)出其中一個(gè)。這是 YOLO 方法的一個(gè)缺陷。

3.YOLO 的實(shí)現(xiàn)細(xì)節(jié)

每個(gè) grid 有 30 維,這 30 維中,8 維是回歸 box 的坐標(biāo),2 維是 box的 confidence,還有 20 維是類別。

其中坐標(biāo)的 x, y 用對(duì)應(yīng)網(wǎng)格的 offset 歸一化到 0-1 之間,w, h 用圖像的 width 和 height 歸一化到 0-1 之間。

在實(shí)現(xiàn)中,最主要的就是怎么設(shè)計(jì)損失函數(shù),讓這個(gè)三個(gè)方面得到很好的平衡。作者簡(jiǎn)單粗暴的全部采用了 sum-squared error loss 來(lái)做這件事。

這種做法存在以下幾個(gè)問(wèn)題:

第一,8維的 localization error 和20維的 classification error 同等重要顯然是不合理的;

第二,如果一個(gè)網(wǎng)格中沒(méi)有 object(一幅圖中這種網(wǎng)格很多),那么就會(huì)將這些網(wǎng)格中的 box 的 confidence push 到 0,相比于較少的有 object 的網(wǎng)格,這種做法是 overpowering 的,這會(huì)導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定甚至發(fā)散。

解決辦法:

更重視8維的坐標(biāo)預(yù)測(cè),給這些損失前面賦予更大的 loss weight, 記為

在 pascal VOC 訓(xùn)練中取 5。

對(duì)沒(méi)有 object 的 box 的 confidence loss,賦予小的 loss weight,記為

在 pascal VOC 訓(xùn)練中取 0.5。

有 object 的 box 的 confidence loss 和類別的 loss 的 loss weight 正常取 1。

對(duì)不同大小的 box 預(yù)測(cè)中,相比于大 box 預(yù)測(cè)偏一點(diǎn),小 box 預(yù)測(cè)偏一點(diǎn)肯定更不能被忍受的。而 sum-square error loss 中對(duì)同樣的偏移 loss 是一樣。

為了緩和這個(gè)問(wèn)題,作者用了一個(gè)比較取巧的辦法,就是將 box 的 width 和 height 取平方根代替原本的 height 和 width。這個(gè)參考下面的圖很容易理解,小box 的橫軸值較小,發(fā)生偏移時(shí),反應(yīng)到y(tǒng)軸上相比大 box 要大。(也是個(gè)近似逼近方式)

一個(gè)網(wǎng)格預(yù)測(cè)多個(gè) box,希望的是每個(gè) box predictor 專門負(fù)責(zé)預(yù)測(cè)某個(gè) object。具體做法就是看當(dāng)前預(yù)測(cè)的 box 與 ground truth box 中哪個(gè) IoU 大,就負(fù)責(zé)哪個(gè)。這種做法稱作 box predictor 的 specialization。

最后整個(gè)的損失函數(shù)如下所示:

這個(gè)損失函數(shù)中:

只有當(dāng)某個(gè)網(wǎng)格中有 object 的時(shí)候才對(duì) classification error 進(jìn)行懲罰。

只有當(dāng)某個(gè) box predictor 對(duì)某個(gè) ground truth box 負(fù)責(zé)的時(shí)候,才會(huì)對(duì) box 的 coordinate error 進(jìn)行懲罰,而對(duì)哪個(gè) ground truth box 負(fù)責(zé)就看其預(yù)測(cè)值和 ground truth box 的 IoU 是不是在那個(gè) cell 的所有 box 中最大。

其他細(xì)節(jié),例如使用激活函數(shù)使用 leak RELU,模型用 ImageNet 預(yù)訓(xùn)練等等,在這里就不一一贅述了。

注:

*YOLO 方法模型訓(xùn)練依賴于物體識(shí)別標(biāo)注數(shù)據(jù),因此,對(duì)于非常規(guī)的物體形狀或比例,YOLO 的檢測(cè)效果并不理想。

*YOLO 采用了多個(gè)下采樣層,網(wǎng)絡(luò)學(xué)到的物體特征并不精細(xì),因此也會(huì)影響檢測(cè)效果。

* YOLO 的損失函數(shù)中,大物體 IOU 誤差和小物體 IOU 誤差對(duì)網(wǎng)絡(luò)訓(xùn)練中 loss 貢獻(xiàn)值接近(雖然采用求平方根方式,但沒(méi)有根本解決問(wèn)題)。因此,對(duì)于小物體,小的 IOU 誤差也會(huì)對(duì)網(wǎng)絡(luò)優(yōu)化過(guò)程造成很大的影響,從而降低了物體檢測(cè)的定位準(zhǔn)確性。

4.YOLO 的缺點(diǎn)

YOLO 對(duì)相互靠的很近的物體,還有很小的群體檢測(cè)效果不好,這是因?yàn)橐粋€(gè)網(wǎng)格中只預(yù)測(cè)了兩個(gè)框,并且只屬于一類。

同一類物體出現(xiàn)的新的不常見(jiàn)的長(zhǎng)寬比和其他情況時(shí),泛化能力偏弱。

由于損失函數(shù)的問(wèn)題,定位誤差是影響檢測(cè)效果的主要原因。尤其是大小物體的處理上,還有待加強(qiáng)。

YOLOv2

YOLOv2:代表著目前業(yè)界最先進(jìn)物體檢測(cè)的水平,它的速度要快過(guò)其他檢測(cè)系統(tǒng)(FasterR-CNN,ResNet,SSD),使用者可以在它的速度與精確度之間進(jìn)行權(quán)衡。

YOLO9000:這一網(wǎng)絡(luò)結(jié)構(gòu)可以實(shí)時(shí)地檢測(cè)超過(guò) 9000 種物體分類,這歸功于它使用了 WordTree,通過(guò) WordTree 來(lái)混合檢測(cè)數(shù)據(jù)集與識(shí)別數(shù)據(jù)集之中的數(shù)據(jù)。

工程代碼地址:

http://pjreddie.com/darknet/yolo/

▌簡(jiǎn)介

目前的檢測(cè)數(shù)據(jù)集(Detection Datasets)有很多限制,分類標(biāo)簽的信息太少,圖片的數(shù)量小于分類數(shù)據(jù)集(Classi?cation Datasets),而且檢測(cè)數(shù)據(jù)集的成本太高,使其無(wú)法當(dāng)作分類數(shù)據(jù)集進(jìn)行使用。而現(xiàn)在的分類數(shù)據(jù)集卻有著大量的圖片和十分豐富分類信息。

文章提出了一種新的訓(xùn)練方法–聯(lián)合訓(xùn)練算法。這種算法可以把這兩種的數(shù)據(jù)集混合到一起。使用一種分層的觀點(diǎn)對(duì)物體進(jìn)行分類,用巨量的分類數(shù)據(jù)集數(shù)據(jù)來(lái)擴(kuò)充檢測(cè)數(shù)據(jù)集,從而把兩種不同的數(shù)據(jù)集混合起來(lái)。

聯(lián)合訓(xùn)練算法的基本思路就是:同時(shí)在檢測(cè)數(shù)據(jù)集和分類數(shù)據(jù)集上訓(xùn)練物體檢測(cè)器(Object Detectors ),用監(jiān)測(cè)數(shù)據(jù)集的數(shù)據(jù)學(xué)習(xí)物體的準(zhǔn)確位置,用分類數(shù)據(jù)集的數(shù)據(jù)來(lái)增加分類的類別量、提升魯棒性。

YOLO9000 就是使用聯(lián)合訓(xùn)練算法訓(xùn)練出來(lái)的,他擁有 9000 類的分類信息,這些分類信息學(xué)習(xí)自ImageNet分類數(shù)據(jù)集,而物體位置檢測(cè)則學(xué)習(xí)自 COCO 檢測(cè)數(shù)據(jù)集。

代碼和預(yù)訓(xùn)練模型地址:

http://pjreddie.com/yolo9000/

▌更準(zhǔn)

YOLO 一代有很多缺點(diǎn),作者希望改進(jìn)的方向是改善 recall,提升定位的準(zhǔn)確度,同時(shí)保持分類的準(zhǔn)確度。

目前計(jì)算機(jī)視覺(jué)的趨勢(shì)是更大更深的網(wǎng)絡(luò),更好的性能表現(xiàn)通常依賴于訓(xùn)練更大的網(wǎng)絡(luò)或者把多種模型綜合到一起。但是 YOLO v2 則著力于簡(jiǎn)化網(wǎng)絡(luò)。具體的改進(jìn)見(jiàn)下表:

Batch Normalization

使用 Batch Normalization 對(duì)網(wǎng)絡(luò)進(jìn)行優(yōu)化,讓網(wǎng)絡(luò)提高了收斂性,同時(shí)還消除了對(duì)其他形式的正則化(regularization)的依賴。通過(guò)對(duì) YOLO 的每一個(gè)卷積層增加 Batch Normalization,最終使得 mAP 提高了 2%,同時(shí)還使模型正則化。使用 Batch Normalization 可以從模型中去掉 Dropout,而不會(huì)產(chǎn)生過(guò)擬合。

High resolution classifier

目前業(yè)界標(biāo)準(zhǔn)的檢測(cè)方法,都要先把分類器(classi?er)放在ImageNet上進(jìn)行預(yù)訓(xùn)練。從 Alexnet 開始,大多數(shù)的分類器都運(yùn)行在小于 256*256 的圖片上。而現(xiàn)在 YOLO 從 224*224 增加到了 448*448,這就意味著網(wǎng)絡(luò)需要適應(yīng)新的輸入分辨率。

為了適應(yīng)新的分辨率,YOLO v2 的分類網(wǎng)絡(luò)以 448*448 的分辨率先在 ImageNet上進(jìn)行微調(diào),微調(diào) 10 個(gè) epochs,讓網(wǎng)絡(luò)有時(shí)間調(diào)整濾波器(filters),好讓其能更好的運(yùn)行在新分辨率上,還需要調(diào)優(yōu)用于檢測(cè)的 Resulting Network。最終通過(guò)使用高分辨率,mAP 提升了 4%。

Convolution with anchor boxes

YOLO 一代包含有全連接層,從而能直接預(yù)測(cè) Bounding Boxes 的坐標(biāo)值。 Faster R-CNN 的方法只用卷積層與 Region Proposal Network 來(lái)預(yù)測(cè) Anchor Box 偏移值與置信度,而不是直接預(yù)測(cè)坐標(biāo)值。作者發(fā)現(xiàn)通過(guò)預(yù)測(cè)偏移量而不是坐標(biāo)值能夠簡(jiǎn)化問(wèn)題,讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)起來(lái)更容易。

所以最終 YOLO 去掉了全連接層,使用 Anchor Boxes 來(lái)預(yù)測(cè) Bounding Boxes。作者去掉了網(wǎng)絡(luò)中一個(gè)池化層,這讓卷積層的輸出能有更高的分辨率。收縮網(wǎng)絡(luò)讓其運(yùn)行在 416*416 而不是 448*448。由于圖片中的物體都傾向于出現(xiàn)在圖片的中心位置,特別是那種比較大的物體,所以有一個(gè)單獨(dú)位于物體中心的位置用于預(yù)測(cè)這些物體。YOLO 的卷積層采用 32 這個(gè)值來(lái)下采樣圖片,所以通過(guò)選擇 416*416 用作輸入尺寸最終能輸出一個(gè) 13*13 的特征圖。 使用 Anchor Box 會(huì)讓精確度稍微下降,但用了它能讓 YOLO 能預(yù)測(cè)出大于一千個(gè)框,同時(shí) recall 達(dá)到88%,mAP 達(dá)到 69.2%。

Dimension clusters

之前 Anchor Box 的尺寸是手動(dòng)選擇的,所以尺寸還有優(yōu)化的余地。 為了優(yōu)化,在訓(xùn)練集的 Bounding Boxes 上跑一下 k-means聚類,來(lái)找到一個(gè)比較好的值。

如果我們用標(biāo)準(zhǔn)的歐式距離的 k-means,尺寸大的框比小框產(chǎn)生更多的錯(cuò)誤。因?yàn)槲覀兊哪康氖翘岣?IOU 分?jǐn)?shù),這依賴于 Box 的大小,所以距離度量的使用:

通過(guò)分析實(shí)驗(yàn)結(jié)果(Figure 2),左圖:在模型復(fù)雜性與 high recall 之間權(quán)衡之后,選擇聚類分類數(shù) K=5。右圖:是聚類的中心,大多數(shù)是高瘦的 Box。

Table1 是說(shuō)明用 K-means 選擇 Anchor Boxes 時(shí),當(dāng) Cluster IOU 選擇值為 5 時(shí),AVG IOU 的值是 61,這個(gè)值要比不用聚類的方法的 60.9 要高。選擇值為 9 的時(shí)候,AVG IOU 更有顯著提高。總之就是說(shuō)明用聚類的方法是有效果的。

Direct location prediction

用 Anchor Box 的方法,會(huì)讓 model 變得不穩(wěn)定,尤其是在最開始的幾次迭代的時(shí)候。大多數(shù)不穩(wěn)定因素產(chǎn)生自預(yù)測(cè) Box 的(x,y)位置的時(shí)候。按照之前 YOLO的方法,網(wǎng)絡(luò)不會(huì)預(yù)測(cè)偏移量,而是根據(jù) YOLO 中的網(wǎng)格單元的位置來(lái)預(yù)測(cè)坐標(biāo),這就讓 Ground Truth 的值介于 0 到 1 之間。而為了讓網(wǎng)絡(luò)的結(jié)果能落在這一范圍內(nèi),網(wǎng)絡(luò)使用一個(gè) Logistic Activation 來(lái)對(duì)于網(wǎng)絡(luò)預(yù)測(cè)結(jié)果進(jìn)行限制,讓結(jié)果介于 0 到 1 之間。 網(wǎng)絡(luò)在每一個(gè)網(wǎng)格單元中預(yù)測(cè)出 5 個(gè) Bounding Boxes,每個(gè) Bounding Boxes 有五個(gè)坐標(biāo)值 tx,ty,tw,th,t0,他們的關(guān)系見(jiàn)下圖(Figure3)。假設(shè)一個(gè)網(wǎng)格單元對(duì)于圖片左上角的偏移量是 cx、cy,Bounding Boxes Prior 的寬度和高度是 pw、ph,那么預(yù)測(cè)的結(jié)果見(jiàn)下圖右面的公式:

因?yàn)槭褂昧讼拗谱寯?shù)值變得參數(shù)化,也讓網(wǎng)絡(luò)更容易學(xué)習(xí)、更穩(wěn)定。Dimension clusters和Direct location prediction,使 YOLO 比其他使用 Anchor Box 的版本提高了近5%。

Fine-Grained Features

YOLO 修改后的特征圖大小為 13*13,這個(gè)尺寸對(duì)檢測(cè)圖片中尺寸大物體來(lái)說(shuō)足夠了,同時(shí)使用這種細(xì)粒度的特征對(duì)定位小物體的位置可能也有好處。Faster-RCNN、SSD 都使用不同尺寸的特征圖來(lái)取得不同范圍的分辨率,而 YOLO 采取了不同的方法,YOLO 加上了一個(gè) Passthrough Layer 來(lái)取得之前的某個(gè) 26*26 分辨率的層的特征。這個(gè) Passthrough layer 能夠把高分辨率特征與低分辨率特征聯(lián)系在一起,聯(lián)系起來(lái)的方法是把相鄰的特征堆積在不同的 Channel 之中,這一方法類似與 Resnet 的 Identity Mapping,從而把 26*26*512 變成 13*13*2048。YOLO 中的檢測(cè)器位于擴(kuò)展后(expanded )的特征圖的上方,所以他能取得細(xì)粒度的特征信息,這提升了 YOLO 1% 的性能。

Multi-Scale Training

作者希望 YOLOv2 能健壯地運(yùn)行于不同尺寸的圖片之上,所以把這一想法用于訓(xùn)練模型中。

區(qū)別于之前的補(bǔ)全圖片的尺寸的方法,YOLOv2 每迭代幾次都會(huì)改變網(wǎng)絡(luò)參數(shù)。每 10 個(gè) Batch,網(wǎng)絡(luò)會(huì)隨機(jī)地選擇一個(gè)新的圖片尺寸,由于使用了下采樣參數(shù)是 32,所以不同的尺寸大小也選擇為 32 的倍數(shù) {320,352…..608},最小 320*320,最大 608*608,網(wǎng)絡(luò)會(huì)自動(dòng)改變尺寸,并繼續(xù)訓(xùn)練的過(guò)程。

這一政策讓網(wǎng)絡(luò)在不同的輸入尺寸上都能達(dá)到一個(gè)很好的預(yù)測(cè)效果,同一網(wǎng)絡(luò)能在不同分辨率上進(jìn)行檢測(cè)。當(dāng)輸入圖片尺寸比較小的時(shí)候跑的比較快,輸入圖片尺寸比較大的時(shí)候精度高,所以你可以在 YOLOv2 的速度和精度上進(jìn)行權(quán)衡。

下圖是在 voc2007 上的速度與精度

▌更快

YOLO 使用的是 GoogLeNet 架構(gòu),比 VGG-16 快,YOLO 完成一次前向過(guò)程只用 85.2 億次運(yùn)算,而 VGG-16 要 306.9 億次,但是 YOLO 精度稍低于 VGG-16。

Draknet19

YOLO v2 基于一個(gè)新的分類模型,有點(diǎn)類似于 VGG。YOLO v2 使用 3*3 的 filter,每次池化之后都增加一倍 Channels 的數(shù)量。YOLO v2 使用全局平均池化,使用 Batch Normilazation 來(lái)讓訓(xùn)練更穩(wěn)定,加速收斂,使模型規(guī)范化。

最終的模型–Darknet19,有 19 個(gè)卷積層和 5 個(gè) maxpooling 層,處理一張圖片只需要 55.8 億次運(yùn)算,在 ImageNet 上達(dá)到 72.9% top-1 精確度,91.2% top-5 精確度。

Training for classi?cation

在訓(xùn)練時(shí),把整個(gè)網(wǎng)絡(luò)在更大的448*448分辨率上Fine Turnning 10個(gè) epoches,初始學(xué)習(xí)率設(shè)置為0.001,這種網(wǎng)絡(luò)達(dá)到達(dá)到76.5%top-1精確度,93.3%top-5精確度。

▌更強(qiáng)

在訓(xùn)練的過(guò)程中,當(dāng)網(wǎng)絡(luò)遇到一個(gè)來(lái)自檢測(cè)數(shù)據(jù)集的圖片與標(biāo)記信息,那么就把這些數(shù)據(jù)用完整的 YOLO v2 loss 功能反向傳播這個(gè)圖片。當(dāng)網(wǎng)絡(luò)遇到一個(gè)來(lái)自分類數(shù)據(jù)集的圖片和分類標(biāo)記信息,只用整個(gè)結(jié)構(gòu)中分類部分的 loss 功能反向傳播這個(gè)圖片。

但是檢測(cè)數(shù)據(jù)集只有粗粒度的標(biāo)記信息,像“貓“、“ 狗”之類,而分類數(shù)據(jù)集的標(biāo)簽信息則更細(xì)粒度,更豐富。比如狗這一類就包括”哈士奇“”牛頭?!啊苯鹈贰暗鹊?。所以如果想同時(shí)在監(jiān)測(cè)數(shù)據(jù)集與分類數(shù)據(jù)集上進(jìn)行訓(xùn)練,那么就要用一種一致性的方法融合這些標(biāo)簽信息。

再者,用于分類的方法,大多是用 softmax layer 方法,softmax 意味著分類的類別之間要互相獨(dú)立的。而盲目地混合數(shù)據(jù)集訓(xùn)練,就會(huì)出現(xiàn)比如:檢測(cè)數(shù)據(jù)集的分類信息中”狗“這一分類,在分類數(shù)據(jù)集合中,就會(huì)有的不同種類的狗:“哈士奇”、“牛頭?!薄ⅰ敖鹈边@些分類,這兩種數(shù)據(jù)集之間的分類信息不相互獨(dú)立。所以使用一種多標(biāo)簽的模型來(lái)混合數(shù)據(jù)集,假設(shè)一個(gè)圖片可以有多個(gè)分類信息,并假定分類信息必須是相互獨(dú)立的規(guī)則可以被忽略。

Hierarchical classification

WordNet 的結(jié)構(gòu)是一個(gè)直接圖表(directed graph),而不是樹型結(jié)構(gòu)。因?yàn)檎Z(yǔ)言是復(fù)雜的,狗這個(gè)詞既屬于‘犬科’又屬于‘家畜’兩類,而‘犬科’和‘家畜’兩類在WordNet中則是同義詞,所以不能用樹形結(jié)構(gòu)。

作者希望根據(jù) ImageNet 中包含的概念來(lái)建立一個(gè)分層樹,為了建立這個(gè)分層樹,首先檢查 ImagenNet 中出現(xiàn)的名詞,再在 WordNet 中找到這些名詞,再找到這些名詞到達(dá)他們根節(jié)點(diǎn)的路徑(在這里設(shè)為所有的根節(jié)點(diǎn)為實(shí)體對(duì)象(physical object)。在 WordNet 中,大多數(shù)同義詞只有一個(gè)路徑,所以首先把這條路徑中的詞全部都加到分層樹中。接著迭代地檢查剩下的名詞,并盡可能少的把他們添加到分層樹上,添加的原則是取最短路徑加入到樹中。

為了計(jì)算某一結(jié)點(diǎn)的絕對(duì)概率,只需要對(duì)這一結(jié)點(diǎn)到根節(jié)點(diǎn)的整條路徑的所有概率進(jìn)行相乘。所以比如你想知道一個(gè)圖片是否是 Norfolk terrier 的概率,則進(jìn)行如下計(jì)算:

為了驗(yàn)證這一個(gè)方法,在 WordTree 上訓(xùn)練 Darknet19 的模型,使用 1000 類的 ImageNet 進(jìn)行訓(xùn)練,為了建立 WordtTree 1K,把所有中間詞匯加入到 WordTree 上,把標(biāo)簽空間從 1000 擴(kuò)大到了 1369。在訓(xùn)練過(guò)程中,如果有一個(gè)圖片的標(biāo)簽是“Norfolk terrier”,那么這個(gè)圖片還會(huì)獲得”狗“(dog)以及“哺乳動(dòng)物”(mammal)等標(biāo)簽??傊F(xiàn)在一張圖片是多標(biāo)記的,標(biāo)記之間不需要相互獨(dú)立。

如 Figure5 所示,之前的 ImageNet 分類是使用一個(gè)大 softmax 進(jìn)行分類。而現(xiàn)在,WordTree 只需要對(duì)同一概念下的同義詞進(jìn)行 softmax 分類。

使用相同的訓(xùn)練參數(shù),這種分層結(jié)構(gòu)的Darknet19達(dá)到71.9%top-1精度和90.4% top-5 精確度,精度只有微小的下降。

這種方法的好處:在對(duì)未知或者新的物體進(jìn)行分類時(shí),性能降低的很優(yōu)雅(gracefully)。比如看到一個(gè)狗的照片,但不知道是哪種種類的狗,那么就高置信度(confidence)預(yù)測(cè)是”狗“,而其他狗的種類的同義詞如”哈士奇“”牛頭?!啊苯鹈暗冗@些則低置信度。

Datasets combination with wordtree

用 WordTree 把數(shù)據(jù)集合中的類別映射到分層樹中的同義詞上,例如上圖 Figure 6,WordTree 混合 ImageNet 與 COCO。

Joint classification and detection

作者的目的是:訓(xùn)練一個(gè) Extremely Large Scale 檢測(cè)器。所以訓(xùn)練的時(shí)候使用 WordTree 混合了 COCO 檢測(cè)數(shù)據(jù)集與 ImageNet 中的 Top9000 類,混合后的數(shù)據(jù)集對(duì)應(yīng)的 WordTree 有 9418 個(gè)類。另一方面,由于 ImageNet 數(shù)據(jù)集太大了,作者為了平衡一下兩個(gè)數(shù)據(jù)集之間的數(shù)據(jù)量,通過(guò)過(guò)采樣(oversampling) COCO 數(shù)據(jù)集中的數(shù)據(jù),使 COCO 數(shù)據(jù)集與 ImageNet 數(shù)據(jù)集之間的數(shù)據(jù)量比例達(dá)到 1:4。

YOLO9000 的訓(xùn)練基于 YOLO v2 的構(gòu)架,但是使用 3 priors 而不是 5 來(lái)限制輸出的大小。當(dāng)網(wǎng)絡(luò)遇到檢測(cè)數(shù)據(jù)集中的圖片時(shí)則正常地反方向傳播,當(dāng)遇到分類數(shù)據(jù)集圖片的時(shí)候,只使用分類的 loss 功能進(jìn)行反向傳播。同時(shí)作者假設(shè) IOU 最少為 0.3。最后根據(jù)這些假設(shè)進(jìn)行反向傳播。

使用聯(lián)合訓(xùn)練法,YOLO9000 使用 COCO 檢測(cè)數(shù)據(jù)集學(xué)習(xí)檢測(cè)圖片中的物體的位置,使用 ImageNet 分類數(shù)據(jù)集學(xué)習(xí)如何對(duì)大量的類別中進(jìn)行分類。

為了評(píng)估這一方法,使用 ImageNet Detection Task 對(duì)訓(xùn)練結(jié)果進(jìn)行評(píng)估。

評(píng)估結(jié)果:

YOLO9000 取得 19.7 mAP。在未學(xué)習(xí)過(guò)的 156 個(gè)分類數(shù)據(jù)上進(jìn)行測(cè)試, mAP 達(dá)到 16.0。

YOLO9000 的 mAP 比 DPM 高,而且 YOLO 有更多先進(jìn)的特征,YOLO9000 是用部分監(jiān)督的方式在不同訓(xùn)練集上進(jìn)行訓(xùn)練,同時(shí)還能檢測(cè) 9000個(gè)物體類別,并保證實(shí)時(shí)運(yùn)行。

雖然 YOLO9000 對(duì)動(dòng)物的識(shí)別性能很好,但是對(duì)類別為“sungalsses”或者“swimming trunks”這些衣服或者裝備的類別,它的識(shí)別性能不是很好,見(jiàn) table 7。這跟數(shù)據(jù)集的數(shù)據(jù)組成有很大關(guān)系。

▌總結(jié)

YOLO v2 代表著目前最先進(jìn)物體檢測(cè)的水平,在多種監(jiān)測(cè)數(shù)據(jù)集中都要快過(guò)其他檢測(cè)系統(tǒng),并可以在速度與精確度上進(jìn)行權(quán)衡。

YOLO 9000 的網(wǎng)絡(luò)結(jié)構(gòu)允許實(shí)時(shí)地檢測(cè)超過(guò)9000種物體分類,這歸功于它能同時(shí)優(yōu)化檢測(cè)與分類功能。使用 WordTree 來(lái)混合來(lái)自不同的資源的訓(xùn)練數(shù)據(jù),并使用聯(lián)合優(yōu)化技術(shù)同時(shí)在 ImageNet 和 COCO 數(shù)據(jù)集上進(jìn)行訓(xùn)練,YOLO9000 進(jìn)一步縮小了監(jiān)測(cè)數(shù)據(jù)集與識(shí)別數(shù)據(jù)集之間的大小代溝。

YOLOv3

YOLOv3 在 Pascal Titan X 上處理 608x608 圖像速度可以達(dá)到 20FPS,在 COCO test-dev 上mAP@0.5達(dá)到 57.9%,與RetinaNet(FocalLoss論文所提出的單階段網(wǎng)絡(luò))的結(jié)果相近,并且速度快 4 倍.

YOLO v3 的模型比之前的模型復(fù)雜了不少,可以通過(guò)改變模型結(jié)構(gòu)的大小來(lái)權(quán)衡速度與精度。

速度對(duì)比如下:

YOLOv3 在實(shí)現(xiàn)相同準(zhǔn)確度下要顯著地比其它檢測(cè)方法快。時(shí)間都是在采用 M40 或 Titan X 等相同 GPU 下測(cè)量的。

簡(jiǎn)而言之,YOLOv3 的先驗(yàn)檢測(cè)(Prior detection)系統(tǒng)將分類器或定位器重新用于執(zhí)行檢測(cè)任務(wù)。他們將模型應(yīng)用于圖像的多個(gè)位置和尺度。而那些評(píng)分較高的區(qū)域就可以視為檢測(cè)結(jié)果。此外,相對(duì)于其它目標(biāo)檢測(cè)方法,我們使用了完全不同的方法。我們將一個(gè)單神經(jīng)網(wǎng)絡(luò)應(yīng)用于整張圖像,該網(wǎng)絡(luò)將圖像劃分為不同的區(qū)域,因而預(yù)測(cè)每一塊區(qū)域的邊界框和概率,這些邊界框會(huì)通過(guò)預(yù)測(cè)的概率加權(quán)。我們的模型相比于基于分類器的系統(tǒng)有一些優(yōu)勢(shì)。它在測(cè)試時(shí)會(huì)查看整個(gè)圖像,所以它的預(yù)測(cè)利用了圖像中的全局信息。與需要數(shù)千張單一目標(biāo)圖像的 R-CNN 不同,它通過(guò)單一網(wǎng)絡(luò)評(píng)估進(jìn)行預(yù)測(cè)。這令 YOLOv3 非常快,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。

改進(jìn)之處:

1.多尺度預(yù)測(cè) (類FPN)

2.更好的基礎(chǔ)分類網(wǎng)絡(luò)(類ResNet)和分類器 darknet-53,見(jiàn)下圖

3.分類器-類別預(yù)測(cè):

YOLOv3 不使用 Softmax 對(duì)每個(gè)框進(jìn)行分類,主要考慮因素有兩個(gè):

a.Softmax 使得每個(gè)框分配一個(gè)類別(得分最高的一個(gè)),而對(duì)于 Open Images這種數(shù)據(jù)集,目標(biāo)可能有重疊的類別標(biāo)簽,因此 Softmax不適用于多標(biāo)簽分類。

b.Softmax 可被獨(dú)立的多個(gè) logistic分類器替代,且準(zhǔn)確率不會(huì)下降。

c.分類損失采用 binary cross-entropy loss.

多尺度預(yù)測(cè)

每種尺度預(yù)測(cè) 3 個(gè) box, anchor 的設(shè)計(jì)方式仍然使用聚類,得到9個(gè)聚類中心,將其按照大小均分給 3 個(gè)尺度。

尺度1: 在基礎(chǔ)網(wǎng)絡(luò)之后添加一些卷積層再輸出box信息。

尺度2: 從尺度1中的倒數(shù)第二層的卷積層上采樣(x2)再與最后一個(gè) 16x16 大小的特征圖相加,再次通過(guò)多個(gè)卷積后輸出 box 信息,相比尺度1變大兩倍.

尺度3: 與尺度2類似,使用了 32x32 大小的特征圖

基礎(chǔ)網(wǎng)絡(luò) Darknet-53

darknet-53與 ResNet-101 或 ResNet-152 準(zhǔn)確率接近,但速度更快,對(duì)比如下:

檢測(cè)結(jié)構(gòu)如下:

YOLOv3 在 mAP@0.5 及小目標(biāo) APs 上具有不錯(cuò)的結(jié)果,但隨著 IOU的增大,性能下降,說(shuō)明 YOLOv3 不能很好地與 ground truth 切合.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1079

    瀏覽量

    40375
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • 網(wǎng)格
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    15990

原文標(biāo)題:從YOLOv1到Y(jié)OLOv3,目標(biāo)檢測(cè)的進(jìn)化之路

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【飛凌嵌入式OK3576-C開發(fā)板體驗(yàn)】RKNN神經(jīng)網(wǎng)絡(luò)-YOLO目標(biāo)檢測(cè)

    的情況,如下圖所示: 5.5、使用此yolo算法識(shí)別其他動(dòng)物 圖片不是很清晰,識(shí)別不是很準(zhǔn)確。但換清晰圖片沒(méi)任何問(wèn)題。
    發(fā)表于 10-10 09:33

    使用OpenVINO C# API部署YOLO-World實(shí)現(xiàn)實(shí)時(shí)開放詞匯對(duì)象檢測(cè)

    YOLO-World是一個(gè)融合了實(shí)時(shí)目標(biāo)檢測(cè)與增強(qiáng)現(xiàn)實(shí)(AR)技術(shù)的創(chuàng)新平臺(tái),旨在將現(xiàn)實(shí)世界與數(shù)字世界無(wú)縫對(duì)接。該平臺(tái)以YOLO(You Only Look Once)算法為核心實(shí)現(xiàn)
    的頭像 發(fā)表于 08-30 16:27 ?522次閱讀
    使用OpenVINO C# API部署<b class='flag-5'>YOLO</b>-World<b class='flag-5'>實(shí)現(xiàn)</b>實(shí)時(shí)開放詞匯對(duì)象檢測(cè)

    智慧園區(qū)視頻監(jiān)控分析系統(tǒng) YOLO

    智慧園區(qū)視頻監(jiān)控分析系統(tǒng)基本建設(shè)的持續(xù)推進(jìn),云計(jì)算技術(shù)、互聯(lián)網(wǎng)大數(shù)據(jù)、物聯(lián)網(wǎng)技術(shù)、人工智能技術(shù)等現(xiàn)代信息技術(shù)的深層次運(yùn)用,智慧園區(qū)視頻監(jiān)控分析系統(tǒng)發(fā)展趨勢(shì)革新的主要每日任務(wù)與現(xiàn)代信息技術(shù)的大力支持緊密聯(lián)系。智能化園區(qū)基本建設(shè)通常包含經(jīng)營(yíng)管理處、園區(qū)安全工作、耗能管理方法、消防管理、突發(fā)事件應(yīng)對(duì)業(yè)務(wù)流程系統(tǒng)、園區(qū)業(yè)務(wù)、數(shù)據(jù)信息、頁(yè)面集成化,完成園區(qū)經(jīng)營(yíng)數(shù)據(jù)可視
    的頭像 發(fā)表于 07-08 08:40 ?245次閱讀
    智慧園區(qū)視頻監(jiān)控分析系統(tǒng) <b class='flag-5'>YOLO</b>

    使用esp-dl中的example量化我的YOLO模型時(shí),提示ValueError: current model is not supported by esp-dl錯(cuò)誤,為什么?

    使用esp-dl中的example量化我的YOLO模型時(shí),提示:ValueError: current model is not supported by esp-dl 錯(cuò)誤, 請(qǐng)看我的代碼和模型
    發(fā)表于 06-28 06:47

    OpenVINO? C# API部署YOLOv9目標(biāo)檢測(cè)和實(shí)例分割模型

    YOLOv9模型是YOLO系列實(shí)時(shí)目標(biāo)檢測(cè)算法中的最新版本,代表著該系列在準(zhǔn)確性、速度和效率方面的又一次重大飛躍。
    的頭像 發(fā)表于 04-03 17:35 ?701次閱讀
    OpenVINO? C# API部署YOLOv9目標(biāo)檢測(cè)和實(shí)例分割模型

    縱觀全局:YOLO助力實(shí)時(shí)物體檢測(cè)原理及代碼

    YOLO 流程的最后一步是將邊界框預(yù)測(cè)與類別概率相結(jié)合,以提供完整的檢測(cè)輸出。每個(gè)邊界框的置信度分?jǐn)?shù)由類別概率調(diào)整,確保檢測(cè)既反映邊界框的準(zhǔn)確性,又反映模型對(duì)對(duì)象類別的置信度。
    的頭像 發(fā)表于 03-30 14:43 ?2154次閱讀

    OpenVINO工具包部署YOLO9模型實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)

    YOLOv9引入了可編程梯度信息 (PGI) 和廣義高效層聚合網(wǎng)絡(luò) (GELAN) 等開創(chuàng)性技術(shù),不僅增強(qiáng)了模型的學(xué)習(xí)能力,還確保了在整個(gè)檢測(cè)過(guò)程中保留關(guān)鍵信息,從而實(shí)現(xiàn)了卓越的準(zhǔn)確性和性能。
    的頭像 發(fā)表于 03-18 11:38 ?1053次閱讀
    OpenVINO工具包部署<b class='flag-5'>YOLO</b>9模型<b class='flag-5'>實(shí)現(xiàn)</b>實(shí)時(shí)目標(biāo)檢測(cè)

    【EASY EAI Nano】RV1126實(shí)時(shí)讀取攝像頭并進(jìn)行yolo檢測(cè)顯示

    實(shí)現(xiàn)了三個(gè)并行模塊,分別是 攝像頭讀取,使用opencv轉(zhuǎn)換到適合大小 yolo檢測(cè) 托管到Qt進(jìn)行現(xiàn)實(shí) 檢測(cè)的DEMO從每幀10次改到每幀2次,可以看到還是具備一定實(shí)時(shí)性。 代碼:倉(cāng)庫(kù)
    發(fā)表于 01-14 18:53

    深入淺出Yolov3和Yolov4

    Yolov3是目標(biāo)檢測(cè)Yolo系列非常非常經(jīng)典的算法,不過(guò)很多同學(xué)拿到Y(jié)olov3或者Yolov4的cfg文件時(shí),并不知道如何直觀的可視化查看網(wǎng)絡(luò)結(jié)構(gòu)。
    的頭像 發(fā)表于 01-11 10:42 ?724次閱讀
    深入淺出Yolov3和Yolov4

    在英特爾AI開發(fā)板上用OpenVINO NNCF優(yōu)化YOLOv7

    YOLO代表“You Only Look Once”,它是一種流行的實(shí)時(shí)物體檢測(cè)算法系列。最初的YOLO物體檢測(cè)器于2016年首次發(fā)布。從那時(shí)起,YOLO的不同版本和變體被提出,每個(gè)版本和變體都顯著
    的頭像 發(fā)表于 01-05 09:29 ?671次閱讀
    在英特爾AI開發(fā)板上用OpenVINO NNCF優(yōu)化YOLOv7

    基于YOLO技術(shù)的植物檢測(cè)與計(jì)數(shù)

    利用Roboflow平臺(tái)對(duì)數(shù)據(jù)進(jìn)行有效的管理和標(biāo)注。對(duì)于植物檢測(cè),使用實(shí)時(shí)目標(biāo)檢測(cè)能力強(qiáng)的YOLO方法。YOLO通過(guò)將輸入圖像劃分為網(wǎng)格并預(yù)測(cè)每個(gè)網(wǎng)格單元的邊界框和類別概率,在不犧牲精度的情況下實(shí)現(xiàn)了令人印象深刻的檢測(cè)速度。
    的頭像 發(fā)表于 12-12 09:41 ?793次閱讀
    基于<b class='flag-5'>YOLO</b>技術(shù)的植物檢測(cè)與計(jì)數(shù)

    怎樣使用YOLOv8構(gòu)建目標(biāo)計(jì)數(shù)GUI呢?

    標(biāo)檢測(cè)是在圖片或視頻中定位物體的過(guò)程。其中一個(gè)著名的目標(biāo)檢測(cè)框架是YOLO(You Only Look Once)。
    的頭像 發(fā)表于 11-30 11:03 ?723次閱讀
    怎樣使用YOLOv8構(gòu)建目標(biāo)計(jì)數(shù)GUI呢?

    YOLOV7網(wǎng)絡(luò)架構(gòu)解讀

    繼美團(tuán)發(fā)布YOLOV6之后,YOLO系列原作者也發(fā)布了YOLOV7。
    的頭像 發(fā)表于 11-29 10:00 ?1741次閱讀
    YOLOV7網(wǎng)絡(luò)架構(gòu)解讀

    目標(biāo)檢測(cè)算法YOLO的發(fā)展史和原理

    大家或許知道,首字母縮寫YOLO在英文語(yǔ)境下較為流行的含義,即You Only Live Once,你只能活一次。我們今天要介紹的YOLO卻有著與前者不一樣的含義。在算法的世界中,YOLO寓意You Only Look Once
    的頭像 發(fā)表于 11-18 10:33 ?5596次閱讀
    目標(biāo)檢測(cè)算法<b class='flag-5'>YOLO</b>的發(fā)展史和原理

    Linux內(nèi)核slab性能優(yōu)化的核心思想

    今天分享一篇內(nèi)存性能優(yōu)化的文章,文章用了大量精美的圖深入淺出地分析了Linux內(nèi)核slab性能優(yōu)化的核心思想,slab是Linux內(nèi)核小對(duì)象內(nèi)存分配最重要的算法,文章分析了內(nèi)存分配的各種性能問(wèn)題(在
    的頭像 發(fā)表于 11-13 11:45 ?584次閱讀
    Linux內(nèi)核slab性能優(yōu)化的<b class='flag-5'>核心思想</b>