CornerNet-Lite論文閱讀筆記

不知道叫啥好一點發表於2020-10-31

(一)Title

image-20201030150352755

(二)Summary

基於關鍵點的方法是目標檢測中相對較新的範例,消除了對 anchor boxes 的需求並提供了簡化的檢測框架。基於Keypoint的CornerNet在單級(single-stage)檢測器中實現了最先進的精度。

然而,這種準確性來自高處理代價。在這項工作中,我們解決了基於關鍵點的高效目標檢測問題,並引入了CornerNet-Lite。
CornerNet-Lite是CornerNet的兩種有效變體的組合CornerNet-Saccade,它使用注意機制消除了對影像的所有畫素進行徹底處理的需要,以及引入新的緊湊backbone架構CornerNet-Squeeze
這兩種變體共同解決了有效目標檢測中的兩個關鍵用例:在不犧牲精度的情況下提高效率,以及保證實時性的前提下提升準確性。

CornerNet-Saccade在不犧牲準確性的情況下提高效率,CornerNet-Squeeze在不犧牲效率的情況下提升精度

CornerNet-Saccade通過減少要處理的畫素數量來加速inference。它使用一種類似於人類視覺中掃視的注意力機制,利用完整影像的下采樣生成一個attention map,然後放大進行接下來的處理。這與最初的CornerNet不同,因為它是在多個尺度上進行全卷積應用的,通過對高解析度影像進行裁剪用於檢測,將檢測結果融合來提升檢測準確度,效能表現:每幅影像190毫秒時實現了43.2%的AP,相比於最初的CornerNet,AP提高了1%,速度提高了6.0倍。

CornerNet-Squeeze通過減少每個畫素的處理量來加速推理,結合了 SqueezeNet以及 MobileNets 的觀點,引入了一個改進後的hourglass backbone,廣泛使用1×1 convolution, bottleneck layer, and depth-wise separable convolution.效能提升:在30ms速度下,AP值可以達到34.4% ,速度上要優於YOLOv3(33%,39ms)

這樣一個很顯然的問題就是:結合CornerNet-Saccade和CornerNet-Squeeze能不能實現比CornerNet-Saccade更高的速度,同時比CornerNet-Squeeze更優的準確率呢?實驗結果是:不能,因為CornerNet-Saccade需要生成足夠精確的attention map,CornerNet-Squeeze的超緊湊架構沒有這種額外的能力。

本文的貢獻:

  • CornerNet-Saccade CornerNet-Squeeze兩種提升效率的新網路

  • COCO上,我們將最先進的基於關鍵點的檢測效率提高了6倍,AP從42.2%提高到43.2%

  • COCO上,實時目標檢測的效率提升從(從39毫秒時的33.0%提高到30毫秒時的34.4%)


(三)Research Objective

本文從在保證檢測精度前提下,提升檢測準確率角度出發,作者提出提升任何目標檢測器的效率通常有兩個方向:

  • 減少處理的畫素數量
  • 減少處理每個畫素處理的過程

從而衍生出本文的兩種CornerNet的兩種變體:CornerNet-Saccade以及CornerNet-Squeeze。統稱為CornerNet-Lite

CornerNet主要思路是基於關鍵點檢測,不需要anchor boxes。CornerNet在單階段檢測器中的效能是state of art的,但是需要大量的預處理才能得到較高的準確率,消耗較多的計算資源。

(四)Problem Statement

在目標檢測領域,基於關鍵點的方法是非常新的,它不再需要 anchor boxes,讓模型框架更加簡潔。基於關鍵點的 CornerNet 在單階段檢測器中效能是 state of the art 的。但是,它為了獲取高精度,消耗了很多的計算資源

CornerNet的推理速度是其一個缺點,怎麼在保證精度的前提下,提升效率是本論文需要解決的問題。

(五)Method

1. CornerNet-Saccade

image-20201031112938612

利用一種類似於人眼掃視的注意力機制,首先經過一個下采樣後的輸入圖片,生成一個attention map,然後再將其進行放大處理,接著進行後續模型的處理。這與之前原始的CornerNet在不同尺寸上使用全卷積是有區別的,CornerNet-Saccade通過選擇一系列高解析度的裁剪圖來提高效率及準確率。

​ 採用人眼的注意力機制,先對下采樣的完整影像預測一個attention map以及coarse bounding box,這兩個都可以得到一個可能的物體位置,然後通過通過在高解析度圖片上檢測該區域的中心進而檢測到目標物,效率和效能的權衡是通過控制每張圖片處理的最大數量的目標物的位置來達到準確率及效率

backbone使用簡化後的Hourglass,成為Hourglass-54

CornerNet-Saccades的實現步驟:

  1. 將影像的長邊resize到255和192,其中192零填充到255(使用其他填充方式會有什麼不同嗎?)
  2. 利用下采樣後的影像在backbone的上取樣階段不同粒度的特徵圖上預測大、中、小三個尺度的目標位置,對於不同大小的目標,可以更好地"針對性處理(放大)",對於不同尺度的目標採用不同的放大倍數,

由於使用了下采樣,對於一些小目標可能無法準確檢測,因此,我們應該基於在第一步中獲得的尺度(scale)資訊在更高的解析度上檢查區域。

  1. 在生成attention map的同時,會在影像中給大目標預測boxes,但是這些boxes不是很準確,同樣需要放大來獲取更好的boxes。

  2. 在完成可能目標位置的目標檢測之後,crop影像中的bounding boxes進行NMS,同時手動刪除掉由於裁剪而導致的只有一部分的目標的boxes。

  3. NMS處理的一些內容:

    image-20201031200129896

在訓練期間,使用和CornerNet中應用相同的訓練損失來訓練網路,以預測corner heatmaps、embeddings和offsets。

訓練的細節

優化方法:Adam,inputSize:255x255,batchsize:48,利用在目標中心隨機裁剪區域實現資料的增強!

2. CornerNet-Squeeze

CornerNet-Saccade通過關注子區域的畫素來減少處理量。CornerNet-Squeeze減少每個畫素處理過程中的計算量。CornerNet中,計算量主要消耗在Hourglass-104上,雖然Hourglass-104的效能好,但是,其引數量大,而且inference時間長。本文借鑑了SqueezeNet及MobileNet的思想來設計一個輕量級的Hourglass結構。

使用SqueezeNet中的fire module代替殘差模組,並藉助MobileNet的思想利用深度可分離卷積代替標準卷積。

網路的其他變動

  • Hourglass Module之前增加一個下采樣層來降低Hourglass Module特徵圖的最大解析度
  • 移除每個hourglass模型中的一個下采樣層
  • CornerNet-Squeeze在hourglass 模型之前下采樣3次,而CornerNet只下采樣兩次。
  • 將CornerNet預測模組中的3x3卷積替換為1x1的卷積
  • 將hourglass網路中最相鄰的上取樣層替換為4x4的轉置卷積。

訓練細節

​ 我們使用了 CornerNet 中同樣的損失函式和超引數來訓練 CornerNet-Squeeze。唯一的改變就是 batch size。CornerNet-Squeeze 面對同樣的影像解析度,在 Hourglass模組之前縮小影像大小可以降低記憶體消耗4倍。我們在4個 1080ti 1080ti1080ti GPU上以 batch size 55來訓練網路,在主GPU上訓練13張圖片,剩餘的GPU 每個訓練14張圖片。

(六)實驗

One-stage 演算法效能比較

在這裡插入圖片描述

我發現網上大家的筆記中關於實驗部分的內容寫的很不詳細,我也是這樣子的,不給我自己最近的感受是實驗對於我們看論文來說也是很重要的,能夠提供給我們一些改進思路,或者說我們怎麼去設計實驗的思路,就像做工藝器件的,實驗的設計想法至關重要,次次實驗下去都是錢,我們次次下去都是時間。

1.實驗一

我們的網路在inference時間上有了提升,那在訓練時間上呢?我們採用的引數少,是不是訓練時間以及對GPU的消耗也會很短呢?因此我們設計實驗,我覺得這裡也不算設計實驗吧,只是將自己的訓練使用的GPU以及視訊記憶體展示了下,好有錢啊啊 啊啊啊

image-20201031211052987

我覺得再放一個loss曲線變化會不會更好一些呢?而且我發現訓練網路挺吃經驗的啊,可惜我只是純小白。

2.實驗二

我們提出了新的Hourglass Network-54,它除了比104簡單外,和104在效能上有得比較嗎?因此,”我們“設計了實驗二,要是用我們的網路訓練CornerNet,效能上會比用104訓練的差多少呢?或者說用104作為我們backbone在效能上會不會又提升呢?

我們還提出了attention map這樣的東西,那麼104和54誰產生的attention map更好呢?,也就是和我們使用真正的ground truth attention map作為天花板,我們越接近這個,說明我們預測attention map的能力就越強。

image-20201031211949736

這裡在我們的CornerNet-Saccade中,54要好,在CornerNet中,104要好一些,其實這裡104和54在預測attention map上是差不多的,因為到天花板的距離是差不多的,只不過使用54的天花板更高一些,為什麼54的天花板會比104的高一些呢?我覺得這個,我很是迷惑啊??按道理講104在提取高層語義資訊的能力更好,但是為什麼從小目標到大目標的AP值,104和54的距離越來越大呢,搞不明白。只能說Saccade配54是老搭檔,104初來乍到,不太熟悉。不會吧不會吧,不可能是沒訓練好吧

3. 實驗三

細看我們網路中的一些小小改動,是否是真正的提升,從CornerNet一步步到CornerNet-Squeeze,然後我們再用現有的網路試試,看看訓練效果怎麼樣?

image-20201031213307242

每個網路都訓練了250K次迭代,+ w/o flipped image應該是不翻轉影像的話,AP會有損失,GPU帶給我們的時間成本實在是太高了。

4. 實驗四

我們設計兩個網路,加在一起使用會不會有奇效呢 ?

image-20201031213755637

實驗告訴我們,但是這個不能更好地預測注意力圖,我有點看不懂啊,使用了ground truth attention的天花板比之前近了一些吧,只能說著整體搞下來對於任務來說有些不協調。

5. 實驗五

為了展示我們的power,當然要跟幾個大佬比比。

image-20201031214324732

看資料就行了,我們小目標不行啊啊啊 啊啊啊啊啊 啊啊啊 啊,其他的都挺好,推斷時間也短啊。要是小目標也行的話多好啊啊啊啊啊 啊啊啊 啊啊 啊啊 啊啊啊啊啊啊啊 啊啊啊啊啊 啊啊啊啊,好氣啊!!!!!!!!!!!!!!!!!!

結論部分大家可以看看Summary

(七)Notes

1.目標檢測中的Saccades是什麼?

在inference階段有選擇性地裁剪和處理裁剪後的影像(順序或者並行地進行處理)。論文中CornerNet-Saccade就是採用的掃視方式,並且這種掃視是單型別,多物件的,只有一種型別的裁剪,使用single-stage detector產生的crop,並且一種裁剪可以同時生成多個物件,大大減少了進行目標檢測所需要的裁剪的數量,

2. CornerNet-Saccades怎麼估計目標的位置?

本文在一張下采樣後的圖片上得到attention maps,用於代表目標物的位置以及對應位置上目標物的大致大小。對於給定的一個圖,將影像長邊resize到255和192畫素這兩個尺度上,對於192畫素的影像,我們將其零填充到255畫素大小上,實現並行處理。

使用低解析度圖片的原因有兩個

  • 這樣操作會減少inference時間上的消耗
  • 網路可以很容易得到圖片中的上下文資訊進而進行attention maps的預測。

對於大、中、小目標預測3個注意力圖(應該利用的是不同程度的上下文資訊,也就是不同位置的特徵圖比較合理吧),如果一個目標物的較長邊的畫素小於32,則被視為小目標,32到96的視為中等目標,大於96的是大目標。針對不同尺寸的物體的位置進行獨立的預測,可以更好的控制CornerNet-Saccade對每個位置的重視程度。同時根據目標的大小,也可以調整how much CornerNet-Saccade should zoom in at each location.小目標需要多放大一些,目標越大,放大程度的越小。

通過在不同尺寸的feature maps上預測出attention maps。

​ 論文中關於3個尺度注意力圖的獲取方式和我們考慮的一樣,使用的是backbone網路(hourglass network)的上取樣過程中的feature maps,小目標的注意力圖使用的是細粒度(finer scales)的特徵圖,大目標使用的粗粒度(coarser scales)的特徵圖。在特徵圖之後我們使用3×3 Conv-ReLU module+1×1 Conv-Sigmoid module得到3個attention maps。在測試過程中,只處理分數大於0.3的位置

3. CornerNet-Saccades處理思路

採用注意力機制的corse to fine的思路,第一步,根據我們第一步得到的粗略的位置資訊也就是bounding box的資訊,我們接下來直接從下采樣後的影像上對應bounding box的位置不太好,因為影像細節資訊不夠,(這裡我自己的想法是我們可以考慮採用類似於faster_rcnn的想法,將bounding box對映到原圖上,利用這些高解析度的圖進行檢測,同時這些圖的大小較小。

4. Detecting Objects又是怎麼實現的呢?

對於不同的目標採取不同的放大倍數, s s s_s ss用於小目標, s m s_m sm用於中目標, s l s_l sl用於大目標。通常情況下是 s s > s m > s l s_s>s_m>s_l ss>sm>sl也就是小目標需要放大更大的倍數。對於可能存在的位置(x,y),根據大致的目標尺寸,按照Si的比例對downsized圖片進行放大,然後,將CornerNet-Saccade應用到255x255視窗的中心位置處。這裡的這個放大過程是怎麼實現的呢?

之前提到的兩種方式確定目標的位置和大致大小,上面的attention map是一種方式,另一種方式就是:在CornerNet-Saccade處理縮小的影像以預測attention map時,它可能已經預測了影像中一些較大物件的方框。但是這些boxes可能不準確。我們也放大這些目標來得到更好的boxes。

在可能的物體位置檢測到物體後,我們合併邊界框,並通過應用soft NMS去除冗餘的邊界框。但是在裁剪的影像中只包含部分的目標時,由於這些框和傘的框沒有交疊,因此,做soft NMS不會刪除掉這些框,我們不希望在cropped的影像中預測這些目標,因此需要手動刪除掉,這些接觸到crop邊界的邊界框。如下圖所示:

image-20201031195138215

當物件彼此靠近時,他們可以生成彼此高度重疊的區域,處理兩個區域中的任何一個都會檢測到另一個區域中的物件,這裡同樣採用NMS的思路,首先對物件的位置進行一個排序:這裡的物件位置包括兩部分(一部分是來自attention map的,另一部分是來自bounding boxes的)這裡排序時優先排序bounding boxes的位置,按照排序順序對boxes進行NMS,直到所有boxes都滿足條件,如下圖所示,紅色和藍色框是兩個彼此高度重疊的區域,需要對boxes位置進行排序。然後做NMS。

image-20201031195956736

5. 為了提升效率,你能怎麼做?

主要思路就是充分利用GPU的資源:

  • process the regions in batch,這裡的regions指的是什麼?
  • 將原始影像存到GPU記憶體中,在GPU上進行resize和裁剪,從而減少影像資料在GPU和CPU之間的傳輸
  • 並行處理裁剪影像(255和192大小的同時處理,對192大小的影像進行零填充到255大小)

6. backbone的介紹

​ 本文設計了一個新的hourglass網路,包含三個hourglass module,深度一共為54層,稱為Hourglass-54。每個hourglass模型的引數較少而且網路較淺。本文將採用 stride為2的下采樣方式。在每個下采樣層的後面用了一個參差層及跳躍結構。每個hourglass模型將feature map減小3次,同時通道數分別為(384,384,512),在hourglass模型的中部有一個通道數為512的殘差模組,同時,在上取樣的每一層後面都有一個殘差模組。在Hourglass模型前對輸入圖片進行2倍的downsize。

7. 從SqueezeNet和MobileNets中得到的啟發

SqueezeNet的做法

  • 3 × 3 3\times 3 3×3的卷積核替換為 1 × 1 1\times 1 1×1的卷積核
  • 減少 3 × 3 3\times 3 3×3的卷積核的輸入通道
  • 延遲下采樣

MobileNet的做法

  • 標準 3 × 3 3\times 3 3×3的卷積使用深度可分離卷積(depth-wise separable convolution)代替

SqueezeNet中的fire module 採用了前兩個想法,Fire module 首先通過由 1×1 濾波器組成的 squeeze 層降低輸入通道數。然後將結果通過由 1×1 和3×3濾波器混合組成的 expand 層。

基於 SqueezeNet 的想法,我們在 CornerNet-Squeeze 中使用了 fire module,沒有用殘差模組。而且,受 MobileNet 的啟發,我們將第二層中的標準 3×3卷積替換為 3×3深度可分離卷積,這進一步加快了推理速度。

上述Squeeze的第三條特點,並未考慮,因為,hourglass為沙漏型對稱結構。後續的下采樣的結果會在上取樣過程中得到更高的解析度,而在高解析度的feature map上進行卷積操作會佔用大量的計算資源,不利於實時檢測

8. 使用fire module代替殘差模組,提升速度

CornerNet 的殘差模組和 CornerNet-Squeeze 中的 fire module 對比細節:

image-20201031202459601

(八 )問題

問題1:attention maps會吃影像的上下文資訊,高解析度影像提取的特徵圖和低解析度影像提取的特徵圖之間有什麼區別嗎?我使用高解析度影像不是也可以得到圖片的上下文資訊嗎?還是說高解析度影像提取的特徵圖包含了更多的上下文資訊呢?或者說我使用低解析度影像得到特徵圖和使用高解析度影像得到特徵圖然後下采樣到和低解析度影像一樣的尺度上,這樣兩個特徵圖上會有差別嗎?

相關文章