>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最..." />
<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)檢測中的Anchor機(jī)制

          共 5710字,需瀏覽 12分鐘

           ·

          2020-10-14 22:50

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          作者丨yanwan
          來源丨AI約讀社
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

          ?

          從Faster RCNN開始,本文分析了SSD和YOLO系列的anchor任務(wù),最后簡評(píng)了兩個(gè)對(duì)YOLOv4的repo。>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

          前段時(shí)間,YOLOv4&v5大火,而很多人忽視了YOLOv5在anchor上的一些細(xì)節(jié)變化,因此,本文從Faster RCNN著手,逐步分析SSD、YOLOv4&v5的anchor三個(gè)任務(wù)和參數(shù)化坐標(biāo)


          1 Faster RCNN


          Faster RCNN可以看作是RPN(Regio Proposal Network) 和 Fast RCNN 的組合,由下圖可以看到,輸入圖像經(jīng)過RPN后輸出proposals。RPN有三個(gè)任務(wù),也可以說是與anchor相關(guān)三個(gè)任務(wù):

          分配任務(wù):從眾多anchors中,判斷哪些anchor是正樣本,哪些是負(fù)樣本;

          分類任務(wù):對(duì)分配好的anchors使用交叉熵loss進(jìn)行分類的訓(xùn)練;

          回歸任務(wù):對(duì)于正樣本的anchors使用mooth_l1 loss進(jìn)行回歸訓(xùn)練,以獲得修正值。

          1.1 分配任務(wù)
          Faster RCNN中的正樣本有兩種定義。第一,與ground truth bbox有最大的IoU的anchors作為正樣本,第二,與ground truth bbox的IoU大于0.7的anchors作為正樣本;而定義的負(fù)樣本為與ground truth bbox的IoU小于0.3的樣本。
          1.2 RPN Loss Function
          如下所示,加號(hào)前是分類損失,加號(hào)后是回歸損失。

          Pi:網(wǎng)絡(luò)輸出的預(yù)測分類概率;
          Pi^*:標(biāo)簽。正樣本時(shí),?Pi^*=1;負(fù)樣本時(shí),Pi^*=0;
          ti: 預(yù)測的Bounding Box的參數(shù)化坐標(biāo)(parameterized coordinates);
          ti^*:Ground Truth的Bounding Box的參數(shù)化坐標(biāo),也就是學(xué)習(xí)的目標(biāo);
          Ncls:mini-batch size;
          Nreg: Anchor Location的數(shù)量;
          λ:權(quán)重平衡參數(shù),
          1.2.1 分類任務(wù)
          需要說明的是RPN輸出的Classification并不是判定物體是具體的哪一類,而是輸出一個(gè)二分類,只判斷是否是object。
          1.2.2 回歸任務(wù)
          (1)由上述可知,回歸的是參數(shù)化坐標(biāo),其計(jì)算方式如下:

          其中,x,y,w,h是Bounding Box的中心坐標(biāo)和寬高;而 ?則分別對(duì)應(yīng)Predicated BBox、Anchor BBox和Ground Truth BBox;y,w,h也同理。
          (2)為什么要回歸參數(shù)化坐標(biāo)?
          為什么要學(xué)習(xí)偏移而不是實(shí)際值?

          Anchor已經(jīng)粗略地“框住了”輸入圖像中的目標(biāo),明顯的一個(gè)問題是,框的不夠準(zhǔn)確。因?yàn)槭芟抻贏nchor的生成方式,Anchor的坐標(biāo)永遠(yuǎn)都是固定的那幾個(gè)。所以,如果我們預(yù)測相對(duì)于Anchor的offset,那么,就可以通過預(yù)測的offset調(diào)整錨框位置,從而得到更精準(zhǔn)的bounding box。

          為什么要學(xué)習(xí)偏移系數(shù)而不是偏移量?

          首先,對(duì)于預(yù)測的bounding box的w和h可以通過anchor進(jìn)行縮放,但有一個(gè)基本的要求,就是h和w都必須為正值,而網(wǎng)絡(luò)最后一層的預(yù)測輸出是沒法保證正負(fù)的,所以最簡單的方法就是對(duì)預(yù)測輸出求exp,這樣就保證了預(yù)測值恒為正。那么反過來,對(duì)預(yù)測目標(biāo)就是求log。
          其次,對(duì)cx和cy除以anchor的寬和高的處理是為了做尺度歸一化。例如,大的box的絕對(duì)偏移量一般較大,而小的box的絕對(duì)偏移量一般較小,除以寬和高消除這種影響。即兩個(gè)框大小不一,但相對(duì)值卻一致。
          1.3 總結(jié)
          Faster RCNN首次提出了anchor機(jī)制,后續(xù)大量流行的SSD、R-CNN、Fast RCNN、Faster RCNN、Mask RCNN和RetinaNet等等模型都是在建立在anchor基礎(chǔ)上的,而yolov3、yolov5等模型盡管對(duì)anchor做了一些調(diào)整,但出發(fā)點(diǎn)不變,都是從anchor的三個(gè)任務(wù)和參數(shù)化坐標(biāo)出發(fā),因此,F(xiàn)aster RCNN很重要。
          到此,已經(jīng)把 anchor 的三個(gè)任務(wù)和參數(shù)化坐標(biāo)內(nèi)容介紹完,接下來的再來分析SSD和YOLO中的 anchor。

          2 SSD


          Faster R-CNN先通過RPN網(wǎng)絡(luò)得到候選框,然后再進(jìn)行分類與回歸,而SSD可以一步到位完成檢測。相比,SSD有兩大改變:

          使用不同尺度的特征圖來做檢測,大尺度特征圖用來檢測小物體,而小尺度特征圖用來檢測大物體;

          不同尺度和長寬比的先驗(yàn)框(Prior boxes,Default boxes,就是Faster RCNN中的anchors)

          2.1 分配任務(wù)
          正樣本的選擇分為兩步:

          先是ground truth box找到與其IOU最大的那個(gè)先驗(yàn)框(prior boxes),這樣保證每個(gè)GT都有其對(duì)應(yīng)的先驗(yàn)框;

          然后是對(duì)每個(gè)先驗(yàn)框找到與GT的IOU大于某個(gè)閾值(例如:0.5)的先驗(yàn)框;

          而剩下的anchor都屬于負(fù)樣本。
          2.2 Loss Function

          N :是與 ground truth box 相匹配的 prior boxes 個(gè)數(shù)
          x:是prior boxes 的預(yù)測分類概率;
          c:是標(biāo)簽,對(duì)應(yīng)的類別
          l:是predicted box
          g:是ground truth box
          2.2.1 分類任務(wù)
          盡管一個(gè)ground truth可以與多個(gè)先驗(yàn)框匹配,但正樣本還是很少,為了保證正負(fù)樣本盡量平衡,SSD采用了hard negative mining,就是對(duì)負(fù)樣本進(jìn)行抽樣,采樣時(shí)按照置信度誤差(預(yù)測背景的置信度越小,誤差越大)進(jìn)行降序排列,選取誤差的較大的top-k作為訓(xùn)練的負(fù)樣本,并保證正負(fù)樣本比例是1:3。
          這樣就可以使用交叉熵進(jìn)行分類任務(wù)的訓(xùn)練了,公式如下:

          2.2.2 回歸任務(wù)
          與Faster R-CNN類似,對(duì) prior boxes (d)的參數(shù)化坐標(biāo) ?進(jìn)行回歸:

          其中,cx,cy,w,h分別Bounding Box的中心坐標(biāo)和寬高,g是ground truth box,d是 prior box, ?是Ground Truth的Bounding Box的參數(shù)化坐標(biāo),也就是學(xué)習(xí)的目標(biāo),而l是predicted box的參數(shù)化坐標(biāo)。
          2.3 總結(jié)
          SSD的anchor的三個(gè)任務(wù)和參數(shù)化坐標(biāo)與Faster RCNN是一樣的,但不能因此忽視SSD,SSD也是重要的里程碑。在我看來使用multi-scale feature maps實(shí)現(xiàn)的one stage檢測器SSD的貢獻(xiàn)是:能夠在不怎么降低精度的情況下使得速度得到了很大的提升。

          3 YOLO

          3.1 分配任務(wù)
          3.1.1 yolo v3&v4
          在yolo v3&v4中,anchor匹配策略和SSD、Faster RCNN類似:保證每個(gè)gt bbox有一個(gè)唯一的anchor進(jìn)行對(duì)應(yīng),匹配規(guī)則就是IOU最大,并且某個(gè)gt不能在三個(gè)預(yù)測層的某幾層上同時(shí)進(jìn)行匹配。不考慮一個(gè)gt bbox對(duì)應(yīng)多個(gè)anchor的場合,也不考慮anchor是否設(shè)置合理。
          3.1.2 yolo v5
          而yolov5采用了跨網(wǎng)格匹配規(guī)則,增加正樣本anchor數(shù)目的做法:
          對(duì)于任何一個(gè)輸出層,拋棄了基于max iou匹配的規(guī)則,而是直接采用shape規(guī)則匹配,也就是該bbox和當(dāng)前層的anchor計(jì)算寬高比,如果寬高比例大于設(shè)定閾值,則說明該bbox和anchor匹配度不夠,將該bbox過濾暫時(shí)丟掉,在該層預(yù)測中認(rèn)為是背景;code如下:
          r = t[None, :, 4:6] / anchors[:, None] # wh ratio j = torch.max(r, 1. / r).max(2)[0] < model.hyp['anchor_t']
          對(duì)于剩下的bbox,計(jì)算其落在哪個(gè)網(wǎng)格內(nèi),同時(shí)利用四舍五入規(guī)則,找出最近的兩個(gè)網(wǎng)格,將這三個(gè)網(wǎng)格都認(rèn)為是負(fù)責(zé)預(yù)測該bbox的,可以發(fā)現(xiàn)粗略估計(jì)正樣本數(shù)相比前yolo系列,增加了三倍。code如下:
          gxy = t[:, 2:4] # grid xygxi?=?gain[[2,?3]]?-?gxy??#?inversej,?k?=?((gxy?%?1.??1.)).Tl,?m?=?((gxi?%?1.??1.)).Tj = torch.stack((torch.ones_like(j), j, k, l, m))t = t.repeat((5, 1, 1))[j]offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j]
          如下圖所示,綠點(diǎn)表示該gt bbox中心,現(xiàn)在需要額外考慮其2個(gè)最近的鄰域網(wǎng)格的anchor也作為該gt bbox的正樣本,明顯增加了正樣本的數(shù)量。

          3.2 Loss Function
          在YOLOv3-v5中,Loss分為三個(gè)部分:

          參數(shù)化坐標(biāo)box:xywh部分的參數(shù)化坐標(biāo),也就是box的loss

          置信度conf:也就是obj的loss

          類別cls,也就是class的loss

          (1)lbox分支
          【YOLOv3&v4】使用的是如下方式:

          bx,by,bw,bz 分別是即邊界框bbox相對(duì)于feature map的位置和寬高;

          cx 和 cy 分別代表feature map中g(shù)rid cell的左上角坐標(biāo),在yolo中每個(gè)grid cell在feature map中的寬和高均為1;

          pw 和 py 分別代表Anchor映射到feature map中的的寬和高,anchor box原本設(shè)定是相對(duì)于416*416坐標(biāo)系下的坐標(biāo),需要除以stride如32映射到feature map坐標(biāo)系中;

          tx,ty,tw,tzh這4個(gè)參數(shù)化坐標(biāo)是網(wǎng)絡(luò)學(xué)習(xí)的目標(biāo),其中tx,ty是預(yù)測的坐標(biāo)偏移值,tw和th是尺度縮放,sigma代表sigmoid函數(shù)。
          與faster rcnn和ssd中的參數(shù)化坐標(biāo)不同的是x和y的回歸方式,YOLO v3&v4使用了sigmoid函數(shù)進(jìn)行偏移量的規(guī)則化,而faster和ssd中對(duì)x,y除以anchor的寬和高進(jìn)行規(guī)則化。

          對(duì)于yolov3使用的loss是smooth l1損失,而yolov4使用的是CIOU損失。

          YOLOv5】參數(shù)化坐標(biāo)的方式和yolo v3&v4是不一樣的,如下:
          pxy = ps[:, :2].sigmoid() * 2. - 0.5pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i]pbox = torch.cat((pxy, pwh), 1).to(device) # predicted box
          這樣,pxy的取值范圍是[-0.5,1.5],pwh的取值范圍是(0,4*anchors[i]],這是因?yàn)椴捎昧丝缇W(wǎng)格匹配規(guī)則,要跨網(wǎng)格預(yù)測了。
          其損失函數(shù)使用的是giou損失。
          (2)lobj分支
          lobj 表示該anchor中是否含有物體的概率,默認(rèn)使用BCEWithLogitsLoss。
          (3)lcls分支
          lcls?表示該anchor屬于哪一類的概率,默認(rèn)使用BCEWithLogitsLoss。
          例如,對(duì)于coco數(shù)據(jù)集上訓(xùn)練的YOLO的每個(gè)anchor的維度都是85,前5個(gè)屬性是(Cx,Cy,w,h,confidence),confidence對(duì)應(yīng)lobj,后80個(gè)維度對(duì)應(yīng)lcls。
          3.3 總結(jié)

          github上有很多版本的yolov4,初步看了以下兩個(gè)repo:

          1、u版:?
          https://github.com/WongKinYiu/PyTorch_YOLOv4
          熟悉yolov5的同學(xué)會(huì)對(duì)u版不會(huì)感到陌生,該版的yolov4其實(shí)只是用了yolov4的backbone,參數(shù)化坐標(biāo)及l(fā)oss等等都與yolov5的一樣。
          2、star最多版:
          https://github.com/Tianxiaomo/pytorch-YOLOv4
          從參數(shù)化坐標(biāo)及l(fā)oss來看,和yolov3一致,但還是少了挺多,如label smoothing, Self-Adversarial Training,DIOU NMS等等。
          其它版本:并不是很規(guī)范,所以關(guān)注量也并不高。
          雖然都不是嚴(yán)格的 yolov4,但也不妨礙我們使用(本人不想肝DarkNet),個(gè)人認(rèn)為u版的更好些,因?yàn)樽远x網(wǎng)絡(luò)會(huì)方便簡介很多。
          本文回顧 Faster RCNN 和 SSD 中的 Anchor 的三個(gè)任務(wù)和參數(shù)化坐標(biāo),然后比較了YOLOv3&v4&v5的 Anchor及其loss,最后簡評(píng)了github上兩個(gè)YOLOv4的repo,希望對(duì)大家有所幫助。


          推薦閱讀



          ?ACCV 2020國際細(xì)粒度網(wǎng)絡(luò)圖像識(shí)別競賽正式開賽!



          添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳),即可申請(qǐng)加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群:月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

          △長按添加極市小助手

          △長按關(guān)注極市平臺(tái),獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~??


          瀏覽 79
          點(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>
                  久久免费视频观看 | 青青草天天搞 | 影音先锋av资源网站 | www.操骚逼 | 永久免费 看片直接看 |