總體:
? ? ? 之前的主流的目標檢測和識別都是深度學習模型結(jié)合區(qū)域和高性能分類器共同完成,雖然這種方法有較好的識別精度缴啡,但是整個模型需要很高的硬件資源且實時性不好。weiliu的SSD類似于YOLO基于回歸的方法解藻,但與之不同的是在其基礎上加入了類似于faster rcnn的anchor機制孝治,這相當于在回歸的基礎上結(jié)合一部分區(qū)域建議的功能。SSD 將輸出一系列離散化的 bounding boxes作為default box福侈,這些 bounding boxes 是在不同層次layers上的 feature maps 上生成的酒来,并且有著不同的aspect ratio和scale。在預測的時候網(wǎng)絡會在每個default box 出現(xiàn)的類別(category)打分肪凛,并調(diào)整box更好的match物體的shape堰汉。另外,網(wǎng)絡會結(jié)合不同不同分辨率的feature map的預測值來更好的處理各種size的物體伟墙。SSD相較于需要proposal的方法更簡單翘鸭,因為它完全消除了proposal generation和subsequent pixel或者特征重采樣feature resampling階段,將整個放入單一網(wǎng)絡戳葵,所有的檢測和識別都可用一個網(wǎng)絡搞定就乓。基于區(qū)域建議的方法由于存在候選區(qū)域的提取拱烁,使得算法的時間花費很大生蚁,實時性比較差,而基于回歸的目標檢測識別沒有候選區(qū)域提取的這一步驟戏自,且識別和檢測在同一網(wǎng)絡里邦投,很容易做到實時
特點:
快且精度較高;
使用小的卷積濾波器預測物體類別和boundingbox的位置offset擅笔,在不同的aspect ratio的檢測時用不同預測器志衣,并將他們都應用于multiple feature maps從而使檢測器能具備多尺度檢測。這樣的話就可以使用不同layers來預測不同尺度從而使檢測器對于低像素的檢測精度提高很多猛们,檢測速度也很快
算法細節(jié):
如上圖念脯,a中SSD訓練需要輸入圖片及每一個物體的ground truth ,b阅懦,c兩種不同的feature map中不同aspect ratio的一系列default box和二,我們預測每一個類別conf:c1,c2..Cp的offset:△(cx,cy耳胎,w惯吕,h)惕它,訓練的時候我們首先將defau box match到gt boxes,比如我們將default box match到上圖的貓和狗废登,這個就當成positive其余的default box就看成negatives淹魄。模型的loss=localization loss(e.g.Smooth L1)+confidence loss(e.g.Softmax).
模型:
SSD的方法基于對當前物體boxes的類別實例產(chǎn)生和收集收集一系列固定尺寸的boundingbox 和score,接著通過非最大抑制NMS來產(chǎn)生最終的檢測堡距。前端的網(wǎng)絡層是基于高性能的圖片分類器標準架構(gòu)(在分類層classification layer前截斷)甲锡,后面再加:
多尺度特征圖:
在前段網(wǎng)路層后面加入幾層卷積特征層,這些層的size依次減小羽戒,允許多尺度的檢測器預測缤沦,,這些用來預測檢測的卷積模型對于不同的特征層是不同的易稠。
卷積預測器
每一個增加的feature layer 或者base network存在的的feature map缸废,會生成一系列固定的大小的predictions,對于一個大小為m×n驶社,具有p通道的特征層企量,使用的 convolutional filters 就是3×3×p的 kernels。產(chǎn)生的 predictions亡电,那么就是歸屬類別的一個得分嫂用,或者就是相對于 default box coordinate 的 shape offset
Default boxes 和 aspect ratios
每一個 box 相對于與其對應的 feature map cell 的位置是固定的惫霸。 在每一個 feature map cell 中蔓钟,我們要?predict得到的 box與default box之間的offsets匈织,以及每一個 box 中包含物體的 score(每一個類別概率都要計算出)槐脏。
如上圖蜜托,F(xiàn)eature map cell 是小格子 虛線是default box释液。使用小的卷積濾波器預測物體類別和boundingbox的位置offset熏矿,在不同的aspect ratio的檢測時用不同預測器,并將他們都應用于multiple feature maps從而使檢測器能具備多尺度檢測孝凌。這樣的話就可以使用不同layers來預測不同尺度從而使檢測器這樣對于低像素的檢測精度提高很多,檢測速度也很快
需要注意的:
ground truth只是出現(xiàn)在底層月腋,高層沒有g(shù)round truth蟀架,所以小物體檢測的語義信息,相對信息差一些榆骚。
faster rcnn,yolo,ssd對小目標檢測結(jié)果都不好片拍,原因在于卷積網(wǎng)絡結(jié)構(gòu)的最后一層feature map太小,例如32*32的目標經(jīng)過vgg后變成2*2妓肢,導致之后的檢測和回歸無法滿足要求捌省。SSD使用的VGG16作為特征抽取,SSD中最小尺度的檢測是conv4_3的feature map再經(jīng)過一層卷積輸出的,位于整個網(wǎng)絡非车锬疲靠前的位置纲缓。在conv4_3feature map的分辨率已經(jīng)縮小了8倍,在conv5_3縮小了16倍.比如一個32*32大小的物體,在vgg16 的 conv5_3的feature map 對應僅為2*2. 位置信息有較大的損失.
SSD里負責檢測小目標的層為conv4_3(38*38)對應的尺度為0.2(可人為設置)卷拘。這就對應了SSD所能檢測的尺度大概為0.2上下。在這種情況下祝高,如果物體過于小的話栗弟,甚至在訓練階段,GT都沒法找到相應的的default box與它匹配工闺,效果怎么可能會好乍赫。如果不介意整體檢測效果的話,可以把尺度調(diào)低陆蟆,看看對于小目標的檢測效果是否有提升雷厂。另外,利用多尺度進行檢測也能提高小物體的檢測效果
目前大概有兩種方法可能決絕這個問題:
1. 使用不同層的特征: 比如hyperNet, MultiPath.
2. 保證感受也不縮小的情況下feature map的分辨率不至于縮小太多.這種思路可以考慮采用DeepLab中采用的Hole algorithm.在保證感受野的同時分辨變化較小.
?3.SSD對于高分辨率的底層特征沒有再利用叠殷,而這些層對于檢測小目標很重要罗侯。 Feature Pyramid Networks for Object Detection,就很好的解決這個問題溪猿。
This is not surprising because those small objects may not even have any information at the very top layers.
钩杰。