關(guān)于YOLOv3原理的實(shí)例分析

關(guān)于YOLO v3原理的實(shí)例分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),鎮(zhèn)賚網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鎮(zhèn)賚等地區(qū)。鎮(zhèn)賚做網(wǎng)站價(jià)格咨詢:13518219792

算法基本思想

首先通過(guò)特征提取網(wǎng)絡(luò)對(duì)輸入特征提取特征,得到特定大小的特征圖輸出。輸入圖像分成13×13的grid cell,接著如果真實(shí)框中某個(gè)object的中心坐標(biāo)落在某個(gè)grid cell中,那么就由該grid cell來(lái)預(yù)測(cè)該object。每個(gè)object有固定數(shù)量的bounding box,YOLO v3中有三個(gè)bounding box,使用邏輯回歸確定用來(lái)預(yù)測(cè)的回歸框。

網(wǎng)絡(luò)結(jié)構(gòu)

關(guān)于YOLO v3原理的實(shí)例分析

上圖DBL是Yolo v3的基本組件。Darknet的卷積層后接BatchNormalization(BN)和LeakyReLU。除最后一層卷積層外,在yolo v3中BN和LeakyReLU已經(jīng)是卷積層不可分離的部分了,共同構(gòu)成了最小組件。

主干網(wǎng)絡(luò)中使用了5個(gè)resn結(jié)構(gòu)。n代表數(shù)字,有res1,res2, … ,res8等等,表示這個(gè)res_block里含有n個(gè)res_unit,這是Yolo v3的大組件。從Yolo v3開(kāi)始借鑒了ResNet的殘差結(jié)構(gòu),使用這種結(jié)構(gòu)可以讓網(wǎng)絡(luò)結(jié)構(gòu)更深。對(duì)于res_block的解釋,可以在上圖網(wǎng)絡(luò)結(jié)果的右下角直觀看到,其基本組件也是DBL。

在預(yù)測(cè)支路上有張量拼接(concat)操作。其實(shí)現(xiàn)方法是將darknet中間層和中間層后某一層的上采樣進(jìn)行拼接。值得注意的是,張量拼接和Res_unit結(jié)構(gòu)的add的操作是不一樣的,張量拼接會(huì)擴(kuò)充張量的維度,而add只是直接相加不會(huì)導(dǎo)致張量維度的改變。

Yolo_body一共有252層。23個(gè)Res_unit對(duì)應(yīng)23個(gè)add層。BN層和LeakyReLU層數(shù)量都是72層,在網(wǎng)絡(luò)結(jié)構(gòu)中的表現(xiàn)為:每一層BN后面都會(huì)接一層LeakyReLU。上采樣和張量拼接操作各2個(gè),5個(gè)零填充對(duì)應(yīng)5個(gè)res_block。卷積層一共有75層,其中有72層后面都會(huì)接BatchNormalization和LeakyReLU構(gòu)成的DBL。三個(gè)不同尺度的輸出對(duì)應(yīng)三個(gè)卷積層,最后的卷積層的卷積核個(gè)數(shù)是255,針對(duì)COCO數(shù)據(jù)集的80類:3×(80+4+1)=255,3表示一個(gè)grid cell包含3個(gè)bounding box,4表示框的4個(gè)坐標(biāo)信息,1表示置信度。

下圖為具體網(wǎng)絡(luò)結(jié)果圖。

關(guān)于YOLO v3原理的實(shí)例分析

輸入映射到輸出

關(guān)于YOLO v3原理的實(shí)例分析

不考慮神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)細(xì)節(jié)的話,總的來(lái)說(shuō),對(duì)于一個(gè)輸入圖像,YOLO3將其映射到3個(gè)尺度的輸出張量,代表圖像各個(gè)位置存在各種對(duì)象的概率。

我們看一下YOLO3共進(jìn)行了多少個(gè)預(yù)測(cè)。對(duì)于一個(gè)416*416的輸入圖像,在每個(gè)尺度的特征圖的每個(gè)網(wǎng)格設(shè)置3個(gè)先驗(yàn)框,總共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 個(gè)預(yù)測(cè)。每一個(gè)預(yù)測(cè)是一個(gè)(4+1+80)=85維向量,這個(gè)85維向量包含邊框坐標(biāo)(4個(gè)數(shù)值),邊框置信度(1個(gè)數(shù)值),對(duì)象類別的概率(對(duì)于COCO數(shù)據(jù)集,有80種對(duì)象)。

關(guān)于YOLO v3原理的實(shí)例分析

邊界框預(yù)測(cè)(Bounding Box Prediction)

Yolo v3關(guān)于bounding box的初始尺寸還是采用Yolo v2中的k-means聚類的方式來(lái)做,這種先驗(yàn)知識(shí)對(duì)于bounding box的初始化幫助還是很大的,畢竟過(guò)多的bounding box雖然對(duì)于效果來(lái)說(shuō)有保障,但是對(duì)于算法速度影響還是比較大的。

在COCO數(shù)據(jù)集上,9個(gè)聚類如下表所示,注這里需要說(shuō)明:特征圖越大,感受野越小。對(duì)小目標(biāo)越敏感,所以選用小的anchor box。特征圖越小,感受野越大。對(duì)大目標(biāo)越敏感,所以選用大的anchor box。

關(guān)于YOLO v3原理的實(shí)例分析

Yolo v3采用直接預(yù)測(cè)相對(duì)位置的方法。預(yù)測(cè)出b-box中心點(diǎn)相對(duì)于網(wǎng)格單元左上角的相對(duì)坐標(biāo)。直接預(yù)測(cè)出(tx,ty,tw,th,t0),然后通過(guò)以下坐標(biāo)偏移公式計(jì)算得到b-box的位置大小和confidence。

關(guān)于YOLO v3原理的實(shí)例分析

tx、ty、tw、th就是模型的預(yù)測(cè)輸出。cx和cy表示grid cell的坐標(biāo),比如某層的feature map大小是13×13,那么grid cell就有13×13個(gè),第0行第1列的grid cell的坐標(biāo)cx就是0,cy就是1。pw和ph表示預(yù)測(cè)前bounding box的size。bx、by、bw和bh就是預(yù)測(cè)得到的bounding box的中心的坐標(biāo)和size。在訓(xùn)練這幾個(gè)坐標(biāo)值的時(shí)候采用了sum of squared error loss(平方和距離誤差損失),因?yàn)檫@種方式的誤差可以很快的計(jì)算出來(lái)。

注:這里confidence = Pr(Object)*IoU 表示框含有object的置信度這個(gè)box預(yù)測(cè)的有多準(zhǔn)。也就是說(shuō),如果這個(gè)框?qū)?yīng)的是背景,那么這個(gè)值應(yīng)該是 0,如果這個(gè)框?qū)?yīng)的是前景,那么這個(gè)值應(yīng)該是與對(duì)應(yīng)前景 GT的IoU。

Yolo v3使用邏輯回歸預(yù)測(cè)每個(gè)邊界框的分?jǐn)?shù)。如果邊界框與真實(shí)框的重疊度比之前的任何其他邊界框都要好,則該值應(yīng)該為1。如果邊界框不是最好的,但確實(shí)與真實(shí)對(duì)象的重疊超過(guò)某個(gè)閾值(Yolo v3中這里設(shè)定的閾值是0.5),那么就忽略這次預(yù)測(cè)。Yolo v3只為每個(gè)真實(shí)對(duì)象分配一個(gè)邊界框,如果邊界框與真實(shí)對(duì)象不吻合,則不會(huì)產(chǎn)生坐標(biāo)或類別預(yù)測(cè)損失,只會(huì)產(chǎn)生物體預(yù)測(cè)損失。

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

在上面網(wǎng)絡(luò)結(jié)構(gòu)圖中可以看出,Yolo v3設(shè)定的是每個(gè)網(wǎng)格單元預(yù)測(cè)3個(gè)box,所以每個(gè)box需要有(x, y, w, h, confidence)五個(gè)基本參數(shù)。Yolo v3輸出了3個(gè)不同尺度的feature map,如上圖所示的y1, y2, y3。y1,y2和y3的深度都是255,邊長(zhǎng)的規(guī)律是13:26:52。

每個(gè)預(yù)測(cè)任務(wù)得到的特征大小都為N ×N ×[3?(4+1+80)] ,N為格子大小,3為每個(gè)格子得到的邊界框數(shù)量, 4是邊界框坐標(biāo)數(shù)量,1是目標(biāo)預(yù)測(cè)值,80是類別數(shù)量。對(duì)于COCO類別而言,有80個(gè)類別的概率,所以每個(gè)box應(yīng)該對(duì)每個(gè)種類都輸出一個(gè)概率。所以3×(5 + 80) = 255。這個(gè)255就是這么來(lái)的。

Yolo v3用上采樣的方法來(lái)實(shí)現(xiàn)這種多尺度的feature map。在Darknet-53得到的特征圖的基礎(chǔ)上,經(jīng)過(guò)六個(gè)DBL結(jié)構(gòu)和最后一層卷積層得到第一個(gè)特征圖譜,在這個(gè)特征圖譜上做第一次預(yù)測(cè)。Y1支路上,從后向前的倒數(shù)第3個(gè)卷積層的輸出,經(jīng)過(guò)一個(gè)DBL結(jié)構(gòu)和一次(2,2)上采樣,將上采樣特征與第2個(gè)Res8結(jié)構(gòu)輸出的卷積特征張量連接,經(jīng)過(guò)六個(gè)DBL結(jié)構(gòu)和最后一層卷積層得到第二個(gè)特征圖譜,在這個(gè)特征圖譜上做第二次預(yù)測(cè)。Y2支路上,從后向前倒數(shù)第3個(gè)卷積層的輸出,經(jīng)過(guò)一個(gè)DBL結(jié)構(gòu)和一次(2,2)上采樣,將上采樣特征與第1個(gè)Res8結(jié)構(gòu)輸出的卷積特征張量連接,經(jīng)過(guò)六個(gè)DBL結(jié)構(gòu)和最后一層卷積層得到第三個(gè)特征圖譜,在這個(gè)特征圖譜上做第三次預(yù)測(cè)。

就整個(gè)網(wǎng)絡(luò)而言,Yolo v3多尺度預(yù)測(cè)輸出的feature map尺寸為y1:(13×13),y2:(26×26),y3:(52×52)。網(wǎng)絡(luò)接收一張(416×416)的圖,經(jīng)過(guò)5個(gè)步長(zhǎng)為2的卷積來(lái)進(jìn)行降采樣(416 / 2?5 = 13,y1輸出(13×13)。從y1的倒數(shù)第二層的卷積層上采樣(x2,up sampling)再與最后一個(gè)26×26大小的特征圖張量連接,y2輸出(26×26)。從y2的倒數(shù)第二層的卷積層上采樣(x2,up sampling)再與最后一個(gè)52×52大小的特征圖張量連接,y3輸出(52×52)

感受一下9種先驗(yàn)框的尺寸,下圖中藍(lán)色框?yàn)榫垲惖玫降南闰?yàn)框。黃色框式ground truth,紅框是對(duì)象中心點(diǎn)所在的網(wǎng)格。

關(guān)于YOLO v3原理的實(shí)例分析

預(yù)測(cè)框的3種情況

預(yù)測(cè)框一共分為三種情況:正例(positive)、負(fù)例(negative)、忽略樣例(ignore)。

(1)正例:任取一個(gè)ground truth, 與上面計(jì)算的10647個(gè)框全部計(jì)算IOU, IOU最大的預(yù)測(cè)框, 即為正例。并且一個(gè)預(yù)測(cè)框, 只能分配給一個(gè)ground truth。 例如第一個(gè)ground truth已經(jīng)匹配了一個(gè)正例檢測(cè)框, 那么下一個(gè)ground truth, 就在余下的10646個(gè)檢測(cè)框中, 尋找IOU最大的檢測(cè)框作為正例。ground truth的先后順序可忽略。正例產(chǎn)生置信度loss、檢測(cè)框loss、類別loss。預(yù)測(cè)框?yàn)閷?duì)應(yīng)的ground truth box標(biāo)簽(使用真實(shí)的x、y、w、h計(jì)算出); 類別標(biāo)簽對(duì)應(yīng)類別為1, 其余為0; 置信度標(biāo)簽為1。

(2)忽略樣例:正例除外, 與任意一個(gè)ground truth的IOU大于閾值(論文中使用5), 則為忽略樣例。忽略樣例不產(chǎn)生任何loss。

為什么會(huì)有忽略樣例?

由于Yolov3采用了多尺度檢測(cè), 那么再檢測(cè)時(shí)會(huì)有重復(fù)檢測(cè)現(xiàn)象. 比如有一個(gè)真實(shí)物體,在訓(xùn)練時(shí)被分配到的檢測(cè)框是特征圖1的第三個(gè)box,IOU達(dá)0.98,此時(shí)恰好特征圖2的第一個(gè)box與該ground truth的IOU達(dá)0.95,也檢測(cè)到了該ground truth,如果此時(shí)給其置信度強(qiáng)行打0的標(biāo)簽,網(wǎng)絡(luò)學(xué)習(xí)效果會(huì)不理想。

(3)負(fù)例:正例除外(與ground truth計(jì)算后IOU最大的檢測(cè)框,但是IOU小于閾值,仍為正例), 與全部ground truth的IOU都小于閾值(0.5), 則為負(fù)例。負(fù)例只有置信度產(chǎn)生loss, 置信度標(biāo)簽為0。

如下圖所示:

關(guān)于YOLO v3原理的實(shí)例分析

  • λ為權(quán)重參數(shù), 用于控制檢測(cè)框loss, obj與noobj的置信度loss, 以及類別

  • 對(duì)于正類而言, 1ijobj輸出為1; 對(duì)于負(fù)例而言, 1ijnoobj輸出為1; 對(duì)于忽略樣例而言, 全部為0;

  • 類別采用交叉熵作為損失函數(shù)。

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

類別預(yù)測(cè)方面Yolo v2網(wǎng)絡(luò)中的Softmax分類器,認(rèn)為一個(gè)目標(biāo)只屬于一個(gè)類別,通過(guò)輸出Score大小,使得每個(gè)框分配到Score最大的一個(gè)類別。但在一些復(fù)雜場(chǎng)景下,一個(gè)目標(biāo)可能屬于多個(gè)類(有重疊的類別標(biāo)簽),因此Yolo v3用多個(gè)獨(dú)立的Logistic分類器替代Softmax層解決多標(biāo)簽分類問(wèn)題,且準(zhǔn)確率不會(huì)下降。

舉例說(shuō)明,原來(lái)分類網(wǎng)絡(luò)中的softmax層都是假設(shè)一張圖像或一個(gè)object只屬于一個(gè)類別,但是在一些復(fù)雜場(chǎng)景下,一個(gè)object可能屬于多個(gè)類,比如你的類別中有woman和person這兩個(gè)類,那么如果一張圖像中有一個(gè)woman,那么你檢測(cè)的結(jié)果中類別標(biāo)簽就要同時(shí)有woman和person兩個(gè)類,這就是多標(biāo)簽分類,需要用Logistic分類器來(lái)對(duì)每個(gè)類別做二分類。Logistic分類器主要用到sigmoid函數(shù),該函數(shù)可以將輸入約束在0到1的范圍內(nèi),因此當(dāng)一張圖像經(jīng)過(guò)特征提取后的某一類輸出經(jīng)過(guò)sigmoid函數(shù)約束后如果大于0.5,就表示該邊界框負(fù)責(zé)的目標(biāo)屬于該類。

物體分?jǐn)?shù)和類置信度

物體分?jǐn)?shù):表示一個(gè)邊界框包含一個(gè)物體的概率,對(duì)于紅色框和其周圍的框幾乎都為1,但邊角的框可能幾乎都為0。物體分?jǐn)?shù)也通過(guò)一個(gè)sigmoid函數(shù),表示概率值。

類置信度:表示檢測(cè)到的物體屬于一個(gè)具體類的概率值,以前的YOLO版本使用softmax將類分?jǐn)?shù)轉(zhuǎn)化為類概率。在YOLOv3中作者決定使用sigmoid函數(shù)取代,原因是softmax假設(shè)類之間都是互斥的,例如屬于“Person”就不能表示屬于“Woman”,然而很多情況是這個(gè)物體既是“Person”也是“Woman”。

輸出處理

我們的網(wǎng)絡(luò)生成10647個(gè)錨框,而圖像中只有一個(gè)狗,怎么將10647個(gè)框減少為1個(gè)呢?首先,我們通過(guò)物體分?jǐn)?shù)過(guò)濾一些錨框,例如低于閾值(假設(shè)0.5)的錨框直接舍去;然后,使用NMS(非極大值抑制)解決多個(gè)錨框檢測(cè)一個(gè)物體的問(wèn)題(例如紅色框的3個(gè)錨框檢測(cè)一個(gè)框或者連續(xù)的cell檢測(cè)相同的物體,產(chǎn)生冗余),NMS用于去除多個(gè)檢測(cè)框。

具體使用以下步驟:拋棄分?jǐn)?shù)低的框(意味著框?qū)τ跈z測(cè)一個(gè)類信心不大);當(dāng)多個(gè)框重合度高且都檢測(cè)同一個(gè)物體時(shí)只選擇一個(gè)框(NMS)。

關(guān)于YOLO v3原理的實(shí)例分析

為了更方便理解,我們選用上面的汽車圖像。首先,我們使用閾值進(jìn)行過(guò)濾一部分錨框。模型有19*19*3*85個(gè)數(shù),每個(gè)盒子由85個(gè)數(shù)字描述。將(19,19,3,85)分割為下面的形狀:

box_confidence:(19,19,3,1)表示19*19個(gè)cell,每個(gè)cell的 3個(gè)框,每個(gè)框有物體的置信度概率;

boxes:(19,19,3,4)表示每個(gè)cell 的3個(gè)框,每個(gè)框的表示;

box_class_probs:(19,19,3,80)表示每個(gè)cell的3個(gè)框,每個(gè)框80個(gè)類檢測(cè)概率。

每個(gè)錨框我們計(jì)算下面的元素級(jí)乘法并且得到錨框包含一個(gè)物體類的概率,如下圖:

關(guān)于YOLO v3原理的實(shí)例分析

即使通過(guò)類分?jǐn)?shù)閾值過(guò)濾一部分錨框,還剩下很多重合的框。第二個(gè)過(guò)程叫NMS,里面有個(gè)IoU,如下圖所示。

關(guān)于YOLO v3原理的實(shí)例分析

實(shí)現(xiàn)非極大值抑制,關(guān)鍵在于:選擇一個(gè)最高分?jǐn)?shù)的框;計(jì)算它和其他框的重合度,去除重合度超過(guò)IoU閾值的框;回到步驟1迭代直到?jīng)]有比當(dāng)前所選框低的框。

關(guān)于YOLO v3原理的實(shí)例分析

Loss Function

在Yolo v3的論文里沒(méi)有明確提出所用的損失函數(shù),確切地說(shuō),Yolo系列論文里面只有Yolo v1明確提了損失函數(shù)的公式。在Yolo v1中使用了一種叫sum-square error的損失計(jì)算方法,只是簡(jiǎn)單的差方相加。我們知道,在目標(biāo)檢測(cè)任務(wù)里,有幾個(gè)關(guān)鍵信息是需要確定的:(x,y),(w,h),class,confidence 。根據(jù)關(guān)鍵信息的特點(diǎn)可以分為上述四類,損失函數(shù)應(yīng)該由各自特點(diǎn)確定。最后加到一起就可以組成最終的loss function了,也就是一個(gè)loss function搞定端到端的訓(xùn)練。

關(guān)于YOLO v3原理的實(shí)例分析

yolov3網(wǎng)絡(luò)硬核講解(視頻)

視頻地址: https://www.bilibili.com/video/BV12y4y1v7L6?from=search&seid=442233808730191461

真實(shí)值是如何編碼

關(guān)于YOLO v3原理的實(shí)例分析

關(guān)于YOLO v3原理的實(shí)例分析

預(yù)測(cè)錨框的設(shè)計(jì)

關(guān)于YOLO v3原理的實(shí)例分析

錨框與目標(biāo)框做iou

關(guān)于YOLO v3原理的實(shí)例分析

關(guān)于YOLO v3原理的實(shí)例分析

關(guān)于YOLO v3原理的實(shí)例分析


看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)站欄目:關(guān)于YOLOv3原理的實(shí)例分析
分享網(wǎng)址:http://muchs.cn/article42/pppiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站網(wǎng)站營(yíng)銷、域名注冊(cè)、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)