天天看點

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

1. 摘要

本文是一個Anchor-free的方法,是預測物體的左上角和右下角來替代anchor。本文是一個一階段目标檢測方法。思想來源于人體關鍵點檢測。

本文主要貢獻有兩點:

  • 預測物體的左上角和右下角這一對角點
  • 引入CornerPooling,使定位corner更加精确

2. 使用Anchor的壞處:

  • 要想達到差不多的性能,需要大量的anchor,而這會導緻正負樣本間的不平衡。
  • 設定Anchor引入了一些超參數,例如大小、數量、寬高比等。這些設定比較繁瑣,尤其是使用了多尺度之後。

3. 本文解決辦法(技術細節)

3.1 網絡結構

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

本文基礎網絡是Hourglass Network。 基礎網絡之後是兩個預測子產品。 一個子產品用于左上角,而另一個子產品用于右下角。 每個子產品都有自己的corner pooling子產品,在預測熱圖、嵌入向量和偏移之前,池化來自基礎網絡的特征。 與許多其他物體探測器不同,本文不使用不同尺度的特征來檢測不同大小的物體,而是隻将兩個子產品應用于基礎網絡的輸出。

3.2 預測corner

本文是預測同一物體類别的所有執行個體的左上角熱圖(heatmap)和右下角熱圖,以及一個每個檢測到的角點(corner)的嵌入向量(embedding vector)。嵌入向量裡是用于對屬于同一目标的一對角點進行分組——訓練網絡以預測它們的相似嵌入(兩個嵌入向量簡單的計算(例如餘弦函數)就可以得到他們的相關性)。

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

預測兩組熱圖,一組用于左上角,另一組用于右下角。 每組熱圖具有C個通道,其中C是分類的數量(不包括背景類),大小為H×W。 每個通道都是一個二進制掩碼,用于表示該類的角點位置。

對于每個角點,有一個ground-truth正位置,除此之外其他所有的位置都是負位置。 在訓練期間,對不同負樣本點的損失函數采取不同權重值(減少對正位置半徑内的負位置給予的懲罰)。 這是因為如果一對假角點檢測器靠近它們各自的ground-truth位置,它仍然可以産生一個與ground-truth充分重疊的邊界框,如下圖:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

可以通過確定半徑内的一對點生成的邊界框與ground-truth的IoU ≥ t(本文在所有實驗中将t設定為0.7)來确定物體的大小,進而确定半徑。 給定半徑,懲罰的減少量由非标準化的2D高斯

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

給出,其中心位于正位置,其σ是半徑的1/3。

損失函數

損失函數是focal loss的變體,具體如下:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

其中,

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

是預測熱圖中C類位置(i,j)的得分(預測值),

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

是用非标準化高斯增強的“ground-truth”熱圖(距離ground truth比較近的(i,j)點的ycij值接近1,這部分通過β參數控制權重,這是和focal loss的差别,ycij=1時就是focal loss),N是圖像中目标的數量,α和β是控制每個點的貢獻的超參數(在所有實驗中本文将α設定為2,β設定為4)。

預測offset

當我們将熱圖中的位置重新映射到輸入圖像時,可能會丢失一些精度(向下取整損失了精度),這會極大地影響小邊界框與ground-truth之間的IoU。 為了解決這個問題,本文添加了預測位置偏移,以稍微調整角位置,然後再将它們重新映射到輸入分辨率。

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

其中O_k是偏移量,x_k和y_k是角點k的x和y坐标,n是下采樣因子。本文預測兩組偏移量,所有類别的左上角共享一組偏移,另一組由右下角共享。 對于訓練,在ground-truth角點位置應用Smooth L1損失:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

3.3 分組corner(嵌入向量)

本文的分組方法靈感來源于關聯嵌入(Associative Embedding)。網絡預測每個檢測到的corner的嵌入向量,使得若兩個corner屬于同一個目标,則他們的嵌入向量之間的距離應該小。本文就是根據兩個corner的嵌入向量的距離來分組的。

嵌入向量的實際值并不重要,僅僅使用嵌入向量之間的距離來對corner分組。

這部分的訓練是通過兩個損失函數實作的:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

e_tk表示第k個目标的左上角角點的embedding vector,e_bk表示第k個目标的右下角角點的embedding vector,e_k表示e_tk和e_bk的均值。第一個式子用來縮小屬于同一個目标(第k個目标)的兩個角點的embedding vector(e_tk和e_bk)距離。第二個式子用來擴大不屬于同一個目标的兩個角點的embedding vector距離。與偏移損失類似,僅在ground-truth角點位置應用損失。

3.4 Corner pooling

這是一種新型的池化層,可幫助卷積網絡更好地定位邊界框的角點。 邊界框的一角通常在目标之外,參考下圖中的例子:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

在這種情況下,角點不能根據目前的資訊進行定位。相反,為了确定像素位置是否有左上角,需要水準地向右看目标的最上面邊界,垂直地向底部看物體的最左邊邊界。 這個思路就産生了corner pooling layer:它包含兩個特征圖,在每個像素位置,一是最大池化特征映射到最下面的所有特征向量,二是最大池化特征映射到最右邊的所有特征向量,然後将兩個池化結果相加,如下圖所示:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

具體來說,該層有2個輸入特征圖,特征圖的寬高分别用W和H表示,假設接下來要對圖中紅色點(坐标假設是(i,j))做corner pooling,那麼就計算(i,j)到(i,H)的最大值(對應上圖的第一行),類似于找到左側邊資訊;同時計算(i,j)到(W,j)的最大值(對應上圖的第二行),類似于找到頂部邊資訊,然後将這兩個最大值相加得到(i,j)點的值(對應上圖最後一個圖的藍色點)。右下角點的corner pooling操作類似,隻不過計算最大值變成從(0,j)到(i,j)和從(i,0)到(i,j)。

公式表示:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

示例:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

基于殘差子產品修改的Corner pooling:

論文筆記之CornerNet1. 摘要2. 使用Anchor的壞處:3. 本文解決辦法(技術細節)4. 實驗

3.5 Hourglass Network

沙漏網絡是一個完全卷積神經網絡,由一個或多個沙漏子產品組成。沙漏子產品實際上就是一系列卷積加最大池化進行下采樣,一系列上采樣和卷積放大到原來的分辨率大小。由于細節在最大池化層中丢失,是以添加了跳過層用來将細節帶回到上采樣的特征。這個網絡是主要用于人體姿态估計。本文使用的沙漏網絡在原來的基礎上做了一些修改。

4. 實驗

4.1 測試細節

  • 首先通過使用3×3最大池化層在corner熱圖上應用NMS;
  • 然後從熱圖中選出前100個左上角和前100個右下角;
  • 接着根據corner偏移調整corner位置;
  • 計算左上和右下的嵌入向量之間的L1距離;
  • 距離大于0.5的或包含不同類别的corner對被剔除;
  • 左上角和右下角的平均得分作為檢測得分

保持原分辨率(圖檔),填充0後讀入網絡,原圖和翻轉圖都用于測試。最後将兩個檢測結合起來,使用softmax抑制備援檢測,僅保留前100個。

4.2 實驗結果

(1)Corner Pooling的使用對中型/大型物體的效果較好

(2)對不同位置負樣本采取不同權重的損失函數這個方式對中型/大型物體的效果較好

(3)主要瓶頸在于corner檢測

繼續閱讀