<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)檢測優(yōu)化的實用Trick

          共 3942字,需瀏覽 8分鐘

           ·

          2020-09-17 15:57

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

          作者丨mo7022515wo
          來源丨?GiantPandaCV
          編輯丨極市平臺

          極市導(dǎo)讀

          ?

          本文作者分享了自己在圖像預(yù)處理調(diào)參、模型訓(xùn)練調(diào)參等方面中的技巧,并提醒讀者要多注意數(shù)據(jù)的分布和呈現(xiàn)的狀態(tài)。


          對卷積網(wǎng)絡(luò)來說,所學(xué)習(xí)的就是數(shù)據(jù)集的數(shù)據(jù)分布,你的卷積核參數(shù)最后形成的也是對數(shù)據(jù)集中特征分布的認(rèn)知。

          寫這篇文章就是因為up主的邀請,然后分享一下自己工作時候總結(jié)的一些經(jīng)驗和技巧,不一定適用別的網(wǎng)絡(luò),有的還可能會有反作用,所以也就是給大家提供一個思路,歡迎拍磚吧,因為都是公司數(shù)據(jù),分享試驗結(jié)果也比較麻煩,所以大家看個思路就好。

          1、預(yù)處理技巧分享


          圖像預(yù)處理部分調(diào)參的主要目的是對輸入數(shù)據(jù)進行增強,使得網(wǎng)絡(luò)模型在訓(xùn)練的過程中能更專注于目標(biāo)特征部分的學(xué)習(xí)。常用的方式是圖像的隨機旋轉(zhuǎn)、裁剪以及翻轉(zhuǎn)等方式,這些方式的預(yù)處理其本質(zhì)其實是為了讓你的數(shù)據(jù)集更豐富,讓網(wǎng)絡(luò)能夠?qū)W習(xí)到更多的分布情況,這個網(wǎng)上已經(jīng)有很多博客了,筆者就不贅述了;另一種調(diào)整的trick是在圖像上疊加信息,例如在輸入數(shù)據(jù)上增加高斯噪聲,椒鹽噪聲,從而提升網(wǎng)絡(luò)對有干擾和成像較差情況下的目標(biāo)檢測能力。本文將對圖像上疊加信息的調(diào)參技巧進行一定的擴展講解。

          1、為什么在原始圖像上疊加信息會管用,不會破壞原有的圖像信息么?

          在圖像上疊加信息分成兩類,一類是疊加噪聲,這種操作的目的是為了讓網(wǎng)絡(luò)能夠適應(yīng)圖像質(zhì)量不佳情況下的圖像檢測任務(wù),在板端實測的結(jié)果,這種疊加噪聲的方式也可以一定程度提高網(wǎng)絡(luò)對輸入圖像中待檢測目標(biāo)的仿射變換的適應(yīng)能力。筆者通過在輸入圖像上疊加一定量的高斯噪聲,在Hi3516CV500上完成基于yolov3-tiny的車牌檢測任務(wù)時,提高了0.5%的精度。

          另一類信息的疊加是對嘗試對圖像上某一特定特征進行增強,該增強的目的是突出該方面的圖像特征,使得網(wǎng)絡(luò)能夠首先注意到該種特征并更專注于此類特征的學(xué)習(xí),因為這種方式只是對圖像中的指定特征或位置有變動,并不會整體上對圖像的結(jié)構(gòu)有巨大的改變,所以并不會破壞圖像的信息可讀性。例如:利用canny算子對圖像中的邊緣特征進行增強。

          2、上面說的兩種調(diào)參技巧是怎么想出來的?

          我們都知道,網(wǎng)絡(luò)學(xué)習(xí)的是數(shù)據(jù)中的參數(shù)分布,何凱明大神也在retinanet的論文里提到過,數(shù)據(jù)的不平衡是影響檢測網(wǎng)絡(luò)性能的主要因素,而focal loss的提出就是讓網(wǎng)絡(luò)在學(xué)習(xí)時更專注于漏檢和誤分的樣本。那么我們接著這個思路想,如何使得網(wǎng)絡(luò)更專注于目標(biāo)區(qū),從而獲得盡量多的價值更高的誤撿和漏檢樣本呢?花朵吸引蜜蜂靠的是自己的香味和更鮮艷的外表,所以我們也要讓目標(biāo)區(qū)域更“顯眼”,而平時在訓(xùn)練檢測網(wǎng)絡(luò)時,發(fā)現(xiàn)對數(shù)據(jù)集進行標(biāo)注時,anchor base類算法,目標(biāo)標(biāo)注框比實際的物體緊縮框大大概幾個像素時得到的檢測結(jié)果統(tǒng)計精度和定位框的穩(wěn)定性都會好,那么我們是不是可以認(rèn)為,對anchor base的檢測網(wǎng)絡(luò)來說,目標(biāo)物體的邊緣也是很重要的,所以就想到了通過canny算子增強邊緣的方式來增強訓(xùn)練數(shù)據(jù)。

          3、如何在實際的網(wǎng)絡(luò)訓(xùn)練中應(yīng)用以上的技巧?

          實際使用過程如下:

          1)通過對輸入數(shù)據(jù)的手動查驗或自動化統(tǒng)計,確定較好的canny閾值

          2)利用閾值對訓(xùn)練樣本中10-20個batch的數(shù)據(jù)進行canny邊緣增強。

          3)增強方式為:原圖轉(zhuǎn)灰度提取到的canny邊緣所對應(yīng)的原圖像素位置進行對比度增強或直接涂黑。加深程度可以由自定義的超參數(shù)alpha來指定。

          4)用這10-20個batch的數(shù)據(jù)進行幾個epoch的訓(xùn)練后再換成普通數(shù)據(jù)進行訓(xùn)練。

          2、模型訓(xùn)練參數(shù)調(diào)整


          講了預(yù)訓(xùn)練時候的數(shù)據(jù)增強,接下來是模型訓(xùn)練參數(shù)部分。其實這部分網(wǎng)上講的trick很多了,大家平時注意搜集一下或者github上找一找,就有很多人的練手的倉庫可以跟著學(xué)。我也就不多講了,因為我也不敢說學(xué)全了。我講講我自己實際跑模型時候的一些想法。

          1、BFEnet特征擦除網(wǎng)絡(luò)

          這個網(wǎng)絡(luò)是reid方向的,先講這個是因為,這個特征擦除和上面講到的噪聲本質(zhì)上有相似的地方,都是通過在訓(xùn)練時遮蔽一部分特征值,來讓網(wǎng)絡(luò)習(xí)慣一定量的噪聲干擾,從而增強性能。這個技巧可以用在應(yīng)對有遮擋的場景下的模型。

          2、anchor的調(diào)整

          在yolo的代碼里大家肯定都看了,作者是根據(jù)你給的數(shù)據(jù)集里面,標(biāo)定的目標(biāo)的長和寬進行k-means的聚類,然后確定在當(dāng)前這個數(shù)據(jù)集上的anchor的。我這里的經(jīng)驗就是,我發(fā)現(xiàn)有人問過我為啥我只訓(xùn)練一類的檢測,然后重新計算的anchor6個或者9個anchor尺寸差的都不大,但是在實際檢測的時候,卻檢測不到東西。我的結(jié)論是:對anchor的設(shè)計應(yīng)該是基于模型作者默認(rèn)的anchor進行微調(diào)而不是完全的重新計算。

          原因:大家都知道,yolov3來說,輸出是三個特征圖,分別對應(yīng)小目標(biāo),中目標(biāo)和大目標(biāo)。比如我們要檢測的目標(biāo)在圖像中占比我們?nèi)搜鄹杏X應(yīng)該是比較大的,然后我們統(tǒng)計的框也都是比較大的尺寸,但是在實際訓(xùn)練的時候,并不是說大目標(biāo)就一定由yolov3的最初設(shè)計的大目標(biāo)輸出層輸出的。很可能就是由中間目標(biāo)層輸出的,而因為anchor的設(shè)計過大,導(dǎo)致訓(xùn)練的網(wǎng)絡(luò)不收斂的有之,明明收斂了,卻檢測不到目標(biāo)的情況也有之。

          解決辦法:在設(shè)計anchor的時候,首先統(tǒng)計目標(biāo)框的分布,然后進行聚類,聚類后替換或修改原有的9個anchor中和你計算的anchor相近的幾個原有的anchor值。然后再訓(xùn)練,如果框還是不夠緊縮,再對某幾個框進行精調(diào)就可以了,核心思路就是:anchor的分布也要滿足對全集的稀疏覆蓋而不僅僅是你的當(dāng)前數(shù)據(jù)集。

          3、后處理的優(yōu)化

          后處理的優(yōu)化部分嚴(yán)格來說不算是網(wǎng)絡(luò)訓(xùn)練的trick了,應(yīng)該是部署的trick,比如海思的NPU部署的時候,會限制比較大的pool核,所以最好訓(xùn)練的時候就把大的pooling切換為幾個小的連續(xù)pooling,實測雖然理念上兩者應(yīng)該是差不多的,但是實際上還是差了0.3%的精度。(指的是直接多層的pooling轉(zhuǎn)換到板子和訓(xùn)練時是一個大的pooling,到轉(zhuǎn)換時候再改結(jié)構(gòu)成幾個小的pooling)

          還有一個就是nms部分,這部分也有同學(xué)問過我說因為我的數(shù)據(jù)集有遮擋,可能兩個離的比較近的,nms就把有遮擋的那個小目標(biāo)去掉了。這部分分享一個小技巧就是,你在算nms的時候,也關(guān)注一下兩個框的中心點距離,可以設(shè)置中心點距離超過多少的兩個框,不做nms。這樣就能避免nms的一部分武斷刪除檢測結(jié)果bbox。

          4、大模型訓(xùn)練時的一個訓(xùn)練技巧

          有一位同學(xué)問過我,就是為啥同樣的模型,用比較少的數(shù)據(jù)訓(xùn)練的時候很快到了97%的MAP,但是換300w的大數(shù)據(jù)集的訓(xùn)練以后,卡在93%上不去了。這里面有一個技巧叫warm up,也就是說在大數(shù)據(jù)下訓(xùn)練模型的時候,可以先從大數(shù)據(jù)集上取一部分?jǐn)?shù)據(jù)訓(xùn)練模型,然后以這個訓(xùn)練的模型為預(yù)訓(xùn)練模型,在大數(shù)據(jù)集上,增大batch_size再進行訓(xùn)練,至少沒卡在93%這個問題上了。

          5、學(xué)習(xí)率手動修正策略

          我們訓(xùn)練的時候,一般都會設(shè)置學(xué)習(xí)率的衰減,有很多的方式,按已迭代步長的,按當(dāng)前損失值的,按訓(xùn)練集當(dāng)前損失值和測試集計算的損失值的gap差值做修正項的。我這里提到的技巧就是比如以步長調(diào)整學(xué)習(xí)率為例,什么時候可以靠自動化的修正學(xué)習(xí)率,什么時候要手動調(diào)整一下。

          我們在訓(xùn)練模型的時候,一般都會關(guān)注損失函數(shù)變化曲線圖,在曲線圖中,數(shù)據(jù)集的稀疏程度能通過損失曲線的震蕩情況有一定的反映,如果有個別的跳點,多為數(shù)據(jù)集中的壞數(shù)據(jù)(標(biāo)記錯誤數(shù)據(jù)),當(dāng)我們的損失圖呈現(xiàn)為震蕩--階躍--在另一個損失值附近震蕩時,就要注意了,此時多半是因為你的數(shù)據(jù)集在做打亂的時候數(shù)據(jù)并沒有打的很散,可以在這個位置先停止訓(xùn)練并記錄當(dāng)前狀態(tài),再降低學(xué)習(xí)率,繼續(xù)訓(xùn)練,等訓(xùn)練數(shù)據(jù)再次開始恢復(fù)之前的震蕩位置時,再恢復(fù)學(xué)習(xí)率訓(xùn)練。

          這樣操作的原因是為了避免在參數(shù)中引入過大的噪聲,噪聲分兩種,一種就是錯誤的數(shù)據(jù),比如背景啊,像目標(biāo)但是不是目標(biāo)的東西,還有就是多類別訓(xùn)練的時候,對每個類別來說,其余類別也算是噪聲的一種。所以采用要么把數(shù)據(jù)集弄好(這個很難,我也沒看過誰的文章里真的能說清把訓(xùn)練集弄好是啥樣的),要么加大batch,要么就訓(xùn)練時候注意。

          3、總結(jié)


          模型的調(diào)參訓(xùn)練技巧其實說白了就是怎么讓模型得到的是數(shù)據(jù)全集的稀疏分布,且和別的類別有比較好的區(qū)分,也就是類內(nèi)差小類間差則盡量大。以這個為核心,告訴模型應(yīng)該關(guān)注什么,少關(guān)注什么,既然是數(shù)據(jù)的科學(xué),多關(guān)注數(shù)據(jù)的分布和呈現(xiàn)的狀態(tài),祝大家在訓(xùn)練的時候都得到自己滿意的結(jié)果。

          推薦閱讀



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

          △長按添加極市小助手

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

          覺得有用麻煩給個在看啦~??
          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  毛片在线视频 | 精品内射无码 | 男女日皮的视频 | 成人久久 | 97办公室三级电影中文字幕 |