位置: IT常识 - 正文

DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

编辑:rootadmin
DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

目录

Mobilenetv2的改进

浅层特征和深层特征的融合

完整代码

参考资料


Mobilenetv2的改进

推荐整理分享DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在DeeplabV3当中,一般不会5次下采样,可选的有3次下采样和4次下采样。因为要进行五次下采样的话会损失较多的信息。

在这里mobilenetv2会从之前写好的模块中得到,但注意的是,我们在这里获得的特征是[-1],也就是最后的1x1卷积不取,只取循环完后的模型。

down_idx是InvertedResidual进行的次数。

# 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], 

根据下采样的不同,当downsample_factor=8时,进行3次下采样,对倒数两次,步长为2的InvertedResidual进行参数的修改,让步长变为1,膨胀系数为2。

DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

当downsample_factor=16时,进行4次下采样,只需对最后一次进行参数的修改。

import torchimport torch.nn as nnimport torch.nn.functional as Ffrom functools import partialfrom net.mobilenetv2 import mobilenetv2from net.ASPP import ASPPclass 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当中,会输出两个特征层,一个是浅层特征层,具有浅层的语义信息;另一个是深层特征层,具有深层的语义信息。

浅层特征和深层特征的融合

 具有高语义信息的部分先进行上采样,低语义信息的特征层进行1x1卷积,二者进行特征融合,再进行3x3卷积进行特征提取

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

这一步就是获得那个绿色的特征层;

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))

上采样后进行特征融合,这样我们输入和输出的大小才相同,每一个像素点才能进行预测;

完整代码# deeplabv3plus.pyimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom functools import partialfrom net.xception import xceptionfrom net.mobilenetv2 import mobilenetv2from net.ASPP import ASPPclass 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, xclass DeepLab(nn.Module): def __init__(self, num_classes, backbone="mobilenet", pretrained=True, downsample_factor=16): super(DeepLab, self).__init__() if backbone=="xception": # 获得两个特征层:浅层特征 主干部分 self.backbone = xception(downsample_factor=downsample_factor, pretrained=pretrained) in_channels = 2048 low_level_channels = 256 elif backbone=="mobilenet": # 获得两个特征层:浅层特征 主干部分 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特征提取模块 # 利用不同膨胀率的膨胀卷积进行特征提取 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) # 获得两个特征层,low_level_features: 浅层特征-进行卷积处理 # x : 主干部分-利用ASPP结构进行加强特征提取 low_level_features, x = self.backbone(x) x = self.aspp(x) low_level_features = self.shortcut_conv(low_level_features) # 将加强特征边上采样,与浅层特征堆叠后利用卷积进行特征提取 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博客

本文链接地址:https://www.jiuchutong.com/zhishi/290684.html 转载请保留说明!

上一篇:解决RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation.(解决脱发的8个方法)

下一篇:在妈妈身旁玩耍的北极熊宝宝们,加拿大曼尼托巴省 (© Andre Gilden/Minden Pictures)(在妈妈身边的说说)

  • h5网页设计源代码案例分析,即实力证明。当你想展现自己的优势时,一定要有场景作为支撑

    h5网页设计源代码案例分析,即实力证明。当你想展现自己的优势时,一定要有场景作为支撑

  • UGC合集:深解UGC平台的搭建门路(ugcz)

    UGC合集:深解UGC平台的搭建门路(ugcz)

  • 华生洗衣机质量怎么样(华生洗衣机)(华生洗衣机是哪里生产的)

    华生洗衣机质量怎么样(华生洗衣机)(华生洗衣机是哪里生产的)

  • qq拒绝添加好友对方能看到吗(qq拒绝添加好友后还能收到申请吗)

    qq拒绝添加好友对方能看到吗(qq拒绝添加好友后还能收到申请吗)

  • iphone se2防水等级是多少(iphone se2防水 防尘吗)

    iphone se2防水等级是多少(iphone se2防水 防尘吗)

  • 微信信息拒收是什么原因(微信信息拒收是拉黑吗)

    微信信息拒收是什么原因(微信信息拒收是拉黑吗)

  • 快手作品不适宜公开是怎么回事(快手作品不适宜公开有没有办法可以解决)

    快手作品不适宜公开是怎么回事(快手作品不适宜公开有没有办法可以解决)

  • 苹果转接头不支持语音(苹果转接头不支持配件怎么解决)

    苹果转接头不支持语音(苹果转接头不支持配件怎么解决)

  • 黑鲨3支持无线充电吗(黑鲨支持无线充吗)

    黑鲨3支持无线充电吗(黑鲨支持无线充吗)

  • Zoom共享视频有声音吗(zoom共享视频为什么听不到视频声音)

    Zoom共享视频有声音吗(zoom共享视频为什么听不到视频声音)

  • 为什么qq发图片很慢(为什么qq发图片给对方收不到)

    为什么qq发图片很慢(为什么qq发图片给对方收不到)

  • 微信出现风险提示怎么快速解决(微信出现风险提示)

    微信出现风险提示怎么快速解决(微信出现风险提示)

  • 抖音怎么上传超清视频(抖音怎么上传超长视频)

    抖音怎么上传超清视频(抖音怎么上传超长视频)

  • 剪映怎么上传本地音乐(剪映怎么上传本地贴纸)

    剪映怎么上传本地音乐(剪映怎么上传本地贴纸)

  • 宽带是什么(宽带是什么意思sm)

    宽带是什么(宽带是什么意思sm)

  • vivo手机都有防水吗(vivo有没有防窥探)

    vivo手机都有防水吗(vivo有没有防窥探)

  • 顺滑版手机是什么意思(手机屏幕怎么顺滑)

    顺滑版手机是什么意思(手机屏幕怎么顺滑)

  • ip网址由什么组成(ip地址由 组成)

    ip网址由什么组成(ip地址由 组成)

  • wifi直连有什么用(wifi直连什么意思)

    wifi直连有什么用(wifi直连什么意思)

  • 小米8耳机没声音(小米8耳机没声音怎么办)

    小米8耳机没声音(小米8耳机没声音怎么办)

  • 华为3d建模怎么打开(华为3D建模怎么用)

    华为3d建模怎么打开(华为3D建模怎么用)

  • vivoⅹ型y型z型区别(y型什么意思)

    vivoⅹ型y型z型区别(y型什么意思)

  • ipad可以装windows系统吗(ipad可以装windows虚拟机)

    ipad可以装windows系统吗(ipad可以装windows虚拟机)

  • 怎么把音频文件转为高音质清晰版的(怎么把音频文件放到录音里)

    怎么把音频文件转为高音质清晰版的(怎么把音频文件放到录音里)

  • Linux如何删除替换变量值?Linux删除替换变量值的方法(linux如何删除lv)

    Linux如何删除替换变量值?Linux删除替换变量值的方法(linux如何删除lv)

  • 外贸企业税务处理方式
  • 购销合同中约定产品质量问题引起的问题
  • 出口免税产品如何缴纳附加税
  • 劳务派遣的开票规范
  • 三方协议缴款账户状态错
  • 金税盘地区编号淄博
  • 贴现率和折现率相等吗
  • 代收款是什么套路
  • 开票金额比实际金额多
  • 房产契税发票丢了可以补开吗
  • 机器设备预付的费用计入
  • 补发以前年度工资如何计税
  • 承兑汇票私人贴现账务怎么处理
  • 事业单位的出纳要承担的责任是什么
  • 非独立核算的分公司注销流程
  • 小规模季度不超过45万的税收优惠
  • 意外保险计入职工薪酬
  • 简易计税借方余额
  • 实行初税亩
  • 未抵扣增值税入什么科目
  • 2021年季度所得税申报表填报说明
  • 升级打装备的手游
  • 现金付款没收据怎么入账
  • win10系统通知中心在哪
  • 餐饮业会计做账技巧
  • 处理废料会计分录大全
  • 事业单位基建账并入大账规定
  • 方正电脑u盘启动按什么键
  • php 文件操作
  • 以旧换新的概念
  • ghost打开
  • macOSCatalina10.15.5Beta4值得升级吗 macOSCatalina10.15.5Beta4更新了什么
  • php做
  • 最薄的索尼微单
  • 持有至到期投资减值准备
  • 工会经费两种拨缴方式
  • 集团公司管理费提取办法
  • layui 日期控件赋值
  • 车辆购置税的纳税义务发生时间为
  • php echo语句
  • 小企业会计制度最新版
  • 资本公积属于谁
  • 高速发票看不见金额怎么办
  • 印花税应税凭证数量是什么意思
  • 公司之间借款利息需要开票吗
  • 2019年新会计制度改革
  • 收到银行的贷款怎么入账
  • 员工的工资属于什么资产
  • phpcms模板制作教程
  • 基本运算符号有乘方吗
  • java默认访问权限修饰符
  • 发票可以开未来日期吗
  • 社保可以补交吗
  • 房屋租赁交的定金可以退吗
  • 跨年费用入账
  • 信用减值借贷方向增减
  • 未使用固定资产有哪些
  • 坏账计入管理费用,摘要怎么写
  • 收到多收的款会计处理
  • 陪标收费标准
  • 出现亏损
  • 补价占整个交易金额的比例
  • 企业建账的流程是什么
  • mysql最多多少行
  • xwizard.exe是什么
  • win8.1原版系统安装教程
  • centosfind命令
  • mac nums
  • 国际安卓应用市场
  • linux编译链接命令
  • 批处理文件修改注册表键值
  • JavaScript 中的事件教程
  • javascript面向对象编程指南 pdf
  • python读写segy数据
  • 四川省国税局
  • 日本消费税是什么
  • 重庆国税电子税务局
  • 任何基金都可以转让吗
  • 股权转让所得怎么计算个税
  • 机动车发票怎样开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设