yolo模型的特點與各版本性能對比


目錄

一、YOLOV1

二、YOLOV2

二、YOLOV3

 

正文

目前,基於深度學習的目標檢測算法大致可以分為兩大流派:
1.兩階段(two-stage)算法:先產生候選區域然后再進行CNN分類(RCNN系列);
2.單階段(one-stage)算法:直接對輸入圖像應用算法並輸出類別和相應的定位(YOLO系列);

yolo是繼RCNN,fast-RCNN 和 faster-RCNN之后,Ross Girshick 針對 DL 目標檢測速度問題提出的另外一種框架。目前已經更新到第三版,

 官網地址:http://pjreddie.com/darknet/yolo/ ,接下來逐一介紹下。

一、YOLOV1

 1、基本思路:利用整張圖作為網絡的輸入,直接在輸出層回歸bounding box(邊界框)的位置及其所屬的類別。

 2、實現方法:將一幅圖像分成 SxS 個網格(grid cell),如果某個 object 的中心落在這個網格中,則這個網格就負責預測這個 object。 

     

 

每個網格要預測 B 個 bounding box,每個 bounding box 除了要回歸自身的位置之外,還要附帶預測一個 confidence 值。

這個 confidence 代表了所預測的 box 中含有 object 的置信度和這個 box 預測的有多准這兩重信息,其值是這樣計算的:  

 其中如果有 object 落在一個 grid cell 里,第一項取 1,否則取 0。 第二項是預測的 bounding box 和實際的 groundtruth 之間的 IoU 值。

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

注意:class 信息是針對每個網格的,confidence 信息是針對每個 bounding box 的。舉例說明: 在 PASCAL VOC 中,圖像輸入為 448x448,取 S=7,B=2,一共有20 個類別(C=20),則輸出就是 7x7x30 的一個 tensor。

 

 

在 test 的時候,每個網格預測的 class 信息和 bounding box 預測的 confidence信息相乘,就得到每個 bounding box 的 class-specific confidence score:

 

 

等式左邊第一項就是每個網格預測的類別信息,第二、三項就是每個 bounding box 預測的 confidence。這個乘積即 encode 了預測的 box 屬於某一類的概率,也有該 box 准確度的信息。

在 test 的時候,每個網格預測的 class 信息和 bounding box 預測的 confidence信息相乘,就得到每個 bounding box 的 class-specific confidence score:

 

 

等式左邊第一項就是每個網格預測的類別信息,第二、三項就是每個 bounding box 預測的 confidence。這個乘積即 encode 了預測的 box 屬於某一類的概率,也有該 box 准確度的信息。得到每個 box 的 class-specific confidence score 以后,設置閾值,濾掉得分低的 boxes,對保留的 boxes 進行 NMS 處理,就得到最終的檢測結果。

注:

>由於輸出層為全連接層,因此在檢測時,YOLO 訓練模型只支持與訓練圖像相同的輸入分辨率。

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

3、實現細節:

每個 grid 有 30 維,這 30 維中,8 維是回歸 box 的坐標,2 維是 box的 confidence,還有 20 維是類別。 

其中坐標的 x, y 用對應網格的 offset 歸一化到 0-1 之間,w, h 用圖像的 width 和 height 歸一化到 0-1 之間。

在實現中,最主要的就是怎么設計損失函數,讓這個三個方面得到很好的平衡。作者簡單粗暴的全部采用了 sum-squared error loss 來做這件事。

 存在問題:

該方法存在以下幾個問題: 

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

>如果一個網格中沒有 object(一幅圖中這種網格很多),那么就會將這些網格中的 box 的 confidence push 到 0,相比於較少的有 object 的網格,這種做法是 overpowering 的,這會導致網絡不穩定甚至發散。

 

解決辦法:

>更重視8維的坐標預測,給這些損失前面賦予更大的 loss weight, 記為在 pascal VOC 訓練中取 5。

>對沒有 object 的 box 的 confidence loss,賦予小的 loss weight,記為在 pascal VOC 訓練中取 0.5。

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

>對不同大小的 box 預測中,相比於大 box 預測偏一點,小 box 預測偏一點肯定更不能被忍受的。而 sum-square error loss 中對同樣的偏移 loss 是一樣。

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

一個網格預測多個 box,希望的是每個 box predictor 專門負責預測某個 object。具體做法就是看當前預測的 box 與 ground truth box 中哪個 IoU 大,就負責哪個。這種做法稱作 box predictor 的 specialization。

最后整個的損失函數如下所示: 

 

這個損失函數中: 

  • 只有當某個網格中有 object 的時候才對 classification error 進行懲罰。

  • 只有當某個 box predictor 對某個 ground truth box 負責的時候,才會對 box 的 coordinate error 進行懲罰,而對哪個 ground truth box 負責就看其預測值和 ground truth box 的 IoU 是不是在那個 cell 的所有 box 中最大。

其他細節,例如使用激活函數使用 leak RELU,模型用 ImageNet 預訓練等等,在這里就不一一贅述了。

注:

*YOLO 方法模型訓練依賴於物體識別標注數據,因此,對於非常規的物體形狀或比例,YOLO 的檢測效果並不理想。

*YOLO 采用了多個下采樣層,網絡學到的物體特征並不精細,因此也會影響檢測效果。

* YOLO 的損失函數中,大物體 IOU 誤差和小物體 IOU 誤差對網絡訓練中 loss 貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對於小物體,小的 IOU 誤差也會對網絡優化過程造成很大的影響,從而降低了物體檢測的定位准確性。

 

二、YOLOV2

    建立在YOLOv1的基礎上,經過Joseph Redmon等的改進,YOLOv2和YOLO9000算法在2017年CVPR上被提出,重點解決YOLOv1召回率和定位精度方面的誤差。在提出時,YOLOv2在多種監測數據集中都要快過其他檢測系統,並可以在速度與精確度上進行權衡。

   文章提出了一種新的訓練方法–聯合訓練算法。這種算法可以把這兩種的數據集混合到一起。使用一種分層的觀點對物體進行分類,用巨量的分類數據集數據來擴充檢測數據集,從而把兩種不同的數據集混合起來。基本思路就是:同時在檢測數據集和分類數據集上訓練物體檢測器(Object Detectors ),用監測數據集的數據學習物體的准確位置,用分類數據集的數據來增加分類的類別量、提升魯棒性。YOLO9000 就是使用聯合訓練算法訓練出來的,他擁有 9000 類的分類信息,這些分類信息學習自ImageNet分類數據集,而物體位置檢測則學習自 COCO 檢測數據集。

  YOLOV2着重改善 recall,提升定位的准確度,同時保持分類的准確度。

 

    改進方法1:Batch Normalization

    使用 Batch Normalization 對網絡進行優化,讓網絡提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴。通過對 YOLO 的每一個卷積層增加 Batch Normalization,最終使得 mAP 提高了 2%,同時還使模型正則化。使用 Batch Normalization 可以從模型中去掉 Dropout,而不會產生過擬合。

   改進方法2:High resolution classifier

   YOLO 從 224*224 增加到了 448*448,這就意味着網絡需要適應新的輸入分辨率。為了適應新的分辨率,YOLO v2 的分類網絡以 448*448 的分辨率先在 ImageNet上進行微調,微調 10 個 epochs,讓網絡有時間調整濾波器(filters),好讓其能更好的運行在新分辨率上,還需要調優用於檢測的 Resulting Network。最終通過使用高分辨率,mAP 提升了 4%。

   改進方法3:Convolution with anchor boxes

   YOLO 一代包含有全連接層,從而能直接預測 Bounding Boxes 的坐標值。  Faster R-CNN 的方法只用卷積層與 Region Proposal Network 來預測 Anchor Box 偏移值與置信度,而不是直接預測坐標值。作者發現通過預測偏移量而不是坐標值能夠簡化問題,讓神經網絡學習起來更容易。YOLOv2 去掉了全連接層,使用 Anchor Boxes 來預測 Bounding Boxes。同時去掉了網絡中一個池化層,這讓卷積層的輸出能有更高的分辨率。收縮網絡讓其運行在 416*416 而不是 448*448。由於圖片中的物體都傾向於出現在圖片的中心位置,特別是那種比較大的物體,所以有一個單獨位於物體中心的位置用於預測這些物體。YOLO 的卷積層采用 32 這個值來下采樣圖片,所以通過選擇 416*416 用作輸入尺寸最終能輸出一個 13*13 的特征圖。 使用 Anchor Box 會讓精確度稍微下降,但用了它能讓 YOLO 能預測出大於一千個框,同時 recall 達到88%,mAP 達到 69.2%。

     改進方法4:Dimension clusters

之前 Anchor Box 的尺寸是手動選擇的,所以尺寸還有優化的余地。 為了優化,在訓練集的 Bounding Boxes 上跑一下 k-means聚類,來找到一個比較好的值。

如果我們用標准的歐式距離的 k-means,尺寸大的框比小框產生更多的錯誤。因為我們的目的是提高 IOU 分數,這依賴於 Box 的大小,所以距離度量的使用: 

 

 

 

  改進方法4:Direct location prediction

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

 

因為使用了限制讓數值變得參數化,也讓網絡更容易學習、更穩定。Dimension clusters和Direct location prediction,使 YOLO 比其他使用 Anchor Box 的版本提高了近5%。

   改進方法5:Fine- grained Features

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

    改進方法6:Multi-scale Training

區別於之前的補全圖片的尺寸的方法,YOLOv2 每迭代幾次都會改變網絡參數。每 10 個 Batch,網絡會隨機地選擇一個新的圖片尺寸,由於使用了下采樣參數是  32,所以不同的尺寸大小也選擇為 32 的倍數 {320,352…..608},最小 320*320,最大 608*608,網絡會自動改變尺寸,並繼續訓練的過程。這一政策讓網絡在不同的輸入尺寸上都能達到一個很好的預測效果,同一網絡能在不同分辨率上進行檢測。當輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在 YOLOv2 的速度和精度上進行權衡。

 

 相比於YOLOv1,YOLOv2可以更快,更強。

YOLO 使用的是 GoogLeNet 架構,比 VGG-16 快,YOLO 完成一次前向過程只用 85.2 億次運算,而 VGG-16 要 306.9 億次。

YOLO v2 基於一個新的分類模型darknet19。YOLO v2 使用 3*3 的 filter,每次池化之后都增加一倍 Channels 的數量。YOLO v2 使用全局平均池化,使用 Batch Normilazation 來讓訓練更穩定,加速收斂,使模型規范化。最終的模型Darknet19,有 19 個卷積層和 5 個 maxpooling 層,處理一張圖片只需要 55.8 億次運算,在 ImageNet 上達到 72.9% top-1 精確度,91.2% top-5 精確度。在訓練時,如果把整個網絡在更大的448*448分辨率上Fine Turnning 10個 epoches,初始學習率設置為0.001,這種網絡達到達到76.5%top-1精確度,93.3%top-5精確度。

 

二、YOLOV3

      YOLOv3 在 Pascal Titan X 上處理 608x608 圖像速度可以達到 20FPS,在 COCO test-dev 上 mAP@0.5 達到 57.9%,與RetinaNet(FocalLoss論文所提出的單階段網絡)的結果相近,並且速度快 4 倍.模型比之前的模型復雜了不少,可以通過改變模型結構的大小來權衡速度與精度。

 

 YOLOv3 的先驗檢測(Prior detection)系統將分類器或定位器重新用於執行檢測任務。他們將模型應用於圖像的多個位置和尺度。而那些評分較高的區域就可以視為檢測結果。此外,相對於其它目標檢測方法,我們使用了完全不同的方法。我們將一個單神經網絡應用於整張圖像,該網絡將圖像划分為不同的區域,因而預測每一塊區域的邊界框和概率,這些邊界框會通過預測的概率加權。我們的模型相比於基於分類器的系統有一些優勢。它在測試時會查看整個圖像,所以它的預測利用了圖像中的全局信息。與需要數千張單一目標圖像的 R-CNN 不同,它通過單一網絡評估進行預測。這令 YOLOv3 非常快,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。

     改進方法1:多尺度預測 (類FPN)

每種尺度預測 3 個 box, anchor 的設計方式仍然使用聚類,得到9個聚類中心,將其按照大小均分給 3 個尺度

  • 尺度1: 在基礎網絡之后添加一些卷積層再輸出box信息

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

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

     改進方法2:更好的基礎分類網絡darknet53

         darknet-53 與 ResNet-101 或 ResNet-152 准確率接近,但速度更快,

     

      檢測網絡:

 

        YOLOv3 在 mAP@0.5 及小目標 APs 上具有不錯的結果,但隨着 IOU的增大,性能下降,說明 YOLOv3 不能很好地與 ground truth 切合.

     改進方法3:分類器-類別預測

         不使用 Softmax 對每個框進行分類,主要考慮因素有:

  1. Softmax 使得每個框分配一個類別(得分最高的一個),而對於 Open Images這種數據集,目標可能有重疊的類別標簽,因此 Softmax不適用於多標簽分類。
  2. Softmax 可被獨立的多個 logistic 分類器替代,且准確率不會下降。 
  3. 分類損失采用 binary cross-entropy loss         若要參考其它網絡,可訪問該鏈接:https://blog.csdn.net/f290131665/article/details/81012556


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM