ssd笔记2
接上一篇?ssd筆記_人工智能-CSDN博客
我這筆記就是流水賬,主要寫的好的太多,寫的差的還是空白,我要填補這個空白
這里面就是稍微說一下對應關系,一個是loc的計算結果,也就是head[0],當然conf的結果size跟loc的size有一種絕對的比例關系,所以就算是一起算出來的
loc的網絡結構如下:
(0, Conv2d(512, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(1, Conv2d(1024, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(2, Conv2d(512, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(3, Conv2d(256, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(4, Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(5, Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
loc的輸入是?sources ,尺寸是
torch.Size([1, 512, 38, 38])
torch.Size([1, 1024, 19, 19])
torch.Size([1, 512, 10, 10])
torch.Size([1, 256, 5, 5])
torch.Size([1, 256, 3, 3])
torch.Size([1, 256, 1, 1])
而這個各個size是輸入為300時,多次下采樣得出的size,上篇也提到了
計算到VGG的第22層,前面22層共下采樣三次(300/8 = 38)
x (1, 512, 38, 38)
L2Norm之后,s (1, 512, 38, 38)
把s加入到 sources 中
x繼續執行完VGG,從23層到最后,又下采樣了一次
x(1, 1024, 19, 19)
這也就是VGG計算到最后的尺寸
又添加到 sources 中,這時,sources有兩個元素
x執行 extras,extras共8個卷積,每隔一次添加到 sources 中,共添加了四個元素
extras 有兩次下采樣,又有兩次不加 pad ?的 3*3卷積的騷操作(每次尺寸變換都會添加到 sources 中),
總之, x的最后size為 (1, 256, 1, 1)
sources 里的尺寸為?
torch.Size([1, 512, 38, 38])
torch.Size([1, 1024, 19, 19])
torch.Size([1, 512, 10, 10])
torch.Size([1, 256, 5, 5])
torch.Size([1, 256, 3, 3])
torch.Size([1, 256, 1, 1])
所以sources的前兩項是從VGG的22層和最后一層獲取到添加進去的,而后面四項是extras計算出來的
而extras用到的參數為
extras = [256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256]
上面的S就是要用步長為2的卷積進行下采樣了,而不是S的,就可能是用3*3的卷積,但不加pad進行下采樣
sources的結果再經過loc的卷積得出返回值
loc的結果尺寸為
torch.Size([1, 38, 38, 16])
torch.Size([1, 19, 19, 24])
torch.Size([1, 10, 10, 24])
torch.Size([1, 5, 5, 24])
torch.Size([1, 3, 3, 16])
torch.Size([1, 1, 1, 16])
訓練時上面第一列的值可能是16,那只是訓練時的batchsize,可以不必關注,畢竟test的時候,該值就是1了
——————————————————————————————
anchor的個數是38 * 38 * 4 + 19 * 19 * 6 + 10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4
也就是8372個
上面的數值是來源于config.py文件里的兩個配置項,
'feature_maps': [38, 19, 10, 5, 3, 1],
'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],
這是PriorBox類里創建anchor用到的
所以,原來如此,feature_map里的值,是從VGG的神經網絡的下采樣尺寸和extras再次下采樣中計算得到的,然后又寫為了超參數,而aspect_ratios的內容是anchor比例,而從該參數又得出了參數
mbox = [4, 6, 6, 6, 4, 4] # number of boxes per feature map location
所以這些沒有寫在一起的參數之間是相互完全制約的,才能嚴絲合縫的匹配
從anchor的角度來看,自然38*38的格子最多,尺寸最小,而從網絡深度來看,自然sources的第一個元素的網絡最淺,也就是對應loc的第一個元素的網絡最淺,所以也就是事實上的,淺層網絡預測小目標,深層網絡預測大目標
38*38,寬高都是一 一對應關系
總結
- 上一篇: 基于onnx的人脸识别
- 下一篇: YOLOv3学习笔记