深度學習目標檢測之 YOLO v1

這是繼 RCNN,fast-RCNN 和 faster-RCNN 之后,rbg(RossGirshick)針對DL目標檢測速度問題提出的另外一種框架。YOLO V1 增強版本GPU中能跑45fps,簡化版本155fps。

  • 論文名: 《You Only Look Once:Unified, Real-Time Object Detection》
  • 論文地址:https://arxiv.org/pdf/1506.02640v5.pdf
  • 代碼:https://github.com/pjreddie/darknet

1. YOLO的核心思想

YOLO的核心思想就是利用整張圖作為網絡的輸入,直接在輸出層回歸bounding box的位置和bounding box所屬的類別。

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

2.YOLO的實現方法

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

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

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

Bbox置信度=P(Object)?IOUpredtruthBbox置信度 = P(Object) \ast IOU_{pred}^{truth} Bbox=P(Object)?IOUpredtruth?

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

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

注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的。

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

整個網絡結構如下圖所示:

在test的時候,每個網格預測的class信息和bounding box預測的confidence信息相乘,就得到每個bounding box的class-specific confidence score:
Pr(Classi∣Object)?Pr(Object)?IOUpredtruth=Pr(Classi)?IOUpredtruthPr(Class_{i}|Object) \ast Pr(Object) \ast IOU_{pred}^{truth} = Pr(Class_{i}) \ast IOU_{pred}^{truth} Pr(Classi?Object)?Pr(Object)?IOUpredtruth?=Pr(Classi?)?IOUpredtruth?

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

得到每個box的class-specific confidence score以后,設置閾值,濾掉得分低的 boxes,對保留的 boxes 進行NMS處理,就得到最終的檢測結果。

注意:

  • 每個grid有30維,這30維中,8維是回歸box的坐標,2維是box的confidence,還有20維是類別。
  • 其中坐標的x,y用對應網格的offset歸一化到0-1之間,w,h用圖像的width和height歸一化到0-1之間

簡單的概括就是:

(1) 給個一個輸入圖像,首先將圖像劃分成7*7的網格

(2) 對于每個網格,我們都預測2個邊框(包括每個邊框是目標的置信度以及每個邊框區域在多個類別上的概率)

(3) 根據上一步可以預測出772個目標窗口,然后根據閾值去除可能性比較低的目標窗口,最后NMS去除冗余窗口即可

損失函數

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

  • 第一,8維的localization error和20維的classification error同等重要顯然是不合理的;
  • 第二,如果一個網格中沒有object(一幅圖中這種網格很多),那么就會將這些網格中的box的confidence push到0,相比于較少的有object的網格,這種做法是overpowering的,這會導致網絡不穩定甚至發散。

解決辦法:

  • 更重視8維的坐標預測,給這些損失前面賦予更大的loss weight, 記為 λcoord\lambda_{coord}λcoord? 在pascal VOC訓練中取5。
  • 對沒有object的box的confidence loss,賦予小的loss weight,記為λnoobj\lambda_{noobj}λnoobj?在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。

最后整個的損失函數如下所示:
在這里插入圖片描述
損失由三部分組成,分別是:坐標預測損失、置信度預測損失、類別預測損失。

使用的是差方和誤差。需要注意的是,w和h在進行誤差計算的時候取的是它們的平方根,原因是對不同大小的bounding box預測中,相比于大bounding box預測偏一點,小box預測偏一點更不能忍受。而差方和誤差函數中對同樣的偏移loss是一樣。 為了緩和這個問題,作者用了一個比較取巧的辦法,就是將bounding box的w和h取平方根代替原本的w和h。

定位誤差比分類誤差更大,所以增加對定位誤差的懲罰,使 λcoord=5λ_{coord}=5λcoord?=5

在每個圖像中,許多網格單元不包含任何目標。訓練時就會把這些網格里的框的“置信度”分數推到零,這往往超過了包含目標的框的梯度。從而可能導致模型不穩定,訓練早期發散。因此要減少了不包含目標的框的置信度預測的損失,使 λnoobj=0.5λ_{noobj}=0.5λnoobj?=0.5

1iobj1_{i}^{obj}1iobj? 表示網格 i 中存在對象。
1ijobj1_{ij}^{obj}1ijobj? 表示 網格 i 的第 j 個 Bbox 中存在對象。
1ijnoobj1_{ij}^{noobj}1ijnoobj?表示網格 i 的第 j 個 Bbox 中不存在對象。

這個損失函數中:

  • 只有當某個網格中有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可以每秒處理 45 張圖像;YOLO的極速版本每秒可以處理150幀圖像。這就意味著 YOLO 可以以小于 25 毫秒延遲,實時地處理視頻。對于欠實時系統,在準確率保證的情況下,YOLO速度快于其他方法。
  • YOLO 實時檢測的平均精度是其他實時監測系統的兩倍。
  • 遷移能力強,能運用到其他的新的領域(比如藝術品目標檢測)。

YOLO的缺點

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

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

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

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

  • 由于損失函數的問題,定位誤差是影響檢測效果的主要原因。尤其是大小物體的處理上,還有待加強。

  • YOLO方法模型訓練依賴于物體識別標注數據,因此,對于非常規的物體形狀或比例,YOLO的檢測效果并不理想。同一類物體出現的新的不常見的長寬比和其他情況時,泛化能力偏弱。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453742.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編程珠璣番外篇

1.Plan 9 的八卦 在 Windows 下喜歡用 FTP 的同學抱怨 Linux 下面沒有如 LeapFTP 那樣的方便的工具. 在蘋果下面用慣了 Cyberduck 的同學可能也會抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻煩的事情. 其實一點都不麻煩, 因為在 LINUX 系統上壓根就不需要用 FTP. 為什么呢? 因…

BT下載原理分析

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 BitTorrent協議。 BT全名為BitTorrent,是一個p2p軟件,你在下載download的同時,也在為其他用戶提供上傳upload,因為大家是“互相幫助”,所以不會隨著用戶數的增加而…

表格列求和_excel表格制作,Excel表格的基本操作,包含制作一個表格10方面的知識...

創建表格,插入與刪除一行一列或多行多行,一次移動一行一列或多行多列,拆分與合并單元格,單元格內換行,表格求和與求平均值是Excel表格的基本操作;除此之外,Excel表格的基本操作還包括調整行高列…

深度學習之 FPN (Feature Pyramid Networks)

論文題目:Feature Pyramid Networks for Object Detection論文鏈接:https://arxiv.org/abs/1612.03144論文代碼:Caffe版本 https://github.com/unsky/FPN 《Feature Pyramid Networks for Object Detection》這篇論文主要解決的問題是目標檢…

ISLR—第二章 Statistical Learning

Statistical Learning Y 和X的關系why estimate f 用來預測 預測的時候可以將f^當成一個black box來用,目的主要是預測對應x時候的y而不關系它們之間的關系。用來推斷 推斷的時候,f^不能是一個black box,因為我們想知道predictor和response之…

提高編程思想

虛函數和抽象函數有什么區別 虛函數是有代碼的并明確允許子類去覆蓋,但子類也可不覆蓋,就是說可以直接用,不用重寫 抽象函數是沒有代碼,子類繼承后一定要重寫 ****************************************************************** 在一…

python特效代碼_網頁愛心特效弱爆了,我讓你點擊網頁顯示所有python模塊!

點擊網頁特效上周寫了一篇文章快速搭建個人博客的教程文章:其中說到了一個點擊網頁出現愛心特效的插件 click_heart.js ,當然大家可能也見過其他博客上面,有點擊網頁出現類似 富強、民主、文明、和諧等等,關于代碼在這里不多贅述,…

Python 包管理之 poetry

poetry是一個Python虛擬環境和依賴管理的工具。poetry和pipenv類似,另外還提供了打包和發布的功能。 官方文檔:python-poetry.org/docs/ python項目部署:poetry管理本地環境,上線用docker poetry 安裝 poetry提供多種安裝方式&#xff0c…

Windows數據庫編程接口簡介

數據庫是計算機中一種專門管理數據資源的系統,目前幾乎所有軟件都需要與數據庫打交道(包括操作系統,比如Windows上的注冊表其實也是一種數據庫),有些軟件更是以數據庫為核心因此掌握數據庫系統的使用方法以及數據庫系統…

映客都是互刷禮物嗎_映客互刷禮物有什么用_映客守護有什么用

一起直播、互刷禮物、改ID發性感照,趙本山女375x332 - 122KB - PNG一起直播、互刷禮物、改ID發性感照,趙本山女600x893 - 247KB - JPEG一起直播、互刷禮物、改ID發性感照,趙本山女600x448 - 151KB - JPEG土豪互刷禮物嚇壞男主播 即興表演鐵頭功撞墻560x688 - 57KB - JPEG一起直…

Python 之打包工具 setup.py

1. 為什么需要對項目分發打包? 平常我們習慣了使用 pip 來安裝一些第三方模塊,這個安裝過程之所以簡單,是因為模塊開發者為我們默默地為我們做了所有繁雜的工作,而這個過程就是 打包。 打包,就是將你的源代碼進一步封…

周進度----06

周學習進度06 周學習進度06 第16周 所花時間: 60min60min100min100min100min100min90min60min60min 代碼量(行) 500-800 博客量(篇) 4 了解到的知識 css樣式表的一些知識 項目流程的初步了解 一周的學習心得…

八個實用的CMD命令及開始→運行→命令集錦

這篇文章是很久前收藏在自己筆記本內的,具體的來源地址不清楚,先謝一下原作者吧. 共享出來大家一起學習一下: 一,ping    它是用來檢查網絡是否通暢或者網絡連接速度的命令。作為一個生活在網絡上的管理員或者黑客來說,ping命令是第一個必須掌握的DO…

2019如何轉換2010_9102年,你還不知道PPT怎么轉換成視頻嗎?小心落伍了

你在刷抖音的時候有沒有刷過這類視頻:成為人生贏家必備的書單、5個讓你看透人性的電影、6個讓你升職加薪的APP...如果你細心觀察的話,會發現這類視頻的做法基本都是一個樣的,像在翻相冊一樣,一頁頁過去,所以它們也叫做…

深度學習之RetinaNet

總述 Focal loss主要是為了解決one-stage目標檢測中正負樣本比例嚴重失衡的問題。該損失函數降低了大量簡單負樣本在訓練中所占的權重,也可理解為一種困難樣本挖掘。 目標識別有兩大經典結構: 第一類是以Faster RCNN為代表的兩級識別方法,這種結構的第…

js生成圖片

var image new Image(); var c document.getElementById("myCanvas"); var ctx c.getContext("2d"); var img document.getElementById("scream"); ctx.font "10px Arial";function createImg(name, zuowei, color) {// 姓名ctx…

淺談如何學習linux

一.為什么要學linux? 當然最重要是愛好和興趣!如果你這種必要學,或者根本不喜歡,請不要浪費時間,你學也學不好! 二.起步 你應該為自己創造一個學習linux的環境--在電腦上裝一個linux或unix 問題1:版本…

python的datetime函數_Python連載8-datetime包函數介紹

一、datetime包(上接連載7內容)1.函數:datetime(1)用法:輸入一個日期,來返回一個datetime類?(2)格式:datetime.datetime(年,月,日,hour,minute,second)其中hour,minute,…

深度學習之 soft-NMS

論文:《Improving Object DetectionWith One Line of Code》soft-NMS 英文論文鏈接:https://arxiv.org/pdf/1704.04503.pdfsoft-NMS github 鏈接:https://github.com/bharatsingh430/soft-nms 絕大部分目標檢測方法,最后都要用到…

項目微管理 - 總結也是新的開始

時間都去哪了?聽著這首耳熟能詳的旋律,感嘆著飛速流逝的年華,我漸漸的陷入到沉思之中。時間過的真的很快,從一名程序員到接手一個一線項目團隊一晃已經2年多了。在這段時間里,我接觸了各種各樣的人,處理了各…