日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

目标检测系列(七)——CornerNet:detecting objects as paired keypoints

發布時間:2023/12/15 目标检测 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测系列(七)——CornerNet:detecting objects as paired keypoints 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 摘要
    • 1、引言
    • 2、相關工作
    • 3、CornerNet
      • 3.1 概況
      • 3.2 檢測角點
      • 3.3 角點的分組
      • 3.4 Corner Pooling
      • 3.5 沙漏網絡

論文鏈接: https://arxiv.org/abs/1808.01244
代碼鏈接: https://github.com/umich-vl/CornerNet

摘要

本文提出了CornetNet,一種利用單個卷積神經網絡來檢測b-box的方法,且是通過檢測b-box的“左上”和“右下”兩個關鍵點來檢測b-box。

相比之前的單階段檢測器,本文的方法不需要設定一系列的anchor box,且本文引入了corner pooling,有助于網絡更好的定位corners。

CornerNet網絡的效果:在 MS COCO 上獲得了42.2%的 AP,比目前的所有單階段檢測器都要好。

1、引言

目前的單階段檢測因為引入了anchor機制,獲得可以和兩階段檢測相媲美的精度的同時,有較高的效率。單階段檢測器在輸入圖像上放置了密集的 anchor ,并通過微調和回歸 box 尺寸來得到最終的預測。

使用anchor的方法的缺點:

  • 正負樣本不均衡:大部分檢測算法的anchor數量都成千上萬,(DSSD中使用了多于40k個anchor,RetinaNet 中使用了多于100k個anchor)但是一張圖中的目標數量并沒有那么多,這就導致正樣本數量會遠遠小于負樣本,因此有了對負樣本做欠采樣以及 focal loss等算法來解決這個問題。

  • 引入更多的超參數,比如anchor的數量、大小和寬高比等。

本文 CornerNet 的特點:

  • 一種新的、無anchor的單階段目標檢測方法

  • 檢測 b-box 的左上和右下角的角點

  • 使用單個卷積神經網絡來預測同一目標類別(category)中的所有實例的“左上”角點的和heatmap、右下角點的heatmap、每個檢測到角點的 embedding vector。嵌入向量用于對屬于同一目標的corner進行分組,也就是該網絡的訓練目標是實現對同一目標的“左上”和“右下”角點進行匹配,將兩者預測得到相同的嵌入向量。

  • 本文的方法很大程度地簡化了網絡的輸出,并且無需設計相應的 anchor。

  • 本文方法靈感源于Newell等人的文章(2017)中的多人姿態估計上下文中關聯嵌入方法,結構如圖1所示。
    圖1 將目標檢測為一對b-box的角點

    利用卷積網絡,對所有的左上角點生成一幅熱力圖,對所有右下角點生成一幅熱力圖,并且對所有檢測到的角點生成一個嵌入式向量。

    訓練網絡將屬于同一目標的角點預測成相同的嵌入式向量

  • corner pooling:一種新的 pooling 方法,有助于卷積網絡更好的定位b-box的角點。一個b-box的corner常常位于目標之外,如圖2所示,所以不能使用局部信息來對corner進行定位。

    為了確定在某個像素點上是否有“左上”角點,需要從目標邊界的最上邊從右至左來進行水平掃描,從邊界的左邊從下至上來進行垂直掃描,該掃描方法啟發了我們corner pooling 方法的產生。

    最終的輸出源于兩個特征圖,它包含兩個特征圖; 在每個像素位置,它最大池化從第一個特征映射到右側的所有特征向量,最大池化從第二個特征映射下面的所有特征向量,然后將兩個池化結果一起添加,如圖3所示

    我們認為,檢測角點效果比檢測b-box中心點或region proposal 方法更好的原因有兩個:

  • b-box 的中心確定后也很難確定b-box的位置,因為其基于目標的四個邊,而定位角點只基于兩個邊,更簡單。且使用 corner pooling使其更加簡單,因為該pooling方法能夠對corner的先驗知識進行編碼。

  • 角點能夠提供更有效的方法來密集的離散化box空間,只需要 O(wh)O(wh)O(wh) 個角點就可以表示 0(w2h2)0(w^2h^2)0(w2h2) 個 anchor boxes。

2、相關工作

已有的兩階段目標檢測方法精度高但效率較低,已有的單階段目標檢測方法也借鑒了 anchor-based 方法, SSD 和 RetinaNet 都使用了很多的anchor來進行檢測,但 Lin 等人(2017)在文章中提出,稠密的 anchor box會導致嚴重的正負樣本不平衡問題,從而發生難以訓練或訓練效果較差的問題。故他們提出了focal loss的方法,來動態調整每個anchor box的權重,使得單階段的方法能夠接近兩階段檢測的方法。

RefineDet(2017)提出了對anchor box 進行濾波的方法來減少負box的量,粗尺度的調整 anchor box。

本文的方法受啟發于Newell的多人姿態估計上下文中關聯嵌入[27]。Newell等人提出了一種在單個網絡中檢測和分組人類關節的方法。在他們的方法中,每個檢測到的人類關節都有一個嵌入向量。這些關節是根據它們嵌入向量的距離來分組的。

本文是第一個將目標檢測任務定義為同時檢測和分組角點的任務。我們的另一個新穎之處在于corner pooling layer,它有助于更好定位角點。我們還對沙漏結構進行了顯著地修改,并添加了新的focal loss[23]的變體,以幫助更好地訓練網絡。

3、CornerNet

3.1 概況

cornernet 是通過檢測b-box的左上和右下角點來檢測一個目標的,通過一個卷積網絡預測兩組熱力圖來表示不同類別目標的角點位置,一個熱力圖表示左上角點,一個熱力圖表示右下角點。

神經網絡同時可以對每個檢測到的角點預測嵌入向量,兩個源于同一b-box的角點向量距離肯定是最短的。

為了產生緊的b-box,網絡同時預測偏移來稍微調整角點的位置,有了預測的熱力圖、嵌入向量和偏移,我們就可以使用簡單的后處理方法來得到最終的b-box。

圖4展示了 CornerNet 的結構,我們使用沙漏網絡(hourglass network)作為backbone,沙漏網絡之后跟兩個預測模塊:一個模塊是左上角點,另一個模塊是右下角點。

每個模塊都有其自己的corner pooling 模型對沙漏網絡的輸出進行pooling,即在預測熱力圖、嵌入向量和偏移之前就pooling。

不同于其他檢測器,我們沒有使用來自不同尺度的特征。

3.2 檢測角點

我們需要預測兩組熱力圖,一組是左上角點的熱力圖,另一組是右下角點的熱力圖。

每組熱力圖有 C 個通道(C 為目標類別),大小為 HxW,沒有背景通道。每個通道是表示每個類別的角點的二值掩膜。

對于每個角點,有一個真值 positive 位置,其余的都是 negative 位置,訓練過程中,我們沒有對負位置都使用相同的懲罰,而是根據其到正位置的半徑距離來懲罰,因為一對錯誤的角點檢測如果和正確的角點檢測相距很近,其產生的框和真實框交并比會很大,如圖5所示。

我們通過確保半徑內的一對點生成的邊界框與ground-truth的IoU ≥ t(我們在所有實驗中將t設置為0.3)來確定物體的大小,從而確定半徑。

給定半徑之后,懲罰的量會根據非標準的 2D 高斯分布e?x2+y22δ2e^{-\frac{x^2+y^2}{2\delta^2}}e?2δ2x2+y2?來確定,該高斯分布的中心是在正例位置,且其 δ\deltaδ 是半徑的1/3。

pcijp_{cij}pcij? 表示預測的熱力圖中類別 c 在位置 (i,j) 上的得分,ycijy_{cij}ycij? 是用非標準化高斯增強得到的真實熱力圖。

定義 focal loss 的變體如下:

  • N 是圖像中目標的個數
  • α\alphaαβ\betaβ 是控制每個點的權重(貢獻量)的超參數(α=2\alpha=2α=2β=4\beta=4β=4

利用 ycijy_{cij}ycij? 中編碼的高斯凸點,(1?ycij)(1?ycij)(1?ycij) 減少了ground-truth周圍點的懲罰。

許多網絡使用下采樣層來綜合全局信息,且減少內存使用,當在圖像的全卷積過程中使用該方法時,網絡的輸出總數小于輸入圖像的大小,所以輸入圖像的位置 (x,y)(x,y)(x,y) 會投影到熱力圖中的(?xn?,?yn?)(\lfloor \frac{x}{n}\rfloor,\lfloor \frac{y}{n}\rfloor)(?nx??,?ny??),其中 nnn 是下采樣因子。

當從熱力圖中定位原圖中的位置時,可能會丟失一定的精度,這會很大的影響小的b-box和其真實框的 IoU,所以在從熱力圖估計原圖中的位置的時候,先估計一個offset來調整一下角點的位置。

其中,OkO_kOk? 是偏移 offset, xkx_kxk?yky_kyk? 是角點 kkk 的坐標。

我們預測的所有類別的左上角共享一組偏移,右下角共享一組偏移。

訓練過程中,我們在真實角點的位置使用 smooth L1 loss :

3.3 角點的分組

一個圖像中可能出現多種不同類別的目標,所以可能會檢測出來多種左上角和右下角的角點,我們需要確定一組左上+右下角點是否源于同一個box。

判斷的方法源于 Newell,因為網絡對源于同一個box的角點預測的嵌入向量的距離是最短的,我們可以基于左上和右下角點的嵌入向量的距離來對角點進行分組,而嵌入向量內在的值是不用關心的,我們只使用兩者的距離。

我們只使用以為的嵌入向量,令etke_{t_k}etk??表示目標 kkk 的 top-left角點,ebke_{b_k}ebk??表示目標 kkk 的 bottom-right 角點。

我們使用 “pull” loss 來訓練網絡來分組角點,使用“push” loss 來分離角點:

其中,eke_kek?etke_{t_k}etk??ebke_{b_k}ebk?? 的均值,令 Δ=1\Delta=1Δ=1,與偏移損失類似,我們僅在ground-truth角點位置應用損失。

3.4 Corner Pooling

如圖2所示,通常沒有局部視覺證明角點的存在,為了確定一個像素點是不是左上角點(top-left),我們需要從目標邊界最上面從右向左水平掃描,從目標邊界的最左邊從下向上垂直掃描最大值。

我們提出了 corner pooling 來通過編碼一直先驗信息來更好的定位角點。

假設我們想要確定位置 (i,j)(i,j)(i,j) 的像素是否是一個 top-left 角點,令ftf_tft?flf_lfl? 作為 top-left pooling 層的輸入, ftijf_{t_{ij}}ftij??flijf_{l_{ij}}flij?? 分別為ftf_tft?flf_lfl?(i,j)(i,j)(i,j) 位置上的向量。

特征圖大小為 H×WH\times WH×W,corner pooling 層首先對ftf_tft? 中的 (i,j)(i,j)(i,j)(i,H)(i,H)(i,H) 之間的像素進行最大池化,得到 tijt_{ij}tij?。之后對 flf_lfl? 中的(i,j)(i,j)(i,j)(W,j)(W,j)(Wj) 之間的像素進行最大池化,得到 lijl_{ij}lij?。最后,將 tijt_{ij}tij?lijl_{ij}lij? 相加,結算公式如下:

其中,我們使用的是像素域最大化操作,其過程如圖6所示,右下角點的corner pooling 操作相同。

我們的對所有 (0,j)(0,j)(0,j)(i,j)(i,j)(i,j) 之間的特征向量進行最大池化,對所有 (i,0)(i,0)(i,0)(i,j)(i,j)(i,j) 之間的特征也進行最大池化,然后將兩者重合的地方相加即可。

corner pooling作用:用于預測熱力圖、嵌入向量、偏移

預測模塊結構如圖7所示,第一個部分是修正后的殘差模塊,該修正的殘差模塊中,將第一個 3x3 卷積模塊用 corner pooling 代替。

修正后的殘差模塊:首先用128個通道的3x3的卷積模塊處理從backbone網絡輸出的特征向量,之后使用 corner pooling。

殘差模塊之后:將經過 corner pooling 的特征向量輸入 256 個通道的 3x3 的Conv-BN 層,同時加上一個映射捷徑。

修正的殘差模塊之后連接一個有256通道的3x3卷積模塊,和 3 個Conv-ReLU-Conv 層來產生熱力圖、嵌入式向量和偏移。

3.5 沙漏網絡

CornerNet 網絡使用沙漏網絡作為backbone。

沙漏網絡最初提出是為了人體姿態估計任務,該網絡是一個全卷積網絡,包含了多個沙漏模塊。

沙漏模塊:首先對輸入特征利用一系列的卷積核最大池化進行下采樣,之后通過一系列上采用和卷積層來對特征進行上采樣,使得能夠獲得和原始輸入分辨率一樣的輸出。

因為最大池化會使得丟失一定的細節信息,所以使用跳躍連接層來重現。

當網絡中使用多個沙漏網絡時,沙漏模型可以重新處理特征,來捕捉信息的高層特征,該特性使得沙漏網絡成為目標檢測的理想backbone選擇。

本文的沙漏網絡(hourglass network)包含了兩個沙漏結構,并且我們做了一些修正。

  • 我們沒有使用最大池化,使用步長為2來降低特征分辨率,我們降低了5倍的分辨率,并且提高了特征通道數(256,384,384,384,512)。

當對特征進行上采樣時,我們使用 2 個殘差模塊,之后使用最近鄰上采樣。

每個跳躍連接也是由 2 個殘差模塊組成的,沙漏網絡中間有4個512通道的殘差模塊,進入沙漏模塊之前,我們使用步長為2,通道數為128,的7x7的卷積模塊將圖像分辨率降低 4 倍,之后使用步長為2,通道數為256的殘差模塊。

類似于 Newell 的文章,我們也在訓練時增加了中間監督,但沒有給網絡添加中間預測回傳,這會損害網絡性能。

我們給第一個沙漏模塊的輸入和輸出都使用了 1x1 的 onv-BN 模塊,之后通過像素相加并使用 Relu 和殘差模塊,作為第二個沙漏模塊的輸入。

沙漏網絡的深度為104,不同于其他性能較好的檢測器,我們只使用的所有網絡的最后一層的輸出來預測。

總結

以上是生活随笔為你收集整理的目标检测系列(七)——CornerNet:detecting objects as paired keypoints的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。