<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是什么?怎么科學(xué)設(shè)置?人人都能徹底搞懂的Anchor深度解析

          共 6586字,需瀏覽 14分鐘

           ·

          2021-01-22 22:17

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

          作者丨元峰
          來源丨AIZOO
          編輯丨極市平臺

          極市導(dǎo)讀

          ?

          在基于anchor的目標(biāo)檢測網(wǎng)絡(luò)中,一個(gè)至關(guān)重要的步驟就是科學(xué)的設(shè)置anchor,可以說Anchor設(shè)置的合理與否,極大的影響著最終模型檢測性能的好壞。本文作者以通俗易懂的語言介紹Anchor是什么,以及如何科學(xué)的設(shè)置anchor。?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

          對于目標(biāo)檢測新手來說,一個(gè)比較常見的誤區(qū)就是拿到模型,直接無修改的在自己的數(shù)據(jù)集上訓(xùn)練,最終可能導(dǎo)致模型雖然有一定效果,但是mAP指標(biāo)可能低于別人的十幾個(gè)點(diǎn),這里很有可能就是anchor設(shè)置的不合理。筆者記得在之前面試應(yīng)屆生的時(shí)候,也有不少學(xué)生不能清晰的表達(dá)anchor是什么,以及怎么科學(xué)的設(shè)置。筆者開源人臉口罩檢測模型和數(shù)據(jù)后,也有不少同行和學(xué)生在自己的網(wǎng)絡(luò)上訓(xùn)練,通過與他們的交流,我發(fā)現(xiàn)很多人都遇到了不知道anchor怎么設(shè)置,或者設(shè)置不科學(xué)的問題。

          今天,我們講解一下anchor,因?yàn)檫@篇文章面向新手,所以筆者爭取用質(zhì)樸(講人話)的語言進(jìn)行簡單的介紹,同時(shí),我們也將相關(guān)代碼上傳到了Github,大家可以在自己的數(shù)據(jù)集上可視化數(shù)據(jù)分布(鏈接見文末)。

          在介紹Anchor之前,我們先介紹一下傳統(tǒng)的人臉識別算法,是怎么檢測出圖片中的人臉的。以下圖為例,如果我們要檢測圖中小女孩的人臉位置,一個(gè)比較簡單暴力的方法就是滑窗,我們使用不同大小、不同長寬比的候選框在整幅圖像上進(jìn)行窮盡式的滑窗,然后提取窗口內(nèi)的特征(例如Haar、LBP、Hog等特征),再送入分類器(SVM、Adaboost等)判斷該窗口內(nèi)包含的是否為人臉。這種方法簡單易理解,但是這類方法受限于手動設(shè)計(jì)的特征,召回率和準(zhǔn)確率通常不是很高。

          在深度學(xué)習(xí)時(shí)代,大名鼎鼎的RCNN和Fast RCNN依舊依賴滑窗來產(chǎn)生候選框,也就是Selective Search算法,該算法優(yōu)化了候選框的生成策略,但仍舊會產(chǎn)生大量的候選框,導(dǎo)致即使Fast RCNN算法,在GPU上的速度也只有三、四幀每秒。直到Faster RCNN的出現(xiàn),提出了RPN網(wǎng)絡(luò),使用RPN直接預(yù)測出候選框的位置。RPN網(wǎng)絡(luò)一個(gè)最重要的概念就是anchor,啟發(fā)了后面的SSD和YOLOv2等算法,雖然SSD算法稱之為default box,也有算法叫做prior box,其實(shí)都是同一個(gè)概念,他們都是anchor的別稱。

          1. 什么是Anchor

          那么,anchor到底是什么呢?如果我們用一句話概括——就是在圖像上預(yù)設(shè)好的不同大小,不同長寬比的參照框。(其實(shí)非常類似于上面的滑窗法所設(shè)置的窗口大小)

          下圖來自《動手學(xué)深度學(xué)習(xí)》中的例子,假設(shè)一個(gè)256x256大小的圖片,經(jīng)過64、128和256倍下采樣,會產(chǎn)生4x4、2x2、1x1大小的特征圖,我們在這三個(gè)特征圖上每個(gè)點(diǎn)上都設(shè)置三個(gè)不同大小的anchor。當(dāng)然,這只是一個(gè)例子,實(shí)際的SSD模型,在300x300的輸入下,anchor數(shù)量也特別多,其在38x38、19x19、10x10、5x5、3x3、1x1的六個(gè)特征圖上,每個(gè)點(diǎn)分別設(shè)置4、6、6、6、6、4個(gè)不同大小和長寬比的anchor,所以一共有38x38x4+ 19x19x6+ 10x10x6+ 5x5x6+ 3x3x4+ 1x1x4= 8732個(gè)anchor。

          借助神經(jīng)網(wǎng)絡(luò)強(qiáng)大的擬合能力,我們不再需要計(jì)算Haar、Hog等特征,直接讓神經(jīng)網(wǎng)絡(luò)輸出,每個(gè)anchor是否包含(或者說與物體有較大重疊,也就是IoU較大)物體,以及被檢測物體相對本anchor的中心點(diǎn)偏移以及長寬比例。 以下圖為例:

          一般的目標(biāo)檢測網(wǎng)絡(luò)可能有成千上萬個(gè)anchor,例如標(biāo)準(zhǔn)SSD在300x300輸入下有8732個(gè)anchor,在500x500下anchor數(shù)量過萬。我們拿上圖中的三個(gè)anchor舉例,神經(jīng)網(wǎng)絡(luò)的輸出,也就是每個(gè)anchor認(rèn)為自己是否含有物體的概率,物體中心點(diǎn)與anchor自身的中心點(diǎn)位置的偏移量,以及相對于anchor寬高的比例。因?yàn)閍nchor的位置都是固定的,所以就可以很容易的換算出來實(shí)際物體的位置。以圖中的小貓為例,紅色的anchor就以99%的概率認(rèn)為它是一只貓,并同時(shí)給出了貓的實(shí)際位置相對于該anchor的偏移量,這樣,我們將輸出解碼后就得到了實(shí)際貓的位置,如果它能通過NMS(非最大抑制)篩選,它就能順利的輸出來。但是,綠色的anchor就認(rèn)為它是貓的概率就很小,紫色的anchor雖然與貓有重疊,但是概率只有26%。

          其實(shí)SSD的推理很簡單,就是根據(jù)anchor進(jìn)行位置解碼,然后進(jìn)行NMS過程,就完成了(更詳細(xì)的推理介紹,請查看我們這篇文章如何在瀏覽器運(yùn)行深度神經(jīng)網(wǎng)絡(luò)?以人臉口罩識別為例進(jìn)行講解)。在訓(xùn)練的時(shí)候,也就是給每張圖片的物體的Bounding Box,相對于anchor進(jìn)行編碼,如果物體的Bounding Box與某個(gè)anchor的IoU較大,例如大于0.5就認(rèn)為是正樣本,否則是負(fù)樣本(當(dāng)然,也有算法將大于0.7的設(shè)為正樣本,小于0.3的算負(fù)樣本,中間的不計(jì)算損失)。

          以SSD作者給出的示例圖為例,圖中有一只貓和一只狗,這只貓?jiān)?x8的特征圖上所設(shè)置anchor中,有兩個(gè)(藍(lán)色部分)與貓的IoU較大,可以認(rèn)為是正樣本,而對于狗,在4x4的特征圖上的設(shè)置的anchor,有一個(gè)(紅色部分)與狗的IoU較大,可以認(rèn)為是正樣本。其他的,都算作負(fù)樣本。在實(shí)際中,因?yàn)閍nchor非常密集,所以SSD算法中,會有多個(gè)anchor與物體的IoU大于閾值,所以可能多個(gè)anchor都是對應(yīng)同一個(gè)物體的正樣本(例如這只貓,就可能有不止2個(gè)匹配的正樣本)。

          看到這里大家應(yīng)該比較明白了,在訓(xùn)練的時(shí)候,需要anchor的大小和長寬比與待檢測的物體尺度基本一致,才可能讓anchor與物體的IoU大于閾值,成為正樣本,否則,可能anchor為正樣本的數(shù)目特別少,就會導(dǎo)致漏檢很多。

          我們舉個(gè)例子,如果您要檢測道路兩邊的電線桿,電線桿的寬高比可能不止1:10,而且特別細(xì)。如果您設(shè)置的anchor長寬比為1:1、1:2、 2:1、 1:3、 3:1這五個(gè)不同的長寬比,那可能到導(dǎo)致在訓(xùn)練的時(shí)候,沒有哪個(gè)anchor與電線桿的IoU大于0.5,導(dǎo)致全部為負(fù)樣本,那么,這樣的anchor設(shè)置,模型怎么可能檢測出來電線桿呢?(雖然我們在實(shí)現(xiàn)SSD算法的時(shí)候,即使某個(gè)物體與所有anchor的IoU都不大于0.5的閾值,也會可憐可憐它,給它強(qiáng)行分配一個(gè)IoU最大的anchor,即使IoU只有0.3, 但是這樣,每個(gè)物體只能分配一個(gè),而且寬高偏移量還比較大,導(dǎo)致回歸不準(zhǔn))。

          到這里,大家應(yīng)該知道了,對于目標(biāo)檢測,anchor合理設(shè)置大小和寬高比,可以說非常重要。那么,如何科學(xué)的設(shè)置anchor呢?

          2. 如何科學(xué)的設(shè)置Anchor

          在FasterRCNN的RPN網(wǎng)絡(luò)部分,anchor為三個(gè)尺度{128, 256, 512},三個(gè)比例{1:1, 1:2, 2:1},所以一共9組anchor。

          在SSD論文中,作者使用6組定位層,每個(gè)定位層分別有6個(gè)anchor(不過第一和最后一個(gè)定位層只有4個(gè))。一個(gè)尺度,分別有1:1、1:2、2:1、1:3、3:1五個(gè)不同寬高比,再加一個(gè)后面特征圖的anchor尺度與該特征圖的尺度相乘再開根號,也就是:

          同樣是1:1比例,所以一共5+1=6組anchor。

          關(guān)于anchor的寬度,是尺度(scale,簡寫為s)乘以長寬比(aspect ratio,簡寫為ar)的根方,而高度,則是除以ar的根方。

          在SSD中,作者提到了anchor尺度大?。╯cale)的計(jì)算方法,也就是從最小的0.2,到最大的0.9,中間四個(gè)定位層的大小是等間隔采樣得到的。

          但是,但是,大家查看SSD開源的代碼,作者給出的得anchor大小并不是這么計(jì)算得到的。而是30、60、111、162、213、264(再加一個(gè)315)這7個(gè)尺度。我想,這應(yīng)該是作者根據(jù)數(shù)據(jù)集的物體框大小的分布而設(shè)置的。因?yàn)樯厦嫖覀兘榻B了,anchor只有跟你要檢測的物體的大小和長寬比更貼近,才能讓模型的效果更好。

          YOLOv3在三個(gè)不同尺度,每個(gè)尺度三個(gè)不同大小的anchor,一共九組。這位退出CV圈的Joseph Redmon大神則是在YOLOv2版本開始使用kmeans方法聚類得到合適的anchor。

          可見,三大框架的作者,在實(shí)際的公開數(shù)據(jù)集上,都是根據(jù)數(shù)據(jù)的實(shí)際分布來設(shè)置的,所以,我們在自己的數(shù)據(jù)集上訓(xùn)練目標(biāo)檢測網(wǎng)絡(luò)時(shí),一定!不要!拿到開源代碼就是一頓跑,拿起鍵盤就是干。

          3 .代碼示例

          我們將代碼開源放到了Github上。以人臉檢測數(shù)據(jù)集Wider Face為例,因?yàn)槿四槒南掳偷筋~頭,寬高比大約為1:1.4左右。在我們的開源代碼中,將example.py開頭設(shè)置文件路徑和要聚類的簇,以及是否將物體坐標(biāo)相對于圖像寬高尺度歸一化。

          ANNOTATIONS_PATH = "./data/widerface-annotations"
          CLUSTERS = 25
          BBOX_NORMALIZE = False
          然后代碼會自動讀取所有的xml文件中的物體坐標(biāo),然后運(yùn)行kmeans聚類,并將結(jié)
          果畫出來。我們可以看到數(shù)據(jù)分布如下:

          其中黑色點(diǎn)是隨機(jī)選的2000個(gè)物體框的大小,紅色三角為聚類結(jié)果,可能太密集了,不易查看,但代碼會輸出建議的25組anchor大?。?/p>

          建議anchor大小
          寬度 高度 高寬比
          10.000 12.000 1.2
          10.000 14.000 1.4
          14.000 12.000 0.9
          12.000 14.000 1.2
          12.000 16.000 1.3
          13.000 16.000 1.2
          12.000 18.000 1.5
          14.000 19.000 1.4
          16.000 19.000 1.2
          17.000 22.000 1.3
          19.000 22.000 1.2
          18.000 27.000 1.5
          23.000 29.000 1.3
          23.000 32.000 1.4
          28.000 32.000 1.1
          35.000 44.000 1.3
          41.000 51.000 1.2
          48.000 67.000 1.4
          49.000 67.000 1.4
          55.000 65.000 1.2
          59.000 69.000 1.2
          80.000 80.000 1.0
          80.000 82.000 1.0
          92.000 108.00 1.2
          204.00 246.00 1.2


          可以看到,建議的anchor高寬比都是1.3左右,另外,還有數(shù)據(jù)框的分布統(tǒng)計(jì)圖如下:

          可以看到人臉高寬比例多數(shù)都在1.4 : 1左右。所以,對于Wider Face人臉檢測,可以將anchor 設(shè)置為1:1、1.4:1、 1.7:1,而沒必要設(shè)置3:1、1:3這種明顯不合適的比例(畢竟,臉再長,也很少是3:1這么夸張的比例吧)。對于anchor的大小,可以查看上圖的寬度和高度統(tǒng)計(jì),參考聚類結(jié)果,設(shè)置合理的大小。

          4. 注意事項(xiàng)

          對于檢測網(wǎng)絡(luò),有的實(shí)現(xiàn),是用沒有歸一化的坐標(biāo),例如anchor設(shè)置為(30, 42)這種尺度大小,但是,有的算法實(shí)現(xiàn),是將坐標(biāo)和物體框的寬高比,除以圖片的寬和高。這里,就需要注意了。如果您的圖片都是正方形的,那歸一化后寬高比沒有變化,如果是1080P這種分辨率的攝像頭,那么長寬比是16:9了。本來就小的寬度,再除以1920,而高度除以1080,會導(dǎo)致歸一化后的人臉高度是寬度的2倍左右。例如下圖,圖片寬度約為高度的兩倍,歸一化后,人臉寬度相比高度要更小很多。

          我們將代碼中歸一化選項(xiàng)打開:

          BBOX_NORMALIZE = True

          再次運(yùn)行,可以看到統(tǒng)計(jì)的高寬比如下圖,可以看到高寬比最集中的是2:1(未歸一化時(shí)是1.4:1),因?yàn)閃iderFace數(shù)據(jù),多數(shù)圖片也是寬度大于高度的寬圖。

          歸一化的建議anchor大小如下,可以看到高寬比相比上面未歸一化的,明顯要更大一些。

          建議anchor大小
          寬度 高度 高寬比
          0.010 0.008 0.8
          0.013 0.011 0.9
          0.011 0.015 1.4
          0.010 0.018 1.8
          0.011 0.022 2.1
          0.013 0.020 1.5
          0.019 0.017 0.9
          0.014 0.025 1.8
          0.013 0.031 2.4
          0.017 0.028 1.7
          0.016 0.036 2.3
          0.020 0.033 1.7
          0.027 0.027 1.0
          0.021 0.039 1.9
          0.021 0.050 2.3
          0.026 0.043 1.6
          0.024 0.066 2.7
          0.030 0.054 1.8
          0.036 0.069 1.9
          0.054 0.057 1.1
          0.047 0.085 1.8
          0.059 0.114 1.9
          0.090 0.143 1.6
          0.139 0.233 1.7
          0.299 0.421 1.4


          所以,如果是使用歸一化的anchor大小,需要考慮圖片的寬高比例問題。

          同樣,即使您使用的是未歸一化的anchor大小,但是如果您將圖像直接resize成正方形大小,對于寬幅的圖像,也會面臨同樣的問題,我們將上面的圖resize成500x500的正方形,如下,可以看到高寬比進(jìn)一步加大。當(dāng)然,如果您的做法是將短邊通過padding補(bǔ)零的方式,使圖像為正方形,則不存在這個(gè)問題的。

          好了,總結(jié)一下,對于目標(biāo)檢測的anchor 設(shè)置,一定要根據(jù)您的數(shù)據(jù)分布設(shè)置合理的anchor,另外,也要考慮是否是歸一化的anchor大小,或者是否做了改變圖像長寬比的resize。

          我們的Github代碼地址:https://github.com/AIZOOTech/object-detection-anchors


          推薦閱讀




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

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

          覺得有用麻煩給個(gè)在看啦~??
          瀏覽 15
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  精品视频一区视频二区视频三区视频四区 | 福利一区在线观看 | 国产999高清无码精品导航 | 欧美成人精品一卡 | 靠逼视频免费网站 |