YOLO目標檢測模型原理介紹

YOLO-v1介紹

YOLO是一個端到端的目標檢測算法,不須要預先提取region proposal(RCNN目標檢測系列),經過一個網絡就能夠輸出:類別,置信度,座標位置,檢測速度很快,不過,定位精度相對低些,特別是密集型小目標。算法

圖片描述

YOLO將圖像resize到448x448做爲輸入,輸出7x7x30,即:將圖片劃分爲7x7,每一個單元格獨立檢測。這裏須要注意,不是那種滑動窗口將每一個單元格都輸入到網絡中進行預測,這裏的劃分只是物體中心點位置的劃分之用(劃分越多越準確),物體的中心落在哪一個單元格,就由那個單元格負責預測。說完7x7咱們再說下另外一個維度30,30=(2*5=20),其中「2:每一個單元格預測數量(box數量)」,「5:(x,y,w,h,score)」,「20:模型能夠預測20個種類」。後端

clipboard.png

YOLO-v1訓練

模型首先會將ImageNet做爲訓練集預訓練模型,最終達到88%精度,而後使用遷移學習將預訓練的模型應用到當前標註的訓練集進行訓練。模型輸出5維信息(x,y,w,h,score),使用Leaky Relu做爲激活函數,全鏈接層後添加Dropout層防止過擬合。在獲得輸出值以後,咱們須要計算每一個box與ground true的Iou值,而後經過非極大值抑制篩選box。網絡

YOLO-v1損失函數

損失函數包含三部分分別是:座標損失,置信度損失(7x7x2),類別損失(7x7x20)。
座標損失:函數

clipboard.png

咱們使用SSE損失函數(就是MSE損失函數的累加版本),如圖所示咱們在「w,h」中加了根號,加根號的緣由是,「w,h」的損失在大框和小框之間「權重」應該不一樣。由於,對應圖像中較大的物體而言,box有些偏移通常並不會影響預測結果。可是對應小物體而言,一樣的偏移可能會脫離預測目標。
置信度損失:學習

clipboard.png

如圖所示,損失函數分爲兩部分:有物體,沒有物體,其中沒有物體損失部分還增長了權重係數。添加權重係數的緣由是,對於一幅圖像,通常而言大部份內容是不包含待檢測物體的,這樣會致使沒有物體的計算部分貢獻會大於有物體的計算部分,這會致使網絡傾向於預測單元格不含有物體。所以,咱們要減小沒有物體計算部分的貢獻權重,好比取值爲:0.5。
類別損失:spa

clipboard.png

當有物體的中心點落在單元格中,此單元格就負責預測該物體。.net

YOLO-v2改進

clipboard.png

  • 使用批標準化:隨着神經網絡的訓練,網絡層的輸入分佈會發生變更,逐漸向激活函數取值兩端靠攏,如:sigmoid激活函數,此時會進入飽和狀態,梯度更新緩慢,對輸入變更不敏感,甚至梯度消失致使模型難以訓練。BN,在網絡層輸入激活函數輸入值以前加入,能夠將分佈拉到均值爲0,標準差爲1的正態分佈,從而使激活函數處於對輸入值敏感的區域,從而加快模型訓練。此外,BN還能起到相似dropout的正則化做用,因爲咱們會有‘強拉’操做,因此對初始化要求沒有那麼高,可使用較大的學習率。
  • High Resolution Classifier:在介紹YOLO-v1的時候咱們說到,模型須要先在ImageNet上預訓練模型,所以,此時圖像輸入爲224x224,使用遷移學習訓練後咱們的圖像輸入是448x448,所以模型須要適應圖像分辨率的改變。在YOLO-v2中,咱們在預訓練模型中先224x224訓練160個epoch,而後將輸入調整到448x448,再跑10個epoch,也就是在ImageNet數據集中兩種分辨率跑兩次。YOLO大神做者實現代表,這樣操做能夠提升4%的map。
  • Convolutional With Anchor Boxes:
    1,加入anchor boxes,提升box數量。
    2,刪除全鏈接層和最後一個池化層,保留更高分辨率特徵。
    3,用416x416代替448x448輸入大小,使特徵圖有奇數大小的高和寬。
  • Dimension Clusters:使用k-means的方式對訓練集的bounding boxes作聚類,可是該方法存在不一樣尺寸的box偏差權重不一樣,咱們但願偏差與尺寸沒有關係,所以經過IOU定義以下函數:

clipboard.png

  • Multi-Scale Training:訓練階段,採用32的倍數做爲圖像尺寸動態輸入,如【320,352。。。608】。這種網絡訓練方式使得相同網絡能夠對不一樣分辨率的圖像作detection。

圖片描述

  • 使用Darknet-19做爲後端網絡:

clipboard.png

YOLO-v3

YOLO-v3結構圖以來自木盞,表示感謝,也歡迎關注他的博客。對象

圖片描述

DBL:指Darknetconv2d_BN_Leaky。
resn:指:n表明數字,有res1,res2, … ,res8等等,表示這個res_block裏含有多少個res_unit,使用殘差結構可讓網絡更深。
concat:張量拼接。將darknet中間層和後面的某一層的上採樣進行拼接。拼接的操做和殘差層add的操做是不同的,拼接會擴充張量的維度,而add只是直接相加不會致使張量維度的改變。blog

後端網絡使用darknet-53:圖片

圖片描述

咱們發現,在YOLO-v3網絡中沒有池化層和全鏈接層,那麼張量尺寸的變化是經過改變卷積核步長來實現。同YOLO-v2同樣,輸出尺寸爲輸入尺寸的1/32,即:通常要求輸入圖像尺寸是32的倍數。

類別預測由softmax改成logistic(使用sigmoid):用於處理預測物體之間存在包含關係問題,解決多標籤對象支持。好比woman和person,softmax輸出:person,logistic輸出二者。

clipboard.png

使用多尺度特徵預測物體:

clipboard.png

上圖是YOLO-v3COCO數據集上使用聚類獲得的9種先驗框,一個表明寬度一個表明高度。在不一樣的感覺野中使用不一樣的先驗框。若是先驗框不是最佳的,即便超過預設定的閾值,也不會進行預測。logistic迴歸用來從9個先驗框中找到最佳的那個。

補充:Iou計算

圖片描述

總結

YOLO好很差,咱們就以一張圖做爲總結吧:

圖片描述

祝你們2018年聖誕節快樂!

相關文章
相關標籤/搜索