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

DeepLabV3+:Mobilenetv2的改進(jìn)以及淺層特征和深層特征的融合

這篇具有很好參考價(jià)值的文章主要介紹了DeepLabV3+:Mobilenetv2的改進(jìn)以及淺層特征和深層特征的融合。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

Mobilenetv2的改進(jìn)

淺層特征和深層特征的融合

完整代碼

參考資料


Mobilenetv2的改進(jìn)

在DeeplabV3當(dāng)中,一般不會5次下采樣,可選的有3次下采樣和4次下采樣。因?yàn)橐M(jìn)行五次下采樣的話會損失較多的信息。

在這里mobilenetv2會從之前寫好的模塊中得到,但注意的是,我們在這里獲得的特征是[-1],也就是最后的1x1卷積不取,只取循環(huán)完后的模型。

down_idx是InvertedResidual進(jìn)行的次數(shù)。

# t, c, n, s
[1, 16, 1, 1],?
[6, 24, 2, 2], ?? 2
[6, 32, 3, 2], ? ?4
[6, 64, 4, 2], ? ?7 ?
[6, 96, 3, 1],
[6, 160, 3, 2], ??14
[6, 320, 1, 1],?

根據(jù)下采樣的不同,當(dāng)downsample_factor=8時(shí),進(jìn)行3次下采樣,對倒數(shù)兩次,步長為2的InvertedResidual進(jìn)行參數(shù)的修改,讓步長變?yōu)?,膨脹系數(shù)為2。

當(dāng)downsample_factor=16時(shí),進(jìn)行4次下采樣,只需對最后一次進(jìn)行參數(shù)的修改。

import torch
import torch.nn as nn
import torch.nn.functional as F
from functools import partial

from net.mobilenetv2 import mobilenetv2
from net.ASPP import ASPP

class MobileNetV2(nn.Module):
    def __init__(self, downsample_factor=8, pretrained=True):
        super(MobileNetV2, self).__init__()
        
        model           = mobilenetv2(pretrained)
        self.features   = model.features[:-1]

        self.total_idx  = len(self.features)
        self.down_idx   = [2, 4, 7, 14]

        if downsample_factor == 8:
            for i in range(self.down_idx[-2], self.down_idx[-1]):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=2)
                )
            for i in range(self.down_idx[-1], self.total_idx):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=4)
                )
        elif downsample_factor == 16:
            for i in range(self.down_idx[-1], self.total_idx):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=2)
                )
        
    def _nostride_dilate(self, m, dilate):
        classname = m.__class__.__name__
        if classname.find('Conv') != -1:
            if m.stride == (2, 2):
                m.stride = (1, 1)
                if m.kernel_size == (3, 3):
                    m.dilation = (dilate//2, dilate//2)
                    m.padding = (dilate//2, dilate//2)
            else:
                if m.kernel_size == (3, 3):
                    m.dilation = (dilate, dilate)
                    m.padding = (dilate, dilate)

    def forward(self, x):
        low_level_features = self.features[:4](x)
        x = self.features[4:](low_level_features)
        return low_level_features, x

forward當(dāng)中,會輸出兩個(gè)特征層,一個(gè)是淺層特征層,具有淺層的語義信息;另一個(gè)是深層特征層,具有深層的語義信息。

淺層特征和深層特征的融合

deeplabv3-plus改進(jìn),# 基于語義分割的道路裂縫檢測,深度學(xué)習(xí),人工智能,pytorch

?具有高語義信息的部分先進(jìn)行上采樣,低語義信息的特征層進(jìn)行1x1卷積,二者進(jìn)行特征融合,再進(jìn)行3x3卷積進(jìn)行特征提取

self.aspp = ASPP(dim_in=in_channels, dim_out=256, rate=16//downsample_factor)

這一步就是獲得那個(gè)綠色的特征層;

low_level_features = self.shortcut_conv(low_level_features)

從這里將是對淺層特征的初步處理(1x1卷積);

x = F.interpolate(x, size=(low_level_features.size(2), low_level_features.size(3)), mode='bilinear', align_corners=True)
x = self.cat_conv(torch.cat((x, low_level_features), dim=1))

上采樣后進(jìn)行特征融合,這樣我們輸入和輸出的大小才相同,每一個(gè)像素點(diǎn)才能進(jìn)行預(yù)測;

完整代碼

# deeplabv3plus.py

import torch
import torch.nn as nn
import torch.nn.functional as F
from functools import partial

from net.xception import xception
from net.mobilenetv2 import mobilenetv2
from net.ASPP import ASPP

class MobileNetV2(nn.Module):
    def __init__(self, downsample_factor=8, pretrained=True):
        super(MobileNetV2, self).__init__()
        
        model           = mobilenetv2(pretrained)
        self.features   = model.features[:-1]

        self.total_idx  = len(self.features)
        self.down_idx   = [2, 4, 7, 14]

        if downsample_factor == 8:
            for i in range(self.down_idx[-2], self.down_idx[-1]):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=2)
                )
            for i in range(self.down_idx[-1], self.total_idx):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=4)
                )
        elif downsample_factor == 16:
            for i in range(self.down_idx[-1], self.total_idx):
                self.features[i].apply(
                    partial(self._nostride_dilate, dilate=2)
                )
        
    def _nostride_dilate(self, m, dilate):
        classname = m.__class__.__name__
        if classname.find('Conv') != -1:
            if m.stride == (2, 2):
                m.stride = (1, 1)
                if m.kernel_size == (3, 3):
                    m.dilation = (dilate//2, dilate//2)
                    m.padding = (dilate//2, dilate//2)
            else:
                if m.kernel_size == (3, 3):
                    m.dilation = (dilate, dilate)
                    m.padding = (dilate, dilate)

    def forward(self, x):
        low_level_features = self.features[:4](x)
        x = self.features[4:](low_level_features)
        return low_level_features, x

class DeepLab(nn.Module):
    def __init__(self, num_classes, backbone="mobilenet", pretrained=True, downsample_factor=16):
        super(DeepLab, self).__init__()
        if backbone=="xception":
         
            #   獲得兩個(gè)特征層:淺層特征 主干部分    
            self.backbone = xception(downsample_factor=downsample_factor, pretrained=pretrained)
            in_channels = 2048
            low_level_channels = 256
        elif backbone=="mobilenet":

            #   獲得兩個(gè)特征層:淺層特征 主干部分
            self.backbone = MobileNetV2(downsample_factor=downsample_factor, pretrained=pretrained)
            in_channels = 320
            low_level_channels = 24
        else:
            raise ValueError('Unsupported backbone - `{}`, Use mobilenet, xception.'.format(backbone))

        #   ASPP特征提取模塊
        #   利用不同膨脹率的膨脹卷積進(jìn)行特征提取
        self.aspp = ASPP(dim_in=in_channels, dim_out=256, rate=16//downsample_factor)
       
        # 淺層特征邊
        self.shortcut_conv = nn.Sequential(
            nn.Conv2d(low_level_channels, 48, 1),
            nn.BatchNorm2d(48),
            nn.ReLU(inplace=True)
        )		

        self.cat_conv = nn.Sequential(
            nn.Conv2d(48+256, 256, kernel_size=(3,3), stride=(1,1), padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),

            nn.Conv2d(256, 256, kernel_size=(3,3), stride=(1,1), padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),

            nn.Dropout(0.1),
        )
        self.cls_conv = nn.Conv2d(256, num_classes, kernel_size=(1,1), stride=(1,1))

    def forward(self, x):
        H, W = x.size(2), x.size(3)

        # 獲得兩個(gè)特征層,low_level_features: 淺層特征-進(jìn)行卷積處理
        #                x : 主干部分-利用ASPP結(jié)構(gòu)進(jìn)行加強(qiáng)特征提取
  
        low_level_features, x = self.backbone(x)
        x = self.aspp(x)
        low_level_features = self.shortcut_conv(low_level_features)

        #   將加強(qiáng)特征邊上采樣,與淺層特征堆疊后利用卷積進(jìn)行特征提取
        x = F.interpolate(x, size=(low_level_features.size(2), low_level_features.size(3)), mode='bilinear', align_corners=True)
        x = self.cat_conv(torch.cat((x, low_level_features), dim=1))
        x = self.cls_conv(x)
        x = F.interpolate(x, size=(H, W), mode='bilinear', align_corners=True)
        return x

參考資料

DeepLabV3-/論文精選 at main · Auorui/DeepLabV3- (github.com)

(6條消息) 憨批的語義分割重制版9——Pytorch 搭建自己的DeeplabV3+語義分割平臺_Bubbliiiing的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-805206.html

到了這里,關(guān)于DeepLabV3+:Mobilenetv2的改進(jìn)以及淺層特征和深層特征的融合的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(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)文章

  • 搭建自己的語義分割平臺deeplabV3+

    搭建自己的語義分割平臺deeplabV3+

    在上一篇主要了解了語義分割,實(shí)例分割,全景分割的區(qū)別,以及l(fā)abelme標(biāo)注的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,這邊文章主要是通過deeplabV3+ 構(gòu)建自己的語義分割平臺 上圖所示,是deeplabV3+的主體框架,簡單來說就是編碼,解碼的過程。將輸入的圖片通過DCNN深度卷積神經(jīng)網(wǎng)絡(luò),獲得兩個(gè)有效的

    2024年02月01日
    瀏覽(17)
  • 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)
  • 第七章 MobileNetv2網(wǎng)絡(luò)詳解

    第七章 MobileNetv2網(wǎng)絡(luò)詳解

    第一章 AlexNet網(wǎng)絡(luò)詳解 第二章 VGG網(wǎng)絡(luò)詳解 第三章 GoogLeNet網(wǎng)絡(luò)詳解? 第四章 ResNet網(wǎng)絡(luò)詳解? 第五章 ResNeXt網(wǎng)絡(luò)詳解? 第六章 MobileNetv1網(wǎng)絡(luò)詳解? 第七章 MobileNetv2網(wǎng)絡(luò)詳解? 第八章 MobileNetv3網(wǎng)絡(luò)詳解? 第九章 ShuffleNetv1網(wǎng)絡(luò)詳解? 第十章 ShuffleNetv2網(wǎng)絡(luò)詳解? 第十一章 EfficientNet

    2024年02月07日
    瀏覽(28)
  • DeepLabV3+:ASPP加強(qiáng)特征提取網(wǎng)絡(luò)的搭建

    DeepLabV3+:ASPP加強(qiáng)特征提取網(wǎng)絡(luò)的搭建

    目錄 ASPP結(jié)構(gòu)介紹 ASPP在代碼中的構(gòu)建 參考資料 ASPP:Atrous Spatial Pyramid Pooling,空洞空間卷積池化金字塔。 簡單理解就是個(gè)至尊版池化層,其目的與普通的池化層一致,盡可能地去提取特征。 利用主干特征提取網(wǎng)絡(luò),會得到一個(gè)淺層特征和一個(gè)深層特征,這一篇主要以如何對

    2024年02月16日
    瀏覽(66)
  • 使用LabVIEW實(shí)現(xiàn) DeepLabv3+ 語義分割含源碼

    使用LabVIEW實(shí)現(xiàn) DeepLabv3+ 語義分割含源碼

    圖像分割可以分為兩類:語義分割(Semantic Segmentation)和實(shí)例分割(Instance Segmentation),前面已經(jīng)給大家介紹過兩者的區(qū)別,并就如何在labview上實(shí)現(xiàn)相關(guān)模型的部署也給大家做了講解,今天和大家分享如何使用labview 實(shí)現(xiàn)deeplabv3+的語義分割,并就 Pascal VOC2012 (DeepLabv3Plus-Mobi

    2024年02月13日
    瀏覽(18)
  • 對MODNet 主干網(wǎng)絡(luò) MobileNetV2的剪枝探索

    對MODNet 主干網(wǎng)絡(luò) MobileNetV2的剪枝探索

    目錄 1 引言 1.1 MODNet 原理 1.2 MODNet 模型分析 2 MobileNetV2 剪枝 2.1 剪枝過程 2.2 剪枝結(jié)果 2.2.1 網(wǎng)絡(luò)結(jié)構(gòu) 2.2.2 推理時(shí)延 2.3 實(shí)驗(yàn)結(jié)論 3 模型嵌入 3.1 模型保存與加載 法一:保存整個(gè)模型 法二:僅保存模型的參數(shù) 小試牛刀 小結(jié) 3.2 修改 MobileNetV2 中的 block 階段一 階段二 總結(jié) 3.2 Mo

    2024年01月22日
    瀏覽(33)
  • 第三章:DeepLabV3——重新思考用于語義圖像分割的擴(kuò)張卷積

    第三章:DeepLabV3——重新思考用于語義圖像分割的擴(kuò)張卷積

    原問題目:《Rethinking Atrous Convolution for Semantic Image Segmentation》 原文引用:Chen L C, Papandreou G, Schroff F, et al. Rethinking atrous convolution for semantic image segmentation[J]. arXiv preprint arXiv:1706.05587, 2017. 發(fā)表時(shí)間:2018年1月 原文鏈接: https://arxiv.org/pdf/1706.05587.pdf%EF%BC%8C%E6%8E%A8%E8%8D%90%E5%9C%A8

    2024年02月16日
    瀏覽(32)
  • 注意力機(jī)制——ECANet及Mobilenetv2模型應(yīng)用

    一、介紹 ECANet(CVPR 2020)作為一種輕量級的注意力機(jī)制,其實(shí)也是通道注意力機(jī)制的一種實(shí)現(xiàn)形式。其論文和開源代碼為: 論文地址:https://arxiv.org/abs/1910.03151 代碼:https://github.com/BangguWu/ECANet ECA模塊,去除了原來SE模塊中的全連接層,直接在全局平均池化之后的特征上通過

    2024年02月16日
    瀏覽(26)
  • MATLAB算法實(shí)戰(zhàn)應(yīng)用案例精講-【自然語言處理】語義分割模型-DeepLabV3

    目錄 自然語言處理庫 1.Hugging Face Datasets 2.TextHero 3.spaCy 4.Hugging Face Transformers 5.Scattertext 1、DeepLab系列簡介

    2024年02月11日
    瀏覽(38)
  • 基于python+MobileNetV2算法模型實(shí)現(xiàn)一個(gè)圖像識別分類系統(tǒng)

    基于python+MobileNetV2算法模型實(shí)現(xiàn)一個(gè)圖像識別分類系統(tǒng)

    算法模型介紹 模型使用訓(xùn)練 模型評估 項(xiàng)目擴(kuò)展 圖像識別是計(jì)算機(jī)視覺領(lǐng)域的重要研究方向,它在人臉識別、物體檢測、圖像分類等領(lǐng)域有著廣泛的應(yīng)用。隨著移動設(shè)備的普及和計(jì)算資源的限制,設(shè)計(jì)高效的圖像識別算法變得尤為重要。MobileNetV2是谷歌(Google)團(tuán)隊(duì)在2018年提

    2024年02月12日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包