1.全局卷积网络模块

全局卷积网络模块(Global Convolutional Network, GCN)是由清华大学旷视科技提出应用于语义分割任务改善模型性能的模块,其核心是利用非对称卷积获得大感受野来解决语义分割任务中像素的分类和定位问题,以达到更好的分割效果。相较于普通卷积,非对称卷积能够在少参数量的情况下达到大卷积核的特征映射效果。以一个3×3的普通卷积为例,其卷积的特征映射等于3×1和1×3两个非对称卷积的卷积结果。GCN模块由1×k+k×1和k×1+1×k两组非对称卷积构成,并通过稠密连接特征映射出大小为k×k的特征图,最后相加融合输出预测图像,其中k为卷积核大小,n为预测类别数(包含背景)。

    self.branch1_0 = nn.Sequential(nn.Conv2d(24, 4, (15, 1), 1, (7, 0)), nn.Conv2d(4, 4, (1, 15), 1, (0, 7))) self.branch1_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 15), 1, (0, 7)), nn.Conv2d(4, 4, (15, 1), 1, (7, 0)))
def forward(self, x):branch1_0 = self.branch1_0(x)branch1_1 = self.branch1_1(x)branch1 = branch1_0 + branch1_1

2.边界细化模块

边界细化模块(Boundary Refinement,BR)是在全局卷积网络中提出的边界优化模块,其结构设计类似于残差结构,通过短接对预测结果进行进一步修正,从而提高目标对象的定位,达到优化边界的作用,BR模块由两个3×3卷积通过映射短接构成,将残差结构结果与原特征进行相加融合后,再输出边界增强后的预测结果。

self.br = nn.Sequential(nn.Conv2d(4, 4, 3, 1, 1),nn.ReLU(),nn.Conv2d(4, 4, 3, 1, 1))

3.解码器设计one

    def forward(self, x):H, W = x.size(2), x.size(3)the_two_features, low_level_features, the_three_features, the_four_features, x = self.backbone(x)x = self.aspp(x) #32*32*256x0 = F.interpolate(x, size=(low_level_features.size(2), low_level_features.size(3)),mode='bilinear', align_corners=True)  #32*32*256-128*128*256x1 = torch.cat((x0, low_level_features), dim=1)  #128*128*280x2 = self.conv3(x1) #128*128*4# -----------------------------------------## 输入128*128*24,输出128*128*4branch1_0 = self.branch1_0(low_level_features)branch1_1 = self.branch1_1(low_level_features)branch1 = branch1_0 + branch1_1branch = self.br(branch1)result1 = branch + branch1 #128*128*4# -----------------------------------------#x3 = x2 + result1 #128*128*4x4 = self.br(x3) #128*128*4x5 = F.interpolate(x4, size=(the_two_features.size(2), the_two_features.size(3)),mode='bilinear', align_corners=True)  #128*128*4-256*256*4# -----------------------------------------## 输入256*256*16,输出256*256*4branch2_0 = self.branch2_0(the_two_features)branch2_1 = self.branch2_1(the_two_features)branch2 = branch2_0 + branch2_1branchh = self.br(branch2)result2 = branchh + branch2  #256*256*4# -----------------------------------------#x6 = x5 + result2  #256*256*4x7 = self.br(x6)  #256*256*4x8 = F.interpolate(x7, size=(H, W), mode='bilinear', align_corners=True)return x8

3.解码器设计two

self.branch1_0 = nn.Sequential(nn.Conv2d(24, 4, (3, 1), 1, (1, 0)), nn.Conv2d(4, 4, (1, 3), 1, (0, 1))) self.branch1_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 3), 1, (0, 1)), nn.Conv2d(4, 4, (3, 1), 1, (1, 0))) self.branch2_0 = nn.Sequential(nn.Conv2d(24, 4, (7, 1), 1, (3, 0)),  nn.Conv2d(4, 4, (1, 7), 1, (0, 3))) self.branch2_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 7), 1, (0, 3)),nn.Conv2d(4, 4, (7, 1), 1, (3, 0)))  self.branch3_0 = nn.Sequential(nn.Conv2d(24, 4, (11, 1), 1, (5, 0)),nn.Conv2d(4, 4, (1, 11), 1, (0, 5))) self.branch3_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 11), 1, (0, 5)), nn.Conv2d(4, 4, (11, 1), 1, (5, 0))) self.branch4_0 = nn.Sequential(nn.Conv2d(24, 4, (15, 1), 1, (7, 0)), nn.Conv2d(4, 4, (1, 15), 1, (0, 7))) self.branch4_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 15), 1, (0, 7)), nn.Conv2d(4, 4, (15, 1), 1, (7, 0))) self.br = nn.Sequential(nn.Conv2d(4, 4, 3, 1, 1),nn.ReLU(),nn.Conv2d(4, 4, 3, 1, 1))

        self.cat_conv = nn.Sequential(nn.Conv2d(296, 128, 3, stride=1, padding=1),nn.BatchNorm2d(128),nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Conv2d(128, 4, 3, stride=1, padding=1),nn.BatchNorm2d(4),nn.ReLU(inplace=True),nn.Dropout(0.1),)self.branch1_0 = nn.Sequential(nn.Conv2d(24, 4, (3, 1), 1, (1, 0)), nn.Conv2d(4, 4, (1, 3), 1, (0, 1))) self.branch1_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 3), 1, (0, 1)), nn.Conv2d(4, 4, (3, 1), 1, (1, 0))) self.branch2_0 = nn.Sequential(nn.Conv2d(24, 4, (7, 1), 1, (3, 0)),  nn.Conv2d(4, 4, (1, 7), 1, (0, 3)))  self.branch2_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 7), 1, (0, 3)),  nn.Conv2d(4, 4, (7, 1), 1, (3, 0)))  self.branch3_0 = nn.Sequential(nn.Conv2d(24, 4, (11, 1), 1, (5, 0)),  nn.Conv2d(4, 4, (1, 11), 1, (0, 5)))  self.branch3_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 11), 1, (0, 5)),  nn.Conv2d(4, 4, (11, 1), 1, (5, 0)))  self.branch4_0 = nn.Sequential(nn.Conv2d(24, 4, (15, 1), 1, (7, 0)),  nn.Conv2d(4, 4, (1, 15), 1, (0, 7)))  self.branch4_1 = nn.Sequential(nn.Conv2d(24, 4, (1, 15), 1, (0, 7)), nn.Conv2d(4, 4, (15, 1), 1, (7, 0)))  self.br = nn.Sequential(nn.Conv2d(4, 4, 3, 1, 1),nn.ReLU(),nn.Conv2d(4, 4, 3, 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) #32*32*256x0 = F.interpolate(x, size=(low_level_features.size(2), low_level_features.size(3)),mode='bilinear', align_corners=True)  #32*32*256-128*128*256# -----------------------------------------## 输入128*128*24,输出128*128*4branch1_0 = self.branch1_0(low_level_features)branch1_1 = self.branch1_1(low_level_features)branch1 = branch1_0 + branch1_1br1 = self.br(branch1)result1 = br1 + branch1  # 128*128*4# -----------------------------------------## 输入128*128*24,输出128*128*4branch2_0 = self.branch2_0(low_level_features)branch2_1 = self.branch2_1(low_level_features)branch2 = branch2_0 + branch2_1br2 = self.br(branch2)result2 = br2 + branch2  # 128*128*4# -----------------------------------------## 输入128*128*24,输出128*128*4branch3_0 = self.branch3_0(low_level_features)branch3_1 = self.branch3_1(low_level_features)branch3 = branch3_0 + branch3_1br3= self.br(branch3)result3 = br3 + branch3  # 128*128*4# -----------------------------------------## 输入128*128*24,输出128*128*4branch4_0 = self.branch4_0(low_level_features)branch4_1 = self.branch4_1(low_level_features)branch4 = branch4_0 + branch4_1br4 = self.br(branch4)result4 = br4 + branch4  # 128*128*4# -----------------------------------------#x1 = torch.cat((result1, result2, result3, result4), dim=1)  # 128*128*16x2 = torch.cat((x1, low_level_features, x0), dim=1)  # 128*128*296x3 = self.cat_conv(x2) # 128*128*296-128*128*4x4 = F.interpolate(x3, size=(H, W), mode='bilinear', align_corners=True) # 128*128*4-512*512*4return x4

DeeplabV3+解码器复现(二)相关推荐

  1. DeeplabV3+解码器复现

    1.全局通道注意力 全局通道注意力结构可以使神经网络在训练过程中建模特征图各个通道的重要性,自动判断哪些通道上的信息为有用信息,哪些通道上的信息为噪声信息.全局通道注意力结构以SENet的通道注意力结 ...

  2. DIY个人智能家庭网关——硬件篇之433M无线接收解码器(二)

    为了降低DIY难度,我提供了方案二:采用现成的模块来搭建解码器,需要如下模块 1.STM8S103F单片机模块和编程器 2.433M无线接收模块 3.PL2303 USB转串口模块 或带线的 另外还需 ...

  3. FFplay文档解读-5-编解码器选项二

    设置sub pel me比较功能. 可能的取值如下: 值 解释 sad 绝对差值之和,fast(默认) sse 平方误差之和 satd 绝对Hadamard的总和改变了差异 dct 绝对DCT转换差异 ...

  4. 语义分割之Deeplabv3源码解读

    写在前面,本文的代码是基于Pytorch框架resnet101基础网络的DeepLabv3网络复现 先贴一张代码效果图: 预备知识 本文提到的output_stride来源于deeplabv3论文,指 ...

  5. java struts2 漏洞复现合集

    目录 一.S2-001复现 二.S2-005复现 三.S2-007复现 四.S2-008复现 五.S2-009复现 六.S2-012复现 七.S2-013复现 八.S2-015复现 九.S2-016复 ...

  6. 【转载】裸眼识别二维码

    一个开关的开合状态可以对应"0.1"两个信号,莱布尼茨三百多年前留下的这个制式影响深远.日常语言依赖于思维逻辑,与之类似,数字语言的流通则依赖于数学逻辑,但本质上仍然只是无数个与非 ...

  7. 帝国cms7.5漏洞复现

    EmpireCMS v7.5后台任意代码执行分析 目录 一.漏洞简介 二.漏洞复现 三.原理分析 一.漏洞简介 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修 ...

  8. 编码器-解码器入门级理解

    编码器-解码器 编码器-解码器使用场景 一.PCA 二.自编码器(AE) 1.欠完备自编码器 2.过完备自编码器 3.正则化自编码器 ①.去噪自编码器 ②.稀疏自编码器 三.变分自编码器(VAE) 编 ...

  9. 【Pytorch项目实战】之生成式网络:编码器-解码器、自编码器AE、变分自编码器VAE、生成式对抗网络GAN

    文章目录 博主精品专栏导航 生成式网络 - 生成合成图像 算法一:编码器-解码器 算法二:自编码器(Auto-Encoder,AE) 算法三:变分自编码器(Variational Auto Encod ...

最新文章

  1. iOS逆向(4)-代码注入,非越狱窃取微信密码
  2. 大工18秋《c c 语言程序设计》,大工18秋《毕业论文(设计)写作指导》在线测试1.txt...
  3. wpf 修改label值_WPF 获取动态添加控件的值
  4. hdu 1800 Flying to the Mars
  5. upload-labs_pass10_点空点绕过_pass11_双写文件扩展名
  6. qtreewidget点击空白处时取消以选项_VUE+elementUI 点击页面空白处弹窗不隐藏
  7. python处理脑电信号_用ICA去除脑电信号中的眼球链接
  8. 机器学习 | 目录(持续更新)
  9. Android SDK 快速安装方法
  10. JDBC学习(九、连接池技术)
  11. Swift 5 Dictionary用法大全
  12. python编程从入门到实践
  13. c语言mac图形化界面编写,「分享」C语言如何编写图形界面
  14. windows server 2008 r2 设置显示文件后缀名
  15. 一键steam挂卡linux,steam游戏挂卡工具(ArchiSteamFarm)
  16. Zend_Cache
  17. java.lang.IllegalStateException: Fragment already added
  18. 无人机大面积航测面临的难点及解决方法
  19. SMART 监控项研究以及存储健康分级机制
  20. 基于西门子S7-1200PLC的步进电机控制

热门文章

  1. 【数字信号处理】带通采样定理原理及其MATLAB仿真说明
  2. 对话塔塔咨询中国区总裁Suneet Puri:“企业的奋斗目标是创造美好社会”
  3. 博士面试英文自我介绍模板
  4. 我们是怎样打开百度的
  5. 虎峪自然风景--最美的天然景区
  6. android模拟器本地浏览器代理,浏览器,Android模拟器或真机如何访问本地电脑的Tomcat...
  7. 密集假目标 Matlab,作战雷达发射假目标干扰信号优化匹配仿真
  8. Oracle EBS 洽谈报价的操作流程测试
  9. Vue初学日记Day2
  10. HTML(三) -- 表单设计