日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

ssd檢測不到怎么辦 ssd檢測( 二 )


conv7_feats = F.relu(self.conv7(out)) # (N, 1024, 19, 19)
# Lower-level feature maps
return conv4_3_feats, conv7_feats
我想強調(diào)的是,以下示例是在假設(shè)輸入圖像的大小為 300 x 300 的情況下提供的,如原始論文中所示 。
【ssd檢測不到怎么辦 ssd檢測】可以看出,我們正在使用一個簡單且眾所周知的 VGG-16 網(wǎng)絡(luò)來提取 conv4_3 和 conv7 的特征 。此外,我們可以注意到特征維度分別為 (N, 512, 38, 38) 和 (N, 1024, 19, 19) 。我希望這部分足夠簡單明了,可以繼續(xù)討論 Axuliary Convolutions
Auxiliary Convolutionsclass AuxiliaryConvolutions(nn.Module):
def __init__(self):
super(AuxiliaryConvolutions, self).__init__()
#input (N, 1024, 19, 19) that is conv7_feats
# Auxiliary/additional convolutions on top of the VGG base
self.conv8_1 = nn.Conv2d(1024, 256, kernel_size=1, padding=0) # stride = 1, by default
self.conv8_2 = nn.Conv2d(256, 512, kernel_size=3, stride=2, padding=1) # dim. reduction because stride > 1
self.conv9_1 = nn.Conv2d(512, 128, kernel_size=1, padding=0)
self.conv9_2 = nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1) # dim. reduction because stride > 1
self.conv10_1 = nn.Conv2d(256, 128, kernel_size=1, padding=0)
self.conv10_2 = nn.Conv2d(128, 256, kernel_size=3, padding=0) # dim. reduction because padding = 0
self.conv11_1 = nn.Conv2d(256, 128, kernel_size=1, padding=0)
self.conv11_2 = nn.Conv2d(128, 256, kernel_size=3, padding=0) # dim. reduction because padding = 0
# Initialize convolutions' parameters
self.init_conv2d()
def init_conv2d(self):
"""
Initialize convolution parameters using xavier initialization.
"""
for c in self.children():
if isinstance(c, nn.Conv2d):
nn.init.xavier_uniform_(c.weight)
nn.init.constant_(c.bias, 0.)
def forward(self, conv7_feats):
"""
Forward propagation.
:param conv7_feats: lower-level conv7 feature map, a tensor of dimensions (N, 1024, 19, 19)
:return: higher-level feature maps (N, 512, 10, 10), (N, 256, 5, 5), (N, 256, 3, 3) and (N, 256, 1, 1)
"""
out = F.relu(self.conv8_1(conv7_feats)) # (N, 256, 19, 19)
out = F.relu(self.conv8_2(out)) # (N, 512, 10, 10)
conv8_2_feats = out # (N, 512, 10, 10)
out = F.relu(self.conv9_1(out)) # (N, 128, 10, 10)
out = F.relu(self.conv9_2(out)) # (N, 256, 5, 5)
conv9_2_feats = out # (N, 256, 5, 5)
out = F.relu(self.conv10_1(out)) # (N, 128, 5, 5)
out = F.relu(self.conv10_2(out)) # (N, 256, 3, 3)
conv10_2_feats = out # (N, 256, 3, 3)
out = F.relu(self.conv11_1(out)) # (N, 128, 3, 3)
conv11_2_feats = F.relu(self.conv11_2(out)) # (N, 256, 1, 1)
# Higher-level feature maps
return conv8_2_feats, conv9_2_feats, conv10_2_feats, conv11_2_feats
Auxiliary Convolutions使我們能夠在基礎(chǔ) VGG-16 網(wǎng)絡(luò)之上獲得附加功能 。這些層的大小逐漸減小,并允許在多個尺度上進(jìn)行檢測預(yù)測 。因此,我們傳入網(wǎng)絡(luò)的輸入是從 VGG-16 網(wǎng)絡(luò)獲得的 conv7 特征 。正如在應(yīng)用卷積和 ReLU 激活函數(shù)時所看到的,我們應(yīng)該保留中間特征,即 conv8_2、conv9_2、conv10_2 和 conv11_2 。請花點時間查看代碼和特征圖的尺寸:)
選擇默認(rèn)邊界框
這聽起來可能很可怕,但不要擔(dān)心,它仍然很容易掌握 。默認(rèn)邊界框是手動選擇的 。每個特征圖層都分配了一個比例值 。例如,Conv4_3 以 0.2(有時為 0.1)的最小尺度檢測對象,然后線性增加到 conv11_2(從輔助卷積獲得)的 0.9 尺度 。此外,我們可以注意到,我們正在考慮每個特征圖中每個位置的定義數(shù)量的先驗框 。對于進(jìn)行 4 次預(yù)測的層,SSD 使用 4 種不同的縱橫比,分別為 1、2、0.5 和 sqrt(s_k * s_(k+1)),其中 s_k 是第 k 個特征圖的比例值 。一般定義為長寬比為1時計算出的附加比例,然后默認(rèn)框的寬高計算如下:

推薦閱讀