国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MobileNetV1詳細(xì)原理(含torch源碼)

這篇具有很好參考價(jià)值的文章主要介紹了MobileNetV1詳細(xì)原理(含torch源碼)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

MobileNetV1詳細(xì)原理(含torch源碼)

目錄

MobileNetV1原理

MobileNet V1的網(wǎng)絡(luò)結(jié)構(gòu)如下:

為什么要設(shè)計(jì)MobileNet:

MobileNetV1的主要特點(diǎn)如下:

MobileNetV1的創(chuàng)新點(diǎn):

MobileNetV1源碼(torch版)

訓(xùn)練10個(gè)epoch的效果


MobileNetV1原理

????????MobileNet V1是一種輕量級的卷積神經(jīng)網(wǎng)絡(luò),能夠在保持較高準(zhǔn)確率的情況下具有較少的參數(shù)量和計(jì)算時(shí)間。它是由Google的研究人員在2017年提出的,并成為當(dāng)時(shí)最流行的輕量級模型之一。

????????MobileNet V1的核心思想是通過深度分離卷積來減少模型的參數(shù)量和計(jì)算時(shí)間。與標(biāo)準(zhǔn)卷積不同,深度分離卷積將空間卷積和通道卷積分為兩個(gè)獨(dú)立的卷積層,這使得網(wǎng)絡(luò)更加高效。具體來說,在深度分離卷積中,首先使用一個(gè)空間卷積,然后使用一個(gè)通道卷積來提取特征。這與標(biāo)準(zhǔn)卷積相比可以減少參數(shù)數(shù)量并加速運(yùn)算。

MobileNet V1的網(wǎng)絡(luò)結(jié)構(gòu)如下:

MobileNetV1詳細(xì)原理(含torch源碼)

????????MobileNet V1由序列卷積和1x1卷積兩個(gè)部分組成。序列卷積包括13個(gè)深度可分離卷積層,每個(gè)層都包括一個(gè)3x3的卷積和一個(gè)批量歸一化層(BN層),并且在卷積之后使用了ReLU6激活函數(shù)。最后,1x1卷積層用于生成最終的特征向量,并使用全局平均池化來縮小特征圖的大小。在最后一層之后,使用一個(gè)全連接層來進(jìn)行分類。MobileNet V1可以根據(jù)需要使用不同的輸入分辨率,其超參數(shù)取決于輸入分辨率和需要的精度。

為什么要設(shè)計(jì)MobileNet:

????????Mobilenetv1是一種輕量級的深度神經(jīng)網(wǎng)絡(luò)模型,設(shè)計(jì)的目的是在保持較高的精度的同時(shí)減小模型的大小和計(jì)算量,使其適合于移動(dòng)設(shè)備的推理任務(wù)。在過去,大部分深度神經(jīng)網(wǎng)絡(luò)模型都是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行設(shè)計(jì)的,這些模型往往非常龐大(比如VGG16/VGG19),因此不能直接應(yīng)用于手機(jī)或其他嵌入式設(shè)備上。同時(shí),運(yùn)行這些大型模型所需要的計(jì)算資源也很昂貴。

????????為了解決這個(gè)問題,Google Brain團(tuán)隊(duì)提出了Mobilenetv1。Mobilenetv1是基于深度可分離卷積(depthwise separable convolution)的設(shè)計(jì),它將標(biāo)準(zhǔn)的卷積層分成深度卷積層和逐點(diǎn)卷積層兩個(gè)部分,用較少的參數(shù)和計(jì)算量達(dá)到了相當(dāng)不錯(cuò)的準(zhǔn)確率。具體來說,深度卷積層用于在每個(gè)通道上執(zhí)行空間卷積,而逐點(diǎn)卷積層(Pointwise Convolution)用于在不同通道之間執(zhí)行線性變換。這種設(shè)計(jì)可以減少計(jì)算量和模型大小,并使得Mobilenetv1在移動(dòng)設(shè)備上能夠運(yùn)行得更快。

????????除此之外,Mobilenetv1還使用了其他一些技巧來進(jìn)一步縮小模型。例如,通過擴(kuò)張系數(shù)(expansion factor)來控制輸出通道數(shù)和輸入通道數(shù)之間的關(guān)系,從而精細(xì)控制模型的大小和復(fù)雜度;通過殘差連接(Residual Connection)來提高信息流動(dòng),從而提高模型的準(zhǔn)確性和訓(xùn)練速度。

????????綜合來說,Mobilenetv1是一種非常出色的深度神經(jīng)網(wǎng)絡(luò)模型,它在保持較高精確度的同時(shí),大大減小了模型大小和計(jì)算量,使得它更容易嵌入到移動(dòng)和嵌入式設(shè)備中。

MobileNetV1的主要特點(diǎn)如下:

  1. 輕量級:MobileNetv1的模型參數(shù)量非常少,只有4.2M,比起其他深度神經(jīng)網(wǎng)絡(luò)模型如VGG16、ResNet等模型,模型大小大大減小,更適合移動(dòng)設(shè)備等資源受限環(huán)境下進(jìn)行應(yīng)用。

  2. 深度可分離卷積:MobileNetv1主要使用了深度可分離卷積,即將標(biāo)準(zhǔn)卷積分解成一個(gè)深度卷積和一個(gè)逐點(diǎn)卷積兩個(gè)部分,分離后分別進(jìn)行卷積操作,可以大大減少計(jì)算量和參數(shù)數(shù)量,從而實(shí)現(xiàn)輕量化的目的。

  3. 使用卷積核大小為1x1的卷積層和全局平均池化層:MobileNetv1使用了大量的1x1卷積層和全局平均池化層來代替?zhèn)鹘y(tǒng)的卷積層,可以減少特征圖的空間尺寸,從而減少計(jì)算量和參數(shù)數(shù)量。

  4. 加入線性層和ReLU6激活函數(shù):為了減少梯度消失的現(xiàn)象,MobileNetv1在每個(gè)深度可分離卷積結(jié)構(gòu)后加入一個(gè)線性層和ReLU6激活函數(shù),同時(shí)提高模型的非線性能力。

  5. 高性能:MobileNetv1在性能表現(xiàn)方面也做得很好,準(zhǔn)確率達(dá)到了當(dāng)時(shí)的state-of-the-art水平,同時(shí)模型具有高效率的特點(diǎn),能夠在較短的時(shí)間內(nèi)完成較為復(fù)雜的任務(wù)。

MobileNetV1的創(chuàng)新點(diǎn):

  1. Depthwise Separable Convolution(深度可分離卷積)

????????MobileNetV1使用Depthwise Separable Convolution代替了傳統(tǒng)的卷積操作。Depthwise Separable Convolution分為兩個(gè)步驟,首先進(jìn)行深度卷積,然后進(jìn)行點(diǎn)卷積。深度卷積可以在每個(gè)輸入通道上進(jìn)行濾波操作,而點(diǎn)卷積使用1×1卷積來對每個(gè)通道進(jìn)行線性組合。這樣可以減少運(yùn)算量以及減小模型的大小,同時(shí)也可以提高模型的精度和魯棒性。

? ? ?2. Width Multiplier(寬度乘法參數(shù))

????????MobileNetV1引入了width multiplier的概念,可以通過調(diào)整寬度乘數(shù)來控制模型的大小和計(jì)算量。寬度乘數(shù)是作用于每一層的通道數(shù)目,可以取0到1的任意值。當(dāng)寬度乘數(shù)為1時(shí),模型與原始模型一致,而當(dāng)寬度乘數(shù)小于1時(shí),模型會(huì)變得更輕巧。

? ? ?3. Global Depthwise Pooling(全局深度池化)

????????MobileNetV1使用Global Depthwise Pooling代替了全連接層。全局深度池化是在每個(gè)通道上進(jìn)行求和操作,并將結(jié)果作為輸出。這樣可以有效地減少模型的參數(shù)量和計(jì)算量,提高模型的速度和精度。

MobileNetV1詳細(xì)原理(含torch源碼)

????????總的來說,MobileNetV1在模型輕量化方面具有顯著的創(chuàng)新,可以在計(jì)算資源有限的設(shè)備上進(jìn)行高效的推理操作,成為了移動(dòng)設(shè)備上的高效神經(jīng)網(wǎng)絡(luò)模型。

MobileNetV1源碼(torch版)

數(shù)據(jù)集運(yùn)行代碼時(shí)自動(dòng)下載,如果網(wǎng)絡(luò)比較慢,可以自行點(diǎn)擊我分享的鏈接下載cifar數(shù)據(jù)集。

鏈接:百度網(wǎng)盤
提取碼:kd9a?

# -*- coding: utf-8 -*-
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision.datasets import CIFAR10
from torchvision.transforms import transforms
from torch.autograd import Variable


class DepthwiseSeparableConv(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(DepthwiseSeparableConv, self).__init__()

        self.depthwise_conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, padding=1, groups=in_channels)
        self.pointwise_conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x):
        x = self.depthwise_conv(x)
        x = self.pointwise_conv(x)
        x = self.relu(x)
        return x


class MobileNetV1(nn.Module):
    def __init__(self, num_classes=1000):
        super(MobileNetV1, self).__init__()

        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=2, padding=1)
        self.relu = nn.ReLU(inplace=True)

        self.dw_separable_conv1 = DepthwiseSeparableConv(32, 64)
        self.dw_separable_conv2 = DepthwiseSeparableConv(64, 128)
        self.dw_separable_conv3 = DepthwiseSeparableConv(128, 128)
        self.dw_separable_conv4 = DepthwiseSeparableConv(128, 256)
        self.dw_separable_conv5 = DepthwiseSeparableConv(256, 256)
        self.dw_separable_conv6 = DepthwiseSeparableConv(256, 512)
        self.dw_separable_conv7 = DepthwiseSeparableConv(512, 512)
        self.dw_separable_conv8 = DepthwiseSeparableConv(512, 512)
        self.dw_separable_conv9 = DepthwiseSeparableConv(512, 512)
        self.dw_separable_conv10 = DepthwiseSeparableConv(512, 512)
        self.dw_separable_conv11 = DepthwiseSeparableConv(512, 512)
        self.dw_separable_conv12 = DepthwiseSeparableConv(512, 1024)
        self.dw_separable_conv13 = DepthwiseSeparableConv(1024, 1024)

        self.avg_pool = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Linear(1024, num_classes)

    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(x)

        x = self.dw_separable_conv1(x)
        x = self.dw_separable_conv2(x)
        x = self.dw_separable_conv3(x)
        x = self.dw_separable_conv4(x)
        x = self.dw_separable_conv5(x)
        x = self.dw_separable_conv6(x)
        x = self.dw_separable_conv7(x)
        x = self.dw_separable_conv8(x)
        x = self.dw_separable_conv9(x)
        x = self.dw_separable_conv10(x)
        x = self.dw_separable_conv11(x)
        x = self.dw_separable_conv12(x)
        x = self.dw_separable_conv13(x)

        x = self.avg_pool(x)
        x = torch.flatten(x, 1)
        x = self.fc(x)

        return x
def main():
    train_data = CIFAR10('cifar',train=True,transform = transforms.ToTensor())
    data = DataLoader(train_data,batch_size=128,shuffle=True)

    device = torch.device("cuda")
    net = MobileNetV1(num_classes=10).to(device)
    print(net)
    cross = nn.CrossEntropyLoss().to(device)
    optimizer = torch.optim.Adam(net.parameters(),0.001)
    for epoch in range(10):
        for img,label in data:
            img = Variable(img).to(device)
            label = Variable(label).to(device)
            output = net.forward(img)
            loss = cross(output,label)
            loss.backward()
            optimizer.zero_grad()
            optimizer.step()
            pre = torch.argmax(output,1)
            num = (pre == label).sum().item()
            acc = num / img.shape[0]
        print("epoch:",epoch + 1)
        print("loss:",loss.item())
        print("acc:",acc)
    pass


if __name__ == '__main__':
    main()

????????上述代碼中,我使用的是CIFAR-10數(shù)據(jù)集,通過訓(xùn)練MobileNet V1對圖像進(jìn)行分類。在訓(xùn)練過程中,我使用Adam優(yōu)化器和交叉熵?fù)p失函數(shù),并在訓(xùn)練后使用驗(yàn)證集評估模型的性能。

????????其中,模型中使用了Depthwise Separable Convolution,它包含一層深度卷積和一層1x1卷積。深度卷積用于處理輸入數(shù)據(jù)的不同通道,1x1卷積用于將不同通道的特征圖合并成更多的通道。這個(gè)操作可以有效地減少參數(shù)數(shù)量和計(jì)算量,并提高模型的性能。

????????另外,模型還使用了AdaptiveAvgPool2d,該層可以自適應(yīng)地將輸入特征圖的大小調(diào)整為任意大小,并對每個(gè)子區(qū)域進(jìn)行平均池化操作。這可以使模型對輸入圖像的尺寸具有更強(qiáng)的魯棒性。

????????通過MobileNet V1,我們可以在保持較高精度的同時(shí)具有較少的參數(shù)量和計(jì)算時(shí)間,在計(jì)算資源受限的情況下尤其有用。

訓(xùn)練10個(gè)epoch的效果

MobileNetV1詳細(xì)原理(含torch源碼)文章來源地址http://www.zghlxwxcb.cn/news/detail-418184.html

到了這里,關(guān)于MobileNetV1詳細(xì)原理(含torch源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【RT-DETR有效改進(jìn)】輕量化CNN網(wǎng)絡(luò)MobileNetV1改進(jìn)特征提取網(wǎng)絡(luò)

    【RT-DETR有效改進(jìn)】輕量化CNN網(wǎng)絡(luò)MobileNetV1改進(jìn)特征提取網(wǎng)絡(luò)

    ??歡迎大家訂閱本專欄,一起學(xué)習(xí)RT-DETR??? ?? 本篇文章給大家?guī)淼母倪M(jìn)機(jī)制是 MobileNetV1 ,其是專為移動(dòng)和嵌入式視覺應(yīng)用設(shè)計(jì)的輕量化網(wǎng)絡(luò)結(jié)構(gòu)。這些模型基于簡化的架構(gòu),并利用深度可分離卷積構(gòu)建輕量級深度神經(jīng)網(wǎng)絡(luò),其 引入了兩個(gè)簡單的全局超參數(shù) ,用于在延

    2024年01月19日
    瀏覽(36)
  • MobileNetV2原理說明及實(shí)踐落地

    MobileNetV2原理說明及實(shí)踐落地

    本文參考: 輕量級網(wǎng)絡(luò)——MobileNetV2_Clichong的博客-CSDN博客_mobilenetv2 MobileNetV1主要是提出了可分離卷積的概念,大大減少了模型的參數(shù)個(gè)數(shù),從而縮小了計(jì)算量。但是在CenterNet算法中作為BackBone效果并不佳,模型收斂效果不好導(dǎo)致目標(biāo)檢測的準(zhǔn)確率不高。 MobileNetV2在MobileNetV1的

    2024年02月08日
    瀏覽(22)
  • YOLOv5源碼逐行超詳細(xì)注釋與解讀(1)——項(xiàng)目目錄結(jié)構(gòu)解析

    YOLOv5源碼逐行超詳細(xì)注釋與解讀(1)——項(xiàng)目目錄結(jié)構(gòu)解析

    前面簡單介紹了YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)和創(chuàng)新點(diǎn)(直通車:【YOLO系列】YOLOv5超詳細(xì)解讀(網(wǎng)絡(luò)詳解)) 在接下來我們會(huì)進(jìn)入到Y(jié)OLOv5更深一步的學(xué)習(xí),首先從源碼解讀開始。 因?yàn)槲沂羌冃“?,剛開始下載完源碼時(shí)真的一臉懵,所以就先從最基礎(chǔ)的 項(xiàng)目目錄結(jié)構(gòu) 開始吧~因?yàn)橄嚓P(guān)解讀

    2024年02月03日
    瀏覽(30)
  • 遺傳算法原理詳細(xì)講解(算法+Python源碼)

    遺傳算法原理詳細(xì)講解(算法+Python源碼)

    博主介紹:?專研于前后端領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、本質(zhì)互聯(lián)網(wǎng)精神開源貢獻(xiàn)答疑解惑、堅(jiān)持優(yōu)質(zhì)作品共享、掘金/騰訊云/阿里云等平臺優(yōu)質(zhì)作者、擅長前后端項(xiàng)目開發(fā)和畢業(yè)項(xiàng)目實(shí)戰(zhàn),深受全網(wǎng)粉絲喜愛與支持?有需要可以聯(lián)系作者我哦! ??文末獲取源碼聯(lián)系?? ???? 精彩專欄

    2024年01月25日
    瀏覽(34)
  • ResNet18詳細(xì)原理(含tensorflow版源碼)

    ResNet18詳細(xì)原理(含tensorflow版源碼)

    ? ? ? ? ResNet18是一個(gè)經(jīng)典的深度卷積神經(jīng)網(wǎng)絡(luò)模型,由微軟亞洲研究院提出,用于參加2015年的ImageNet圖像分類比賽。ResNet18的名稱來源于網(wǎng)絡(luò)中包含的18個(gè)卷積層。 ResNet18的基本結(jié)構(gòu)如下: 輸入層:接收大小為224x224的RGB圖像。 卷積層:共4個(gè)卷積層,每個(gè)卷積層使用3x3的卷積

    2024年02月04日
    瀏覽(22)
  • Darknet19詳細(xì)原理(含tensorflow版源碼)

    Darknet19詳細(xì)原理(含tensorflow版源碼)

    ????????Darknet19是一個(gè)輕量級的卷積神經(jīng)網(wǎng)絡(luò),用于圖像分類和檢測任務(wù)。 它是YOLOv2目標(biāo)檢測算法的主干網(wǎng)絡(luò),它的優(yōu)點(diǎn)在于具有較少的參數(shù)和計(jì)算量,在計(jì)算速度和精度之間取得了良好的平衡,同時(shí)在訓(xùn)練過程中也具有較高的準(zhǔn)確率和收斂速度。 ????????Darknet19主要

    2023年04月22日
    瀏覽(19)
  • VGG16詳細(xì)原理(含tensorflow版源碼)

    VGG16詳細(xì)原理(含tensorflow版源碼)

    ????????VGG16是一個(gè)經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)模型,由牛津大學(xué)計(jì)算機(jī)視覺組(Visual Geometry Group)提出,用于參加2014年的ImageNet圖像分類比賽。VGG16的名稱來源于網(wǎng)絡(luò)中包含的16個(gè)卷積層,其基本結(jié)構(gòu)如下: 輸入層:接收大小為224x224的RGB圖像。 卷積層:共13個(gè)卷積層,每個(gè)卷積

    2024年02月05日
    瀏覽(15)
  • Vue項(xiàng)目中axios的原理(詳細(xì)到源碼)

    Vue項(xiàng)目中axios的原理(詳細(xì)到源碼)

    關(guān)于 axios 的基本使用,上篇文章已經(jīng)有所涉及,這里再稍微回顧下: 構(gòu)建一個(gè) Axios 構(gòu)造函數(shù),核心代碼為 request 導(dǎo)出 axios 實(shí)例 上述就已經(jīng)能夠?qū)崿F(xiàn) axios({ }) 這種方式的請求 下面是來實(shí)現(xiàn)下 axios.method() 這種形式的請求 將 Axios.prototype 上的方法搬運(yùn)到 request 上 首先實(shí)現(xiàn)個(gè)工

    2024年01月20日
    瀏覽(26)
  • Springboot中SpringSecurity自動(dòng)裝配原理,源碼級別絕對詳細(xì)

    Springboot中SpringSecurity自動(dòng)裝配原理,源碼級別絕對詳細(xì)

    (1)Springboot有一個(gè)自動(dòng)配置類 SecurityFilterAutoConfiguration , SecurityFilterAutoConfiguration 只要當(dāng)項(xiàng)目中引入了SpringSecurity的相關(guān)jar包就會(huì)被自動(dòng)加載。裝載這個(gè)類是干嘛的呢? (2)如下圖, SecurityFilterAutoConfiguration 自動(dòng)配置類主要用于,當(dāng)存在名字叫做\\\"springSecurityFilterChain\\\"的bea

    2024年02月05日
    瀏覽(26)
  • 詳細(xì)解讀Java中Map集合的底層原理(干貨+源碼解讀)

    詳細(xì)解讀Java中Map集合的底層原理(干貨+源碼解讀)

    本文將為大家詳細(xì)講解Java中的Map集合,這是我們進(jìn)行開發(fā)時(shí)經(jīng)常用到的知識點(diǎn),也是大家在學(xué)習(xí)Java中很重要的一個(gè)知識點(diǎn),更是我們在面試時(shí)有可能會(huì)問到的問題。 文章較長,干貨滿滿,建議大家收藏慢慢學(xué)習(xí)。文末有本文重點(diǎn)總結(jié),主頁有全系列文章分享。技術(shù)類問題,

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包