CornerNet-Lite算法筆記

論文名稱:CornerNet-Lite: Efficient Keypoint Based Object Detectionhtml

論文連接:https://arxiv.org/abs/1904.08900python

代碼連接:https://github.com/princeton-vl/CornerNet-Litegit


 

簡介

該論文與Cornernet論文做者相同,都是由普林斯頓大學的幾位學者提出。截止2019年4月份,CornerNet-Lite 應該是目標檢測(Object Detection)中速度和精度trade-off的最佳算法。在精度上超越原來的Cornernet(速度是原來的6倍),在實時檢測器領域不管是速度仍是精度都超越yolov3(34.4% AP at 34ms for CornerNet-Squeeze compared to 33.0% AP at 39ms for YOLOv3 on COCO)。github

CornerNet-Lite是CornerNet的兩種有效變體的組合:CornerNet-SaccadeCornerNet-Squeeze,前者使用注意機制(attention)消除了對圖像的全部像素進行處理的須要,將cornernet單階段檢測器變爲兩階段檢測器,attention maps做用相似與fasterrcnn中的rpn但又有所不一樣,將roi區域crop下來進行第二階段的精細檢測,該網絡與cornernet相比達到精度提高;後者引入新的緊湊骨幹架構的CornerNet-Squeeze,主幹網絡實爲hourglass network、mobilenet、squeezenet結構的變體,在實時檢測器領域達到速度和精度的雙重提高。具體比較可看下圖figure1:算法

 

CornerNet-Saccade

人類視覺中的 Saccades(掃視運動)是指用於固定不一樣圖像區域的一系列快速眼動。在目標檢測算法中,咱們廣義地使用該術語來表示在推理期間選擇性地裁剪(crop)和處理圖像區域(順序地或並行地,像素或特徵)。網絡

R-CNN系列論文中的saccades機制爲single-type and single-object,也就是產生proposal的時候爲單類型(前景類)單目標(每一個proposal中僅含一個物體或沒有),AutoFocus論文中的saccades機制爲multi-type and mixed(產生多種類型的crop區域)架構

CornerNet-Saccade中的 saccades是single type and multi-object,也就是經過attention map找到合適大小的前景區域,而後crop出來做爲下一階段的精檢圖片。CornerNet-Saccade 檢測圖像中可能的目標位置周圍的小區域內的目標。它使用縮小後的完整圖像來預測注意力圖和粗邊界框;二者都提出可能的對象位置,而後,CornerNet-Saccade經過檢查以高分辨率爲中心的區域來檢測目標。它還能夠經過控制每一個圖像處理的較大目標位置數來提升效率。具體流程以下圖figure2所示,主要分爲兩個階段估計目標位置檢測目標性能

 

估計目標位置(Estimating Object Locations)

CornerNet-Saccade第一階段經過downsized圖片預測attention maps和coarse bounding box,以得到圖片中物體的位置和粗略尺寸,這種降採樣方式利於減小推理時間和便於上下文信息獲取。測試

流程細節爲首先將原始圖片縮小到兩種尺寸:長邊爲255或192像素,192填充0像素到255,而後並行處理。通過hourglass network(本文采用hourglass-54,由3個hourglass module組成),在hourglass-54的上採樣層(具體在哪一個hourglass module的上採樣層論文中在3.5 Backbone Network部分有所說起,也就是最後一個module的三個上採樣層,具體有待後期源碼解析)預測3個attention maps(分別接一個3 × 3 Conv-ReLU module和一個1 × 1 Conv-Sigmoid module),分別用於小(小於32)中(32-96之間)大(大於96)物體預測,預測不一樣大小尺寸便於後面crop的時候控制尺寸(finer尺度預測小物體,coarser尺度預測大物體),訓練時使用α = 2的focal loss,設置gt bbox的中點爲positive,bbox其他爲負樣本,測試時大於閾值t=0.3的生成物體中心位置。優化

檢測目標(Detecting Objects)

Crop區域的獲取:

CornerNet-Saccade第二階段爲精檢測第一階段在原圖(高分辨率下)crop區域的目標。

從Attention maps獲取到的中心位置(粗略),能夠根據物體尺寸選擇放大倍數(小物體放大更多),ss>sm>sl,ss=4,sm=2,sl=1,在每一個可能位置(x,y),放大downsized image si倍,i根據物體大小從{s,m,l}中選擇,最後將此時的downsized image映射回原圖,以(x,y)爲中心點取255×255大小爲crop區域。

從coarse bounding box獲取的位置能夠經過邊界框尺寸決定放大尺寸,好比邊界框的長邊在放大後小物體應該達到24,中物體爲64,大物體爲192。

處理效率提高:一、利用gpu批量生成區域二、原圖保存在gpu中,並在gpu中進行resize和crop

最終檢測框生成以及冗餘框消除:

最終的檢測框經過CornerNet-Saccade第二階段的角點檢測機制生成,與cornernet中徹底一致(不明確的小夥伴能夠查看我另外一篇cornernet算法筆記),最後也是經過預測crop區域的corner heatmaps, embeddings and offsets,merge後坐標映射回原圖。

算法最後採用soft-nms消除冗餘框,soft-nms沒法消除crop區域中與邊界接觸的檢測框,以下圖figure3(這種檢測框框出來的物體是不完整的,並與完整檢測框iou較小,所以須要手工消除),能夠在程序中直接刪除該部分框。

 

其餘:

精度和效率權衡:

根據分數排列第一階段獲取到的物體位置,取前Kmax個區域送入第二階段精檢測網絡

抑制冗餘目標位置:

當物體接近時,以下圖figure4中的紅點和藍點所表明的人,會生成兩個crop區域(紅框和藍框),做者經過類nms處理此類狀況,首先經過分數排序位置,而後取分數最大值crop區域,消除與該區域iou較大的區域。

骨幹網絡:

本文提出由3個hourglass module組成的Hourglass-54做爲主幹網絡,相比cornernet的hourglass-104主幹網絡(2個hourglass module)更輕量。下采樣步長爲2,在每一個下采樣層,跳鏈接,上採樣層都有一個殘差模塊,每一個hourglass module在下采樣部分縮小三倍尺寸同時增長通道數(384,384,512),module中部的512通道也含有一個殘差模塊。

訓練細節:

在4塊1080ti上使用batch size爲48進行訓練,超參與cornernet相同,loss function優化策略也是adam。

CornerNet-Squeeze

與專一於subset of the pixels以減小處理量的CornerNet-Saccade相比,而CornerNet-Squeeze 探索了一種減小每像素處理量的替代方法。在CornerNet中,大部分計算資源都花在了Hourglass-104上。Hourglass-104 由殘差塊構成,其由兩個3×3卷積層和跳鏈接(skip connection)組成。儘管Hourglass-104實現了很強的性能,但在參數數量和推理時間方面卻很耗時。爲了下降Hourglass-104的複雜性,本文未來自SqueezeNet和MobileNets 的想法融入到輕量級hourglass架構中。

主要操做是:受SqueezeNet啓發,CornerNet-Squeeze將 residual block 替換爲SqueezeNet中的 Fire module,受MobileNet啓發,CornerNet-Squeeze將第二層的3x3標準卷積替換爲3x3深度可分離卷積(depth-wise separable convolution)

具體以下表table1所示:(因爲時間關係,這裏對Fire module和depth-wise separable convolution不作詳述,可自行查找SqueezeNet和MobileNet相關論文,CornerNet-Squeeze網絡架構細節以及參數計算量推算也不展開,博主可能將在後續的源碼解析中進行分析)

 

訓練細節:

超參設置與cornernet相同,因爲參數量減小,能夠增大訓練batch size,batch size of 55 on four 1080Ti GPUs (13 images on the master GPU and 14 images per GPU for the rest of the GPUs).

實驗

開源代碼是基於PyToch1.0.0,在COCO數據集上進行測試。測試硬件環境爲:1080ti GPU + Intel Core i7-7700k CPU。

 

One-stage 算法性能比較如上圖figure6,其中log scale博主認爲是不一樣檢測器的速度與精度權衡條件,好比CornerNet-Saccade能夠爲Kmax(crop區域數)

 

上表table2對比CornerNet和CornerNet-Saccade訓練效率,能夠看出在gpu的內存使用上節省了將近60%。

 

上表table3代表attention maps對於預測準確性的重要性,能夠看出將attention maps用gt替代,ap值獲得很大提高。

 

上表table4爲代表主幹網絡hourglass-54相比hourglass-104的性能提高,以及它對於attention maps預測的意義。

 

上表table5是CornerNet-Squeeze與yolov3對比,能夠看出不管是python仍是效率更高的C版本yolo都弱於CornerNet-Squeeze

 

上表table6爲CornerNet-Squeeze的消融實驗。

 

上表table7中證實沒法將本論文中的兩種網絡機制聯合,緣由是CornerNet-Squeeze沒有足夠的能力提供對CornerNet-Saccade貢獻巨大的attention maps的預測。

 

上表table8代表本文中的兩種網絡架構,CornerNet-Squeeze在精度和速度方面對標YOLOv3完勝,CornerNet-Saccade主要在精度方面對標CornerNet完勝(速度意義不大)。

總結

本論文主要提出兩種CornerNet的改進方法,並在速度和精度方面取得較大意義,分別對標以前的CornerNet和YOLOv3(不熟悉CornerNet的同窗沒法理解本篇博文,建議查看博主另外一篇CornerNet算法筆記),與此同時的另外一篇基於CornerNet關鍵點的arXiv論文(2019.04)Centernet(https://arxiv.org/abs/1904.08189)提出Keypoint Triplets思想也對Cornernet進行優化,達到目前單階段目標檢測器最高精度(47.0%)。接下來我將對該論文進行總結。

相關文章
相關標籤/搜索