<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>

          目標(biāo)檢測(cè)yolo v3--2018

          共 4925字,需瀏覽 10分鐘

           ·

          2021-04-06 15:57

          論文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf
          論文:YOLOv3: An Incremental Improvement

          YOLO系列的目標(biāo)檢測(cè)算法可以說(shuō)是目標(biāo)檢測(cè)史上的宏篇巨作,接下來(lái)我們來(lái)詳細(xì)介紹一下YOLO v3算法內(nèi)容,v3的算法是在v1和v2的基礎(chǔ)上形成的,所以有必要先回憶: 一文看懂YOLO v1,一文看懂YOLO v2,目標(biāo)檢測(cè)map。

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

          從這兒盜了張圖,這張圖很好的總結(jié)了YOLOV3的結(jié)構(gòu),讓我們對(duì)YOLO有更加直觀的理解。
          DBL:代碼中的Darknetconv2d_BN_Leaky,是yolo_v3的基本組件。就是卷積+BN+Leaky relu。
          resn:n代表數(shù)字,有res1,res2, … ,res8等等,表示這個(gè)res_block里含有多少個(gè)res_unit。不懂resnet請(qǐng)戳這兒
          concat:張量拼接。將darknet中間層和后面的某一層的上采樣進(jìn)行拼接。拼接的操作和殘差層add的操作是不一樣的,拼接會(huì)擴(kuò)充張量的維度,而add只是直接相加不會(huì)導(dǎo)致張量維度的改變。

          后面我們一起分析網(wǎng)絡(luò)一些細(xì)節(jié)與難懂的地方

          backbone:darknet-53

          為了達(dá)到更好的分類效果,作者自己設(shè)計(jì)訓(xùn)練了darknet-53。作者在ImageNet上實(shí)驗(yàn)發(fā)現(xiàn)這個(gè)darknet-53,的確很強(qiáng),相對(duì)于ResNet-152和ResNet-101,darknet-53不僅在分類精度上差不多,計(jì)算速度還比ResNet-152和ResNet-101強(qiáng)多了,網(wǎng)絡(luò)層數(shù)也比他們少。

          Yolo_v3使用了darknet-53的前面的52層(沒(méi)有全連接層),yolo_v3這個(gè)網(wǎng)絡(luò)是一個(gè)全卷積網(wǎng)絡(luò),大量使用殘差的跳層連接,并且為了降低池化帶來(lái)的梯度負(fù)面效果,作者直接摒棄了POOLing,用conv的stride來(lái)實(shí)現(xiàn)降采樣。在這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中,使用的是步長(zhǎng)為2的卷積來(lái)進(jìn)行降采樣。

          為了加強(qiáng)算法對(duì)小目標(biāo)檢測(cè)的精確度,YOLO v3中采用類似FPN的upsample和融合做法(最后融合了3個(gè)scale,其他兩個(gè)scale的大小分別是26×26和52×52),在多個(gè)scale的feature map上做檢測(cè)。

          作者在3條預(yù)測(cè)支路采用的也是全卷積的結(jié)構(gòu),其中最后一個(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表示objectness score。

          output


          所謂的多尺度就是來(lái)自這3條預(yù)測(cè)之路,y1,y2和y3的深度都是255,邊長(zhǎng)的規(guī)律是13:26:52。yolo v3設(shè)定的是每個(gè)網(wǎng)格單元預(yù)測(cè)3個(gè)box,所以每個(gè)box需要有(x, y, w, h, confidence)五個(gè)基本參數(shù),然后還要有80個(gè)類別的概率。所以3×(5 + 80) = 255。這個(gè)255就是這么來(lái)的。

          下面我們具體看看y1,y2,y3是如何而來(lái)的。
          網(wǎng)絡(luò)中作者進(jìn)行了三次檢測(cè),分別是在32倍降采樣,16倍降采樣,8倍降采樣時(shí)進(jìn)行檢測(cè),這樣在多尺度的feature map上檢測(cè)跟SSD有點(diǎn)像。在網(wǎng)絡(luò)中使用up-sample(上采樣)的原因:網(wǎng)絡(luò)越深的特征表達(dá)效果越好,比如在進(jìn)行16倍降采樣檢測(cè),如果直接使用第四次下采樣的特征來(lái)檢測(cè),這樣就使用了淺層特征,這樣效果一般并不好。如果想使用32倍降采樣后的特征,但深層特征的大小太小,因此yolo_v3使用了步長(zhǎng)為2的up-sample(上采樣),把32倍降采樣得到的feature map的大小提升一倍,也就成了16倍降采樣后的維度。同理8倍采樣也是對(duì)16倍降采樣的特征進(jìn)行步長(zhǎng)為2的上采樣,這樣就可以使用深層特征進(jìn)行detection。

          作者通過(guò)上采樣將深層特征提取,其維度是與將要融合的特征層維度相同的(channel不同)。如下圖所示,85層將13×13×256的特征上采樣得到26×26×256,再將其與61層的特征拼接起來(lái)得到26×26×768。為了得到channel255,還需要進(jìn)行一系列的3×3,1×1卷積操作,這樣既可以提高非線性程度增加泛化性能提高網(wǎng)絡(luò)精度,又能減少參數(shù)提高實(shí)時(shí)性。52×52×255的特征也是類似的過(guò)程。


          從圖中,我們可以看出y1,y2,y3的由來(lái)。

          Bounding Box

          YOLO v3的Bounding Box由YOLOV2又做出了更好的改進(jìn)。在yolo_v2和yolo_v3中,都采用了對(duì)圖像中的object采用k-means聚類。feature map中的每一個(gè)cell都會(huì)預(yù)測(cè)3個(gè)邊界框(bounding box) ,每個(gè)bounding box都會(huì)預(yù)測(cè)三個(gè)東西:(1)每個(gè)框的位置(4個(gè)值,中心坐標(biāo)tx和ty,,框的高度bh和寬度bw),(2)一個(gè)objectness prediction ,(3)N個(gè)類別,coco數(shù)據(jù)集80類,voc20類。

          三次檢測(cè),每次對(duì)應(yīng)的感受野不同,32倍降采樣的感受野最大,適合檢測(cè)大的目標(biāo),所以在輸入為416×416時(shí),每個(gè)cell的三個(gè)anchor box為(116 ,90); (156 ,198); (373 ,326)。16倍適合一般大小的物體,anchor box為(30,61); (62,45); (59,119)。8倍的感受野最小,適合檢測(cè)小目標(biāo),因此anchor box為(10,13); (16,30); (33,23)。所以當(dāng)輸入為416×416時(shí),實(shí)際總共有(52×52+26×26+13×13)×3=10647個(gè)proposal box。

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

          這里注意bounding box 與anchor box的區(qū)別:
          Bounding box它輸出的是框的位置(中心坐標(biāo)與寬高),confidence以及N個(gè)類別。
          anchor box只是一個(gè)尺度即只有寬高。

          LOSS Function

          YOLOv3重要改變之一:No more softmaxing the classes。
          YOLO v3現(xiàn)在對(duì)圖像中檢測(cè)到的對(duì)象執(zhí)行多標(biāo)簽分類。

          logistic回歸用于對(duì)anchor包圍的部分進(jìn)行一個(gè)目標(biāo)性評(píng)分(objectness score),即這塊位置是目標(biāo)的可能性有多大。這一步是在predict之前進(jìn)行的,可以去掉不必要anchor,可以減少計(jì)算量。

          如果模板框不是最佳的即使它超過(guò)我們?cè)O(shè)定的閾值,我們還是不會(huì)對(duì)它進(jìn)行predict。
          不同于faster R-CNN的是,yolo_v3只會(huì)對(duì)1個(gè)prior進(jìn)行操作,也就是那個(gè)最佳prior。而logistic回歸就是用來(lái)從9個(gè)anchor priors中找到objectness score(目標(biāo)存在可能性得分)最高的那一個(gè)。logistic回歸就是用曲線對(duì)prior相對(duì)于 objectness score映射關(guān)系的線性建模。

          	lxy, lwh, lcls, lconf = ft([0]), ft([0]), ft([0]), ft([0])
          txy, twh, tcls, indices = build_targets(model, targets)#在13 26 52維度中找到大于iou閾值最適合的anchor box 作為targets
          #txy[維度(0:2),(x,y)] twh[維度(0:2),(w,h)] indices=[0,anchor索引,gi,gj]

          # Define criteria
          MSE = nn.MSELoss()
          CE = nn.CrossEntropyLoss()
          BCE = nn.BCEWithLogitsLoss()

          # Compute losses
          h = model.hyp # hyperparameters
          bs = p[0].shape[0] # batch size
          k = h['k'] * bs # loss gain
          for i, pi0 in enumerate(p): # layer i predictions, i
          b, a, gj, gi = indices[i] # image, anchor, gridx, gridy
          tconf = torch.zeros_like(pi0[..., 0]) # conf


          # Compute losses
          if len(b): # number of targets
          pi = pi0[b, a, gj, gi] # predictions closest to anchors 找到p中與targets對(duì)應(yīng)的數(shù)據(jù)lxy
          tconf[b, a, gj, gi] = 1 # conf
          # pi[..., 2:4] = torch.sigmoid(pi[..., 2:4]) # wh power loss (uncomment)

          lxy += (k * h['xy']) * MSE(torch.sigmoid(pi[..., 0:2]),txy[i]) # xy loss
          lwh += (k * h['wh']) * MSE(pi[..., 2:4], twh[i]) # wh yolo loss
          lcls += (k * h['cls']) * CE(pi[..., 5:], tcls[i]) # class_conf loss

          # pos_weight = ft([gp[i] / min(gp) * 4.])
          # BCE = nn.BCEWithLogitsLoss(pos_weight=pos_weight)
          lconf += (k * h['conf']) * BCE(pi0[..., 4], tconf) # obj_conf loss
          loss = lxy + lwh + lconf + lcls

          • 1

          • 2

          • 3

          • 4

          • 5

          • 6

          • 7

          • 8

          • 9

          • 10

          • 11

          • 12

          • 13

          • 14

          • 15

          • 16

          • 17

          • 18

          • 19

          • 20

          • 21

          • 22

          • 23

          • 24

          • 25

          • 26

          • 27

          • 28

          • 29

          • 30

          • 31

          • 32

          • 33

          以上是一段pytorch框架描述的yolo v3 的loss_function代碼。忽略恒定系數(shù)不看,以下我想著重說(shuō)幾點(diǎn):

          • 首先,yolov3要先build target,因?yàn)槲覀冎勒龢颖臼莑abel與anchor box iou大于0.5的組成,所以我們根據(jù)label找到對(duì)應(yīng)的anchor box。如何找?label中存放著[image,class,x(歸一化),y,w(歸一化),h],我們可以用這些坐標(biāo)在對(duì)應(yīng)13×13 Or 26×26 or 52×52的map中分別于9個(gè)anchor算出iou,找到符合要求的,把索引與位置記錄好。用記錄好的索引位置找到predict的anchor box。

          • xywh是由均方差來(lái)計(jì)算loss的,其中預(yù)測(cè)的xy進(jìn)行sigmoid來(lái)與lable xy求差,label xy是grid cell中心點(diǎn)坐標(biāo),其值在0-1之間,所以predict出的xy要sigmoid。

          • 分類用的多類別交叉熵,置信度用的二分類交叉熵。只有正樣本才參與class,xywh的loss計(jì)算,負(fù)樣本只參與置信度loss。


          瀏覽 48
          點(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>
                  日韩中文字幕第一页 | 无码高清一卡二卡免费视频 | 国产无套精品一区二区 | 躁躁躁日日躁 | 成人做爱视频免费看 |