<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你真的讀懂yolo了嗎?

          共 4291字,需瀏覽 9分鐘

           ·

          2021-08-26 22:36

          作者: stone,就職于百度,計(jì)算機(jī)視覺

          來源:https://zhuanlan.zhihu.com/p/37850811

          yolo v1(以下都稱為yolo)算比較舊的算法了,不過近來想整理一下yolo系列算法,所以先從yolo開始整理。發(fā)現(xiàn)網(wǎng)上關(guān)于yolo的文章基本都是照著原文翻譯,很多背后的原理沒有講清楚,所以本文盡量用最通俗易懂的語(yǔ)言來解釋yolo。如果有理解不對(duì)的地方,歡迎指正。

          一、yolo思想

          廢話不多說,直接開始講yolo算法的思想。首先從最初的目標(biāo)檢測(cè)開始講起。

          1. 從目標(biāo)檢測(cè)講起

          首先假設(shè)深度學(xué)習(xí)還沒用于目標(biāo)檢測(cè),我們還不知道那么多目標(biāo)檢測(cè)算法。

          我們先看一下目標(biāo)檢測(cè)要做什么事情。目標(biāo)檢測(cè)就是要找出圖片中物體的bounding box(邊界框),并判定框內(nèi)物體的類別。比如上圖中有一只貓,那我們要將這只貓用一個(gè)bounding box框出來(bounding box可以用左上角坐標(biāo)(x,y)和矩形的寬高(w,h)來表示)。

          對(duì)于這種任務(wù)我們要怎么做?一個(gè)很自然的想法就是,我把圖片喂給深度模型,讓網(wǎng)絡(luò)學(xué)習(xí)吐出bounding box的xywh四個(gè)值以及圖片的類別就好了。這么做貌似是可以的,但考慮這么一種情況:如果圖片上除了一只貓之外還有一只狗,甚至更多的物體,我們都想把它們框出來,那么這時(shí)候網(wǎng)絡(luò)就不僅僅要輸出貓的預(yù)測(cè),還有輸出其他物體的預(yù)測(cè)。這個(gè)時(shí)候我們發(fā)現(xiàn),模型的輸出的維度是沒辦法固定的,圖片中存在的物體越多,模型輸出的維度就越大。所以這種思路行不通。

          2. yolo的思想

          既然模型的輸出需要固定維度的,那么我們能不能設(shè)計(jì)一個(gè)固定維度大小的輸出,并且輸出的維度足夠大,足以囊括圖像中的所有物體呢?答案是可以的!yolo就是這么做的。yolo固定維度的辦法是把模型的輸出劃分成網(wǎng)格形狀,每個(gè)網(wǎng)格中的cell(格子)都可以輸出物體的類別和bounding box的坐標(biāo),如下圖所示(yolo實(shí)際上還可以預(yù)測(cè)多個(gè)bounding box的類別和confidence,這里只講思想,所以可以先忽略這個(gè),后面會(huì)詳細(xì)講到)。

          但問題的關(guān)鍵是,我們?cè)趺粗纁ell需要預(yù)測(cè)圖片中的哪個(gè)物體呢?這個(gè)其實(shí)取決于你怎么去設(shè)置模型的訓(xùn)練目標(biāo),說白一點(diǎn)就是,你要教它去預(yù)測(cè)哪個(gè)物體。具體來說,yolo是這么做的:

          將輸入圖像按照模型的輸出網(wǎng)格(比如7x7大?。┻M(jìn)行劃分,劃分之后就有很多小cell了。我們?cè)倏磮D片中物體的中心是落在哪個(gè)cell里面,落在哪個(gè)cell哪個(gè)cell就負(fù)責(zé)預(yù)測(cè)這個(gè)物體。比如下圖中,狗的中心落在了紅色cell內(nèi),則這個(gè)cell負(fù)責(zé)預(yù)測(cè)狗。這么說可能不太容易理解,下面進(jìn)行更具體的介紹。

          實(shí)際上,“物體落在哪個(gè)cell,哪個(gè)cell就負(fù)責(zé)預(yù)測(cè)這個(gè)物體” 要分兩個(gè)階段來看,包括訓(xùn)練和測(cè)試。

          1. 訓(xùn)練階段。在訓(xùn)練階段,如果物體中心落在這個(gè)cell,那么就給這個(gè)cell打上這個(gè)物體的label(包括xywh和類別)。也就是說我們是通過這種方式來設(shè)置訓(xùn)練的label的。換言之,我們?cè)谟?xùn)練階段,就教會(huì)cell要預(yù)測(cè)圖像中的哪個(gè)物體。

          2. 測(cè)試階段。因?yàn)槟阍谟?xùn)練階段已經(jīng)教會(huì)了cell去預(yù)測(cè)中心落在該cell中的物體,那么cell自然也會(huì)這么做。

          以上就是yolo最核心的思想。不過原文都是按照測(cè)試階段來解說的,不容易讓人理解。其實(shí),知道訓(xùn)練階段的意義更重要,因?yàn)橛?xùn)練階段你告訴網(wǎng)絡(luò)去預(yù)測(cè)什么,然后測(cè)試階段才能按照你訓(xùn)練階段教它的去做,如果你只知道測(cè)試階段網(wǎng)絡(luò)輸出的意義,你就很可能會(huì)問:憑什么物體的中心落在這個(gè)cell它就負(fù)責(zé)預(yù)測(cè)這個(gè)物體?

          二、模型

          講完了思想,我們來講具體的流程。

          1.模型架構(gòu)

          首先講網(wǎng)絡(luò)架構(gòu)。網(wǎng)絡(luò)架構(gòu)沒什么好講的,直接看圖就好了。

          從圖中可以看到,yolo網(wǎng)絡(luò)的輸出的網(wǎng)格是7x7大小的,另外,輸出的channel數(shù)目為30。一個(gè)cell內(nèi),前20個(gè)元素是類別概率值,然后2個(gè)元素是邊界框confidence,最后8個(gè)元素是邊界框的 (x, y,w,h) 。

          也就是說,每個(gè)cell有兩個(gè)predictor,每個(gè)predictor分別預(yù)測(cè)一個(gè)bounding box的xywh和相應(yīng)的confidence。但分類部分的預(yù)測(cè)卻是共享的。正因?yàn)檫@個(gè),同個(gè)cell是沒辦法預(yù)測(cè)多個(gè)目標(biāo)的。

          現(xiàn)在考慮兩個(gè)問題:

          1. 假設(shè)類別預(yù)測(cè)不是共享的,cell中兩個(gè)predictor都有各自的類別預(yù)測(cè),這樣能否在一個(gè)cell中預(yù)測(cè)兩個(gè)目標(biāo)?

          2. 為什么要預(yù)測(cè)兩個(gè)bounding box?

          對(duì)于第一個(gè)問題,答案是否定的。如果一個(gè)cell要預(yù)測(cè)兩個(gè)目標(biāo),那么這兩個(gè)predictor要怎么分工預(yù)測(cè)這兩個(gè)目標(biāo)?誰(shuí)負(fù)責(zé)誰(shuí)?不知道,所以沒辦法預(yù)測(cè)。而像faster rcnn這類算法,可以根據(jù)anchor與ground truth的IOU大小來安排anchor負(fù)責(zé)預(yù)測(cè)哪個(gè)物體,所以后來yolo2也采用了anchor思想,同個(gè)cell才能預(yù)測(cè)多個(gè)目標(biāo)。

          對(duì)于第二個(gè)問題,既然我們一個(gè)cell只能預(yù)測(cè)一個(gè)目標(biāo),為什么還要預(yù)測(cè)兩個(gè)bounding box(或者更多)?這個(gè)還是要從訓(xùn)練階段怎么給兩個(gè)predictor安排訓(xùn)練目標(biāo)來說。在訓(xùn)練的時(shí)候會(huì)在線地計(jì)算每個(gè)predictor預(yù)測(cè)的bounding box和ground truth的IOU,計(jì)算出來的IOU大的那個(gè)predictor,就會(huì)負(fù)責(zé)預(yù)測(cè)這個(gè)物體,另外一個(gè)則不預(yù)測(cè)。這么做有什么好處?我的理解是,這樣做的話,實(shí)際上有兩個(gè)predictor來一起進(jìn)行預(yù)測(cè),然后網(wǎng)絡(luò)會(huì)在線選擇預(yù)測(cè)得好的那個(gè)predictor(也就是IOU大)來進(jìn)行預(yù)測(cè)。通俗一點(diǎn)說,就是我找一堆人來并行地干一件事,然后我選干的最好的那個(gè)。

          2.模型輸出的意義

          Confidence預(yù)測(cè)

          首先看cell預(yù)測(cè)的bounding box中condifence這個(gè)維度。confidence表示:cell預(yù)測(cè)的bounding box包含一個(gè)物體的置信度有多高并且該bounding box預(yù)測(cè)準(zhǔn)確度有多大,用公式表示為:  。這個(gè)也要分兩個(gè)階段來考慮。

          1. 對(duì)于訓(xùn)練階段來說,我們要給每個(gè)bounding box的confidence打label,那么這個(gè)label怎么算? 其實(shí)很簡(jiǎn)單,如果一個(gè)物體中心沒有落在cell之內(nèi),那么每個(gè)bounding box的  ,IOU就沒有算的必要了,因?yàn)?nbsp; 肯定等于0,因此confidence的label就直接設(shè)置為0。如果物體的中心落在了這個(gè)cell之內(nèi),這個(gè)時(shí)候  ,因此confidence變成了  。注意這個(gè)IOU是在訓(xùn)練過程中不斷計(jì)算出來的,網(wǎng)絡(luò)在訓(xùn)練過程中預(yù)測(cè)的bounding box每次都不一樣,所以和ground truth計(jì)算出來的IOU每次也會(huì)不一樣。

          2. 對(duì)于預(yù)測(cè)階段,網(wǎng)絡(luò)只輸出一個(gè)confidence值,它實(shí)際上隱含地包含了  。

          對(duì)于第2點(diǎn),有人私信問說,在測(cè)試階段,輸出的confidece怎么算?還是通過 計(jì)算嗎?可是如果這樣的話,測(cè)試階段根本沒有g(shù)round truth,那怎么計(jì)算IOU?

          實(shí)際上,在測(cè)試階段,網(wǎng)絡(luò)只是輸出了confidece這個(gè)值,但它已經(jīng)包含了  ,并不需要分別計(jì)算Pr(object)和IOU(也沒辦法算)。為什么?因?yàn)槟阍谟?xùn)練階段你給confidence打label的時(shí)候,給的是  這個(gè)值,你在測(cè)試的時(shí)候,網(wǎng)絡(luò)吐出來的也就是這個(gè)值。

          Bounding box預(yù)測(cè)

          bounding box的預(yù)測(cè)包括xywh四個(gè)值。xy表示bounding box的中心相對(duì)于cell左上角坐標(biāo)偏移,寬高則是相對(duì)于整張圖片的寬高進(jìn)行歸一化的。偏移的計(jì)算方法如下圖所示。

          xywh為什么要這么表示呢?實(shí)際上經(jīng)過這么表示之后,xywh都?xì)w一化了,它們的值都是在0-1之間。我們通常做回歸問題的時(shí)候都會(huì)將輸出進(jìn)行歸一化,否則可能導(dǎo)致各個(gè)輸出維度的取值范圍差別很大,進(jìn)而導(dǎo)致訓(xùn)練的時(shí)候,網(wǎng)絡(luò)更關(guān)注數(shù)值大的維度。因?yàn)閿?shù)值大的維度,算loss相應(yīng)會(huì)比較大,為了讓這個(gè)loss減小,那么網(wǎng)絡(luò)就會(huì)盡量學(xué)習(xí)讓這個(gè)維度loss變小,最終導(dǎo)致區(qū)別對(duì)待。

          類別預(yù)測(cè)

          除此之外,還有一個(gè)物體類別,物體類別是一個(gè)條件概率  。這個(gè)怎么理解?也可以分兩個(gè)階段來看。

          1. 對(duì)于訓(xùn)練階段,也就是打label階段,怎么打label呢?對(duì)于一個(gè)cell,如果物體的中心落在了這個(gè)cell,那么我們給它打上這個(gè)物體的類別label,并設(shè)置概率為1。換句話說,這個(gè)概率是存在一個(gè)條件的,這個(gè)條件就是cell存在物體。

          2. 對(duì)于測(cè)試階段來說,網(wǎng)絡(luò)直接輸出  ,就已經(jīng)可以代表有物體存在的條件下類別概率。但是在測(cè)試階段,作者還把這個(gè)概率乘上了confidence。

          論文中的公式是這樣的:

          也就是說我們預(yù)測(cè)的條件概率還要乘以confidence。為什么這么做呢?舉個(gè)例子,對(duì)于某個(gè)cell來說,在預(yù)測(cè)階段,即使這個(gè)cell不存在物體(即confidence的值為0),也存在一種可能:輸出的條件概率 ,但將confidence和  乘起來就變成0了。這個(gè)是很合理的,因?yàn)槟愕么_保cell中有物體(即confidence大),你算類別概率才有意義。

          三、訓(xùn)練

          最后要講的是訓(xùn)練階段的loss。

          關(guān)于loss,需要特別注意的是需要計(jì)算loss的部分。并不是網(wǎng)絡(luò)的輸出都算loss,具體地說:

          1. 有物體中心落入的cell,需要計(jì)算分類loss,兩個(gè)predictor都要計(jì)算confidence loss,預(yù)測(cè)的bounding box與ground truth IOU比較大的那個(gè)predictor需要計(jì)算xywh loss。

          2. 特別注意:沒有物體中心落入的cell,只需要計(jì)算confidence loss。

          另外,我們發(fā)現(xiàn)每一項(xiàng)loss的計(jì)算都是L2 loss,即使是分類問題也是。所以說yolo是把分類問題轉(zhuǎn)為了回歸問題。


          ——The  End——


          求分享  求點(diǎn)贊   求在看?。。?/strong>

          瀏覽 61
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人妻体体内射精一区二区 | 深爱五月天激情 | 国产激情久久 | 操逼视频免费试看 | 视频一区在线播放 |