SSD浅层网络_目标检测SSD
一、目標(biāo)檢測之SSD
SSD: Single Shot MultiBox Detector
論文鏈接:https://arxiv.org/abs/1512.02325
論文翻譯:https://blog.csdn.net/denghecsdn/article/details/77429978
論文詳解:https://blog.csdn.net/WZZ18191171661/article/details/79444217
論文代碼:https://github.com/balancap/SSD-Tensorflow
二、SSD算法
1、整體框架
圖1:
圖2:算法步驟:
1、輸入一幅圖片(300x300),將其輸入到預(yù)訓(xùn)練好的分類網(wǎng)絡(luò)中來獲得不同大小的特征映射,修改了傳統(tǒng)的VGG16網(wǎng)絡(luò);
將VGG16的FC6和FC7層轉(zhuǎn)化為卷積層,如圖1上的Conv6和Conv7;
去掉所有的Dropout層和FC8層;
添加了Atrous算法(hole算法);
將Pool5從2x2-S2變換到3x3-S1;
2、抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層的feature map,然后分別在這些feature map層上面的每一個點(diǎn)構(gòu)造6個不同尺度大小的bbox,然后分別進(jìn)行檢測和分類,生成多個bbox,如圖2所示;
3、將不同feature map獲得的bbox結(jié)合起來,經(jīng)過NMS(非極大值抑制)方法來抑制掉一部分重疊或者不正確的bbox,生成最終的bbox集合(即檢測結(jié)果);
2、算法細(xì)節(jié)
(1)多尺度特征映射
SSD算法中使用到了conv4_3,conv_7,conv8_2,conv7_2,conv8_2,conv9_2,conv10_2,conv11_2這些大小不同的feature maps,其目的是為了能夠準(zhǔn)確的檢測到不同尺度的物體,因?yàn)樵诘蛯拥膄eature map,感受野比較小,高層的感受野比較大,在不同的feature map進(jìn)行卷積,可以達(dá)到多尺度的目的。
Why?:我們將一張圖片輸入到一個卷積神經(jīng)網(wǎng)絡(luò)中,經(jīng)歷了多個卷積層和池化層,我們可以看到在不同的卷積層會輸出不同大小的feature map(這是由于pooling層的存在,它會將圖片的尺寸變小),而且不同的feature map中含有不同的特征,而不同的特征可能對我們的檢測有不同的作用。總的來說,淺層卷積層對邊緣更加感興趣,可以獲得一些細(xì)節(jié)信息,而深層網(wǎng)絡(luò)對由淺層特征構(gòu)成的復(fù)雜特征更感興趣,可以獲得一些語義信息,對于檢測任務(wù)而言,一幅圖像中的目標(biāo)有復(fù)雜的有簡單的,對于簡單的patch我們利用淺層網(wǎng)絡(luò)的特征就可以將其檢測出來,對于復(fù)雜的patch我們利用深層網(wǎng)絡(luò)的特征就可以將其檢測出來,因此,如果我們同時在不同的feature map上面進(jìn)行目標(biāo)檢測,理論上面應(yīng)該會獲得更好的檢測效果。
(2)Defalut box
如上圖所示,在特征圖的每個位置預(yù)測K個bbox,對于每一個bbox,預(yù)測C個類別得分,以及相對于Default box的4個偏移量值,這樣總共需要?(C+4)×K個預(yù)測器,則在m×n的feature map上面將會產(chǎn)生?(C+4)×K×m×n個預(yù)測值。
分析:
SSD中的Defalut box和Faster-rcnn中的anchor機(jī)制很相似。就是預(yù)設(shè)一些目標(biāo)預(yù)選框,后續(xù)通過softmax分類+bounding box regression獲得真實(shí)目標(biāo)的位置。對于不同尺度的feature map 上使用不同的Default boxes。如上圖所示,我們選取的feature map包括38x38x512、19x19x1024、10x10x512、5x5x256、3x3x256、1x1x256,Conv4_3之后的feature map默認(rèn)的box是4個,我們在38x38的這個平面上的每一點(diǎn)上面獲得4個box,那么我們總共可以獲得38x38x4=5776個;同理,我們依次將FC7、Conv8_2、Conv9_2、Conv10_2和Conv11_2的box數(shù)量設(shè)置為6、6、6、4、4,那么我們可以獲得的box分別為2166、600、150、36、4,即我們總共可以獲得8732個box,然后我們將這些box送入NMS模塊中,獲得最終的檢測結(jié)果。
Defalut box生成規(guī)則:
以feature map上每個點(diǎn)的中點(diǎn)為中心(offset=0.5),生成一系列同心的Defalut box(然后中心點(diǎn)的坐標(biāo)會乘以step,相當(dāng)于從feature map位置映射回原圖位置)
使用m(SSD300中m=6)個不同大小的feature map 來做預(yù)測,最底層的 feature map 的 scale 值為 Smin=0.2,最高層的為Smax=0.95,其他層通過下面的公式計算得到:
使用不同的ratio值,[1, 2, 3, 1/2, 1/3],通過下面的公式計算 default box 的寬度w和高度h
而對于ratio=0的情況,指定的scale如下所示,即總共有 6 中不同的 default box。(3)Loss
loss函數(shù)分為兩部分:計算相應(yīng)的default box與目標(biāo)類別的confidence loss以及相應(yīng)的位置回歸。
其中N是match到Ground Truth的default box數(shù)量;而alpha參數(shù)用于調(diào)整confidence loss和location loss之間的比例,默認(rèn)alpha=1。
位置回歸則是采用?Smooth L1 loss,loss函數(shù)為:
confidence loss是典型的softmax loss:
總結(jié)
以上是生活随笔為你收集整理的SSD浅层网络_目标检测SSD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: open函数返回-1_python常用函
- 下一篇: [转]CNN目标检测(一):Faster