matlab基于ssd的角点匹配_基于关键点的目标检测
0 1
前言:基于錨點的目標(biāo)檢測方法
在基于關(guān)鍵點(key points)的目標(biāo)檢測方法出現(xiàn)之前,主流目標(biāo)檢測方法一般先設(shè)置一些預(yù)先定義好的 錨點 (anchor boxes)。 作為預(yù)測物體框的參考,神經(jīng)網(wǎng)絡(luò)只需要預(yù)測實際的物體框相對于這些錨點的偏移。 這樣模型就能在一個位置預(yù)測多個不同尺寸的物體框,并且預(yù)測相對偏移比預(yù)測絕對值要容易一些。
最初,這些錨點的大小是人工設(shè)置的,如Faster R-CNN [1]和SSD [2]中使用的錨點。 由于模型預(yù)測的是相對偏移,一般來說比較接近錨點的物體框預(yù)測要更為準(zhǔn)確一些,因此YOLOv2[3]中使用了k-means聚類的方法來選擇與訓(xùn)練集樣本最為匹配的錨點。
基于錨點的目標(biāo)檢測方法 缺點 在于需要生成大量的錨點以更好的覆蓋整個圖片中的物體,并且需要人工設(shè)計一些參數(shù),比如錨點的數(shù)量、大小等。
圖2 SSD中使用的錨點
0 2
基于關(guān)鍵點的目標(biāo)檢測方法
1. CornerNet [4]
CornerNet發(fā)表在2018年ECCV,是使用關(guān)鍵點方法進(jìn)行目標(biāo)檢測的開山之作。CornerNet通過預(yù)測物體框左上角和右下角兩個角點,來組成最終的物體框,避免了錨點的使用。
物體的特征一般集中在物體內(nèi)部,比如一個人的身體、頭部,其左上角和右下角兩個點的特征并不明顯,而且不容易確定位置。
為了解決這個問題,文章引入了 Corner pooling 的結(jié)構(gòu)。
在輸出層之前的特征圖上,針對左上角點,取其右邊和下邊的最大值之和,針對右下角點,取其左邊和上邊的最大值之和。
直觀上理解,就是我們在左上角處往右下方向看,在右下角處往左上方向看,這樣就能看到整個物體。
如果不使用Corner pooling,相當(dāng)于看的是角點周圍,這樣對于比較大的物體就很難獲得整個物體的特征,會導(dǎo)致大物體的檢測效果差。
網(wǎng)絡(luò)針對左上角和右下角分別輸出 三個結(jié)果 :
a. Heatmaps,表示某位置是角點的概率;
b. Offsets,表示實際角點相對于該位置的偏移;
c. Embeddings, 嵌入向量,用于將左上角和右下角進(jìn)行配對。
生成最終物體框時,取概率最高的k個角點,加上Offsets得到實際位置,再使用Embeddings對左上角和右下角進(jìn)行配對,取嵌入向量距離超過一定閾值的兩個點來組成最終物體框。
損失函數(shù)的選擇上Heatmaps使用分類損失函數(shù)focal loss的變種,Offsets使用回歸損失函數(shù)smooth L1 loss,Embeddings使用衡量相似度的"pull" loss和"push" loss,損失函數(shù)細(xì)節(jié)可查閱原文。
圖3 CornerNet結(jié)構(gòu)示意圖
圖4 Corner pooling
CornerNet一個 明顯的缺點 是使用Embeddings進(jìn)行角點匹配的效果并不太好,可能導(dǎo)致某個物體的左上角匹配到另一個物體的右下角。后續(xù)的ExtremeNet、CenterNet等論文都設(shè)法修復(fù)或避免這一問題。
圖5 CornerNet角點配對錯誤的例子
2. CornerNet-Lite[5]
針對CornerNet速度較慢的問題,CornerNet的研究團(tuán)隊對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了優(yōu)化。
主要從 兩方面 入手,分別提出了一個方案。
一:減少處理的像素數(shù)量。也就是先用一個輕量的網(wǎng)絡(luò)確定物體的大概位置,然后再從這個大概的裁切區(qū)域上檢測物體的具體位置,該網(wǎng)絡(luò)被稱為CornerNet-Saccade。
二:減少每個像素的處理次數(shù)。參考了SqueezeNet和MobileNets,使用深度可分離卷積等方法對網(wǎng)絡(luò)主干進(jìn)行輕量化,該網(wǎng)絡(luò)被命名為CornerNet-Squeeze。
CornerNet-Saccade相比CornerNet 速度 上有較大提升而準(zhǔn)確率相當(dāng);CornerNet-Squeeze則達(dá)到與YOLOv3相當(dāng)?shù)?速度 和 準(zhǔn)確率 ;
CornerNet-Lite依然受限于CornerNet角點匹配 錯誤較多 的缺點。比如CornerNet-Squeeze雖然從文章中給出的結(jié)果上看與YOLOv3相當(dāng),但是實際使用中容易出現(xiàn)角點匹配錯誤情況,效果不佳。
圖6 CornerNet-Lite作者給出的優(yōu)化效果
3. CenterNet [6]
CenterNet在CornerNet基礎(chǔ)上加入了一個關(guān)鍵點—— 中心點 ,通過檢查CornerNet預(yù)測框的中心區(qū)域是否存在中心關(guān)鍵點,來決定是否保留這個預(yù)測框。
中心關(guān)鍵點在pooling階段使用了Center pooling,同時取上下左右四個方向的最大值。
此外,還對原有的Corner pooling進(jìn)行了 優(yōu)化 。 確定中心區(qū)域時,對于較大的物體取5*5分割的中間區(qū)域,較小物體取3*3分割的中心區(qū)域。中心區(qū)域的選擇過于依賴人工設(shè)計的參數(shù),也是該方法的一個缺點。
圖7 CenterNet結(jié) 構(gòu)示意圖
4. Objects as Points [7]
這篇文章和上一篇CenterNet一樣是19年4月份放到網(wǎng)上的,而且也把自己的網(wǎng)絡(luò)起名為CenterNet...不同于上一篇CenterNet對CornerNet進(jìn)行修補(bǔ)。 該方法直接拋棄了右上角和右上角兩個關(guān)鍵點,只預(yù)測一個中心關(guān)鍵點,再加上物體的寬高,構(gòu)成最終的物體框。
該文章提出的方法 簡潔明了 ,在 速度 和 精度 的權(quán)衡上也做的比較好,因此比較被看好。 缺點 在于如果兩個物體的中心重合只能預(yù)測一個,不過這種情況概率很低。
圖8 Objects as Points效果示意圖
0 3
小結(jié)
基于關(guān)鍵點的目標(biāo)檢測方法或多或少都還存在一些缺點,在實際應(yīng)用中相比基于錨點的方法也 沒有絕對優(yōu)勢 。但是作為近兩年目標(biāo)檢測方法的新趨勢,我們期待在不遠(yuǎn)的將來這類方案能有進(jìn)一步的 突破 。
總結(jié)
以上是生活随笔為你收集整理的matlab基于ssd的角点匹配_基于关键点的目标检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用人之“道”
- 下一篇: hotelling t2 matlab,