Blitznet網絡理解筆記

Blitznet網絡理解筆記

1 resnet的理解

https://blog.csdn.net/lanran2/article/details/79057994

2 DSSD的理解

https://www.cnblogs.com/xuanyuyt/p/7447111.html
https://blog.csdn.net/jesse_mx/article/details/55212179

3 Bliznet網絡

https://blog.csdn.net/yaoqi_isee/article/details/77195029
https://blog.csdn.net/zhangjunhit/article/details/77577076

https://blog.csdn.net/shenxiaolu1984/article/details/51428392

4 Non-Maximum Suppression,NMS

https://www.cnblogs.com/makefile/p/nms.html

5 mAP理解

https://blog.csdn.net/zdh2010xyz/article/details/54293298

一、Introduction

BlitzNet: A Real-Time Deep Network for Scene Understanding
目標是做到實時的目標檢測和語義分割,通過的簡單的全卷積網絡解決兩個任務.在論文中作者表示兩個任務的大部分權值是共享的.最終可以證明兩個任務是一種相互促進的關係.

image

論文中作者給出的結果:

推理硬件:Titan X(Maxwell)

在Pascal Voc數據集上表現如下,300表示推理時的圖片尺寸是300*300

model FPS mIoU mAp
BlitzNet300 24 72.8 80.0

在COCOc數據集上表現如下,512表示推理時的圖片尺寸是512512,作者在論文中貼處的結果並沒有給出在COCO上的推理效率.但是給出了對512512的voc圖片的推理效率FPS爲19.5,且mAP爲83.8(24),第一名的91.1%.

model FPS mIoU mAp
BlitzNet512 53.5 34.1

二、BlitzNet

image

ResNet-50:ResNet without Connected Layer,feature maps
  
downscale-stream:SSD-layers,Multi-scale feature maps   
upscale-stream:context
  
deconvolutuoin layers : classification of bounding boxes & segmentation maps


1) ResNet

https://blog.csdn.net/lanran2/article/details/79057994

2) SSD

    提出的SSD算法是一種直接預測目標類別和bounding box的多目標檢測算法。與faster rcnn相比,該算法沒有生成 proposal 的過程,這就極大提高了檢測速度。針對不同大小的目標檢測,傳統的做法是先將圖像轉換成不同大小(圖像金字塔),然後分別檢測,最後將結果綜合起來(NMS)。而SSD算法則利用不同卷積層的 feature map 進行綜合也能達到同樣的效果。算法的主網絡結構是VGG16,將最後兩個全連接層改成卷積層,並隨後增加了4個卷積層來構造網絡結構。對其中5種不同的卷積層的輸出(feature map)分別用兩個不同的 3×3 的卷積核進行卷積,一個輸出分類用的confidence,每個default box 生成21個類別confidence;一個輸出迴歸用的 localization,每個 default box 生成4個座標值$ (x, y, w, h)$。此外,這5個feature map還經過 PriorBox 層生成 prior box(生成的是座標)。上述5個feature map中每一層的default box的數量是給定的(8732個)。最後將前面三個計算結果分別合併然後傳給loss層。
voc2007上測試的mAP爲80.6%.(512,512).

image

feature map cell 即圖中小格子

default box 即圖中虛線所形成的一系列 boxes

這種default box在不同的feature層有不同的scale,在同一個feature層又有不同的aspect ratio(default box的縱橫比),因此基本上可以覆蓋輸入圖像中的各種形狀和大小的object!

image

38*38*3+(19*19+10*10+5*5+3×3+1*1)×6=7038

後面四層爲在VGG-16-Atrous基礎網絡上填加的特徵提取層.檢測過程不僅在填加特徵圖(conv8_2, conv9_2, conv_10_2, pool_11)上進行,爲了保證網絡對小目標有很好檢測效果,檢測過程也在基礎網絡特徵圖(conv4_3, conv_7)上進行。

損失函數:
image

3) DSSD網絡

    SSD方法用的基準網絡是VGGNet,要是換成Resnet-101的話就能提升精度,這就更好的特徵提取網絡。在目標檢測研究之外,有一種編碼-解碼(encoder-decoder )網絡,其中網絡中間層加入了輸入圖像的編碼部分,後面再進行解碼(就是卷積和反捲積),這樣形成的寬-窄-寬的網絡結構很像沙漏,FCN就是類似結構,本文就利用反捲積層實現了上下文信息的擴充。
 首先,把SSD的基準網絡從VGG換成了Resnet-101,增強了特徵提取能力;然後使用反捲積層(deconvolution layer )增加了大量上下文信息,最終提升了目標檢測精度,尤其是小物體的檢測精度.voc2007測試的mAP爲81.5%(512,512)
 
image

如何利用上下文信:就是把紅色層做反捲積操作,使其和上一級藍色層尺度相同,再把二者融合在一起,得到的新的紅色層用來做預測。如此反覆,仍然形成多尺度檢測框架。在圖中越往後的紅色層分辨率越高,而且包含的上下文信息越豐富,綜合在一起,使得檢測精度得以提升。

4)stacked hourglass network

堆積沙漏網絡論文閱讀.
https://blog.csdn.net/zziahgf/article/details/72732220

image

第一行爲卷積路,由三個核尺度不同的卷積層(白色)串聯而成,間插有Batch Normalization(淺藍)和ReLU(淺紫);
第二行爲跳級路,只包含一個核尺度爲1的卷積層;如果跳級路的輸入輸出通道數相同,則這一路爲單位映射。
所有卷積層的步長爲1,pading爲1,不改變數據尺寸,只對數據深度(channel)進行變更。
Residual Module由兩個參數控制:輸入深度M和輸出深度N。可以對任意尺寸圖像操作。

作用:Residual模塊提取了較高層次的特徵(卷積路),同時保留了原有層次的信息(跳級路)。
不改變數據尺寸,只改變數據深度。可以把它看做一個保尺寸的高級“卷積”層。

Blitznet中的resskip

First, incoming feature maps are upsampled to the size of corresponding skip connection via bilinear interpolation.

Then both skip connection feature maps and upsampled maps are concatenated and passed through a block (1 × 1 convolution, 3 × 3 convolution, 1 × 1 convolution) and summed with the upsampled input through a residual connection.

image

通過線性插值法上採樣到與跳躍連接的特徵層一樣大,然後聚合爲一個更深的特徵maps,再進入(1 × 1 convolution, 3 × 3 convolution, 1 × 1 convolution)在通過residual
connection將結果與上採樣輸入相加

細節圖

image

第一行爲卷積路,由三個核尺度不同的卷積層(白色)串聯而成,間插有Batch Normalization(淺藍)和ReLU(淺紫);
第二行爲跳級路,只包含一個核尺度爲1的卷積層;如果跳級路的輸入輸出通道數相同,則這一路爲單位映射。
所有卷積層的步長爲1,pading爲1,不改變數據尺寸,只對數據深度(channel)進行變更。
Residual Module由兩個參數控制:輸入深度M和輸出深度N。可以對任意尺寸圖像操作。

5)Multiscale Detection and Segmentation

image

detect:跳躍結構, 通過兩個卷積核分別產生conf和loc,再輸入softmax
segment:幾倍上採樣串聯爲一個更深的feature maps,通過跳躍結構連接.最後通過1*1的卷積核產生深度爲21的特徵圖

6)non-maximum suppression

image

目的就是要去除冗餘的檢測框,保留最好的一個


7)mAP

image

image

其中,selected elements是按confidence score 排序的TOPK


image

某一類的AP的計算:
ASCAL VOC CHALLENGE的計算方法。首先設定一組閾值,[0, 0.1, 0.2, …, 1]。然後對於recall大於每一個閾值(比如recall>0.3),我們都會得到一個對應的最大precision。這樣,我們就計算出了11個precision。AP即爲這11個precision的平均值。這種方法英文叫做11-point interpolated average precision。

新的計算方法假設這N個樣本中有M個正例,那麼我們會得到M個recall值(1/M, 2/M, …, M/M),對於每個recall值r,我們可以計算出對應(r’ > r)的最大precision,然後對這M個precision值取平均即得到最後的AP值

mAP即所有AP的平均值

loss function:

seg_loss:交叉熵損失 cross-entropy loss.
該目標函數計算的是每個像素的預測概率分佈和其真實概率分佈間的距離.
tensorflow中關於交叉熵損失函數的計算有四種,參考:
https://blog.csdn.net/QW_sunny/article/details/72885403?utm_source=blogxgwz0

本文用的是tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None, name=None)
它對於輸入的logits先通過softmax函數計算,再計算它們的交叉熵,但是它對交叉熵的計算方式進行了優化,使得結果不至於溢出
它適用於每個類別相互獨立且排斥的情況,一幅圖只能屬於一類,而不能同時包含一條狗和一隻大象 
output不是一個數,而是一個batch中每個樣本的loss,所以一般配合tf.reduce_mean(loss)使用

det_loss:

image

本文中的具體loss如何把檢測和分割的loss協同起來,作者沒有在論文中做詳細說明,在作者個給出的開源代碼中可以看出只是對兩中loss做了相加的操作.

image

tf.GraphKeys.REGULARIZATION_LOSSES是weights的正則化損失

三、實驗結果

輸出結果:

mean absolute percentage

[INFO]: Eval results:
| Category   |   mAP (all) |
|------------+-------------|
| road       |       1.000 |
| line       |       0.960 |
| lane       |       0.872 |
| car        |       0.897 |
| man        |       0.334 |
| bman       |       0.000 |
| barrier    |       0.419 |
| AVERAGE    |       0.640 |
0.5014037
[INFO]: 
 Mean IoU is 0.501404

map的計算有問題,目前未解決

四、思考

1、損失函數只是簡單的相加,不能充分體現二者協同.在實驗中,推理結果發現有的對象檢測可以檢測到,但是分割任務不能將其分出;有的分割可以分出確檢測不到.在智能駕駛處場景中,希望能道路只用分割標籤,其他的用檢測和分割兩個標籤,鑑於上述的實驗結果觀察,考慮可以在兩個損失函數之間,添加懲罰項,如果道路之外的分類出現上述問題,加強對此類問題的學習.

上下問信息的利用,是否可以通過空洞卷積的形式.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章