在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    目標(biāo)檢測算法丨YOLOv3介紹及Darknet53代碼實現(xiàn)

    目標(biāo)檢測算法丨YOLOv3介紹及Darknet53代碼實現(xiàn)

    YOLOv3介紹

    Yolo是You Look once的簡稱,是目標(biāo)檢測算法中比較常用的一種算法,從YOLOv1到Y(jié)OLOv5總共5個版本,這個算法不是最精準(zhǔn)的算法,但是它屬于在檢測速度和檢測精確度之間做了一個折中,其效果也是相當(dāng)不錯的。我們這里主要是介紹其中的第三個版本。

    YOLOv3是目標(biāo)檢測算法中的YOLO算法的第三個版本。在這個版本中其實并沒有太多的創(chuàng)新點(diǎn),更多的是借鑒了前兩個版本,但是卻在保持速度的同時,在精度上做了優(yōu)化。

    YOLOv3使用了一個單獨(dú)的神經(jīng)網(wǎng)絡(luò)作用在圖像上,將圖像劃分成多個區(qū)域并且預(yù)測邊界框和每個區(qū)域的概率。

    Darknet53

    YoloV3所使用的主干特征提取網(wǎng)絡(luò)為Darknet53,它具有兩個重要特點(diǎn):

    1、Darknet53具有一個重要特點(diǎn)是使用了殘差網(wǎng)絡(luò)Residual,Darknet53中的殘差卷積就是首先進(jìn)行一次卷積核大小為3X3、步長為2的卷積,該卷積會壓縮輸入進(jìn)來的特征層的寬和高,此時我們可以獲得一個特征層,我們將該特征層命名為layer。

    之后我們再對該特征層進(jìn)行一次1X1的卷積和一次3X3的卷積,并把這個結(jié)果加上layer,此時我們便構(gòu)成了殘差結(jié)構(gòu)。通過不斷的1X1卷積和3X3卷積以及殘差邊的疊加,我們便大幅度地加深了網(wǎng)絡(luò)。

    殘差網(wǎng)絡(luò)的特點(diǎn)是容易優(yōu)化,并且能夠通過增加相當(dāng)?shù)?span id="d4rj54k" class="wpcom_tag_link">深度來提高準(zhǔn)確率。其內(nèi)部的殘差塊使用了跳躍連接,緩解了在深度神經(jīng)網(wǎng)絡(luò)中增加深度帶來的梯度消失問題。

    2、Darknet53的每一個卷積部分使用了特有的DarknetConv2D結(jié)構(gòu),每一次卷積的時候進(jìn)行l(wèi)2正則化,完成卷積后進(jìn)行BatchNormalization標(biāo)準(zhǔn)化與LeakyReLU。

    普通的ReLU是將所有的負(fù)值都設(shè)為零,Leaky ReLU則是給所有負(fù)值賦予一個非零斜率。以數(shù)學(xué)的方式我們可以表示為:

    代碼實現(xiàn):

    import mathfrom collections import OrderedDictimport torch.nn as nn# ———————————————————————## 殘差結(jié)構(gòu)# 利用一個1×1卷積下降通道數(shù),然后利用一個3×3卷積提取特征并且上升通道數(shù)# 最后接上一個殘差邊# ———————————————————————#class BasicBlock(nn.Module):def __init__(self, inplanes, planes):super(BasicBlock, self).__init__()self.conv1 = nn.Conv2d(inplanes, planes[0], kernel_size=1, stride=1, padding=0, bias=False)self.bn1 = nn.BatchNorm2d(planes[0])self.relu1 = nn.LeakyReLU(0.1)self.conv2 = nn.Conv2d(planes[0], planes[1], kernel_size=3, stride=1, padding=1, bias=False)self.bn2 = nn.BatchNorm2d(planes[1])self.relu2 = nn.LeakyReLU(0.1)def forward(self, x):residual = xout = self.conv1(x)out = self.bn1(out)out = self.relu1(out)out = self.conv2(out)out = self.bn2(out)out = self.relu2(out)out += residualreturn outclass DarkNet(nn.Module):def __init__(self, layers):super(DarkNet, self).__init__()self.inplanes = 32 # 416,416,3 -> 416,416,32self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=3, stride=1, padding=1, bias=False)self.bn1 = nn.BatchNorm2d(self.inplanes)self.relu1 = nn.LeakyReLU(0.1) # 416,416,32 -> 208,208,64self.layer1 = self._make_layer([32, 64], layers[0]) # 208,208,64 -> 104,104,128self.layer2 = self._make_layer([64, 128], layers[1]) # 104,104,128 -> 52,52,256self.layer3 = self._make_layer([128, 256], layers[2]) # 52,52,256 -> 26,26,512 self.layer4 = self._make_layer([256, 512], layers[3]) # 26,26,512 -> 13,13,1024 self.layer5 = self._make_layer([512, 1024], layers[4])self.layers_out_filters = [64, 128, 256, 512, 1024] # 進(jìn)行權(quán)值初始化 for m in self.modules():if isinstance(m, nn.Conv2d):n = m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))elif isinstance(m, nn.BatchNorm2d):m.weight.data.fill_(1)m.bias.data.zero_() # ———————————————————————## 在每一個layer里面,首先利用一個步長為2的3×3卷積進(jìn)行下采樣# 然后進(jìn)行殘差結(jié)構(gòu)的堆疊# ———————————————————————#def _make_layer(self, planes, blocks):layers = [] # 下采樣,步長為2,卷積核大小為3layers.append((“ds_conv”, nn.Conv2d(self.inplanes, planes[1], kernel_size=3, stride=2, padding=1, bias=False)))layers.append((“ds_bn”, nn.BatchNorm2d(planes[1])))layers.append((“ds_relu”, nn.LeakyReLU(0.1))) # 加入殘差結(jié)構(gòu)self.inplanes = planes[1]for i in range(0, blocks):layers.append((“residual_{}”.format(i), BasicBlock(self.inplanes, planes)))return nn.Sequential(OrderedDict(layers))def forward(self, x):x = self.conv1(x)x = self.bn1(x)x = self.relu1(x)x = self.layer1(x)x = self.layer2(x)out3 = self.layer3(x)out4 = self.layer4(out3)out5 = self.layer5(out4)return out3, out4, out5def darknet53():model = DarkNet([1, 2, 8, 8, 4])return model

    這里就是YOLOv3的骨干網(wǎng)絡(luò)的實現(xiàn)。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月2日 09:20
    下一篇 2022年7月2日 09:20

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息