GCN模块的实现比较简单,在giuhub上看到两种实现,轻微不同

实现一:https://github.com/ycszen/pytorch-segmentation/blob/master/gcn.py

class GCN(nn.Module):
def __init__(self, inplanes, planes, ks=7):
super(GCN, self).__init__()
self.conv_l1 = nn.Conv2d(inplanes, planes, kernel_size=(ks, 1),
padding=(ks/2, 0)) self.conv_l2 = nn.Conv2d(planes, planes, kernel_size=(1, ks),
padding=(0, ks/2))
self.conv_r1 = nn.Conv2d(inplanes, planes, kernel_size=(1, ks),
padding=(0, ks/2))
self.conv_r2 = nn.Conv2d(planes, planes, kernel_size=(ks, 1),
padding=(ks/2, 0)) def forward(self, x):
x_l = self.conv_l1(x)
x_l = self.conv_l2(x_l) x_r = self.conv_r1(x)
x_r = self.conv_r2(x_r) x = x_l + x_r return x

实现二:https://github.com/ogvalt/large_kernel_matters/blob/master/scripts/model.py

class GCN(nn.Module):
def __init__(self, inchannels, channels=21, k=3):
super(GCN, self).__init__() self.conv_l1 = Conv2D(in_channels=inchannels, out_channels=channels, kernel_size=(k, 1), padding='same')
self.conv_l2 = Conv2D(in_channels=channels, out_channels=channels, kernel_size=(1, k), padding='same') self.conv_r1 = Conv2D(in_channels=inchannels, out_channels=channels, kernel_size=(1, k), padding='same')
self.conv_r2 = Conv2D(in_channels=channels, out_channels=channels, kernel_size=(k, 1), padding='same') def forward(self, x):
x1 = self.conv_l1(x)
x1 = self.conv_l2(x1) x2 = self.conv_r1(x)
x2 = self.conv_r2(x2) out = x1 + x2 return out

两种实现不同之处在padding的方式,一种是设定值,一种是自动的。不过我发现pytorch0.4.0是不支持对padding关键字参数传入字符串的,另外,我自己写了一个3D版的,不知道对否。

class GCN(nn.Module):
def __init__(self, inplanes, planes, ks=7):
super(GCN, self).__init__()
self.conv_l1 = nn.Conv3d(inplanes, planes, kernel_size=(ks, 1, 1),
padding=(ks/2, 0, 0))
self.conv_l2 = nn.Conv3d(planes, planes, kernel_size=(1, ks, 1),
padding=(0, ks/2, 0))
self.conv_l3 = nn.Conv3d(planes, planes, kernel_size=(1, 1, ks),
padding=(0, 0, ks/2)) self.conv_c1 = nn.Conv3d(inplanes, planes, kernel_size=(1, ks, 1),
padding=(0, ks/2, 0))
self.conv_c2 = nn.Conv3d(planes, planes, kernel_size=(1, 1, ks),
padding=(0, 0, ks/2))
self.conv_c3 = nn.Conv3d(planes, planes, kernel_size=(ks, 1, 1),
padding=(ks/2, 0, 0)) self.conv_r1 = nn.Conv3d(inplanes, planes, kernel_size=(1, 1, ks),
padding=(0, 0, ks/2))
self.conv_r2 = nn.Conv3d(planes, planes, kernel_size=(ks, 1, 1),
padding=(ks/2, 0, 0))
self.conv_r3 = nn.Conv3d(planes, planes, kernel_size=(1, ks, 1),
padding=(0, ks/2, 0)) def forward(self, x):
x_l = self.conv_l1(x)
x_l = self.conv_l2(x_l)
x_l = self.conv_l3(x_l) x_c = self.conv_c1(x)
x_c = self.conv_c2(x_c)
x_c = self.conv_c3(x_c) x_r = self.conv_r1(x)
x_r = self.conv_r2(x_r)
x_r = self.conv_r3(x_r)
x = x_l + x_r + x_c return x

  

【语义分割】large kernel matters中GCN模块的pytorch实现的更多相关文章

  1. Large Kernel Matters —— Improve Semantic Segmentation by Global Convolutional Network(GCN全局卷积网络)

    作者认为语义分割的两个挑战是分类和定位,而这两个挑战又是比较对立的.对于分类问题,模型需要有变形和旋转不变形,而对于定位问题,模型有需要对变形敏感. 提出的GCN遵循两个主要原则: 1.对定位问题,模 ...

  2. 【语义分割】PSPNet中PSP模块的pytorch实现

    github地址:https://github.com/Lextal/pspnet-pytorch/blob/master/pspnet.py PSP模块示意图如下 代码如下 class PSPMod ...

  3. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  4. 利用NVIDIA-NGC中的MATLAB容器加速语义分割

    利用NVIDIA-NGC中的MATLAB容器加速语义分割 Speeding Up Semantic Segmentation Using MATLAB Container from NVIDIA NG ...

  5. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  6. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  7. 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...

  8. 语义分割Semantic Segmentation研究综述

    语义分割和实例分割概念 语义分割:对图像中的每个像素都划分出对应的类别,实现像素级别的分类. 实例分割:目标是进行像素级别的分类,而且在具体类别的基础上区别不同的实例. 语义分割(Semantic S ...

  9. TensorFlow中的语义分割套件

    TensorFlow中的语义分割套件 描述 该存储库用作语义细分套件.目标是轻松实现,训练和测试新的语义细分模型!完成以下内容: 训练和测试方式 资料扩充 几种最先进的模型.轻松随插即用 能够使用任何 ...

随机推荐

  1. IP地址分类和子网划分

    IP地址: 地址范围                                  网络地址规律 子网掩码             私有地址       保留地址 A类地址:从1.0.0.0 到1 ...

  2. 基于Nginx实现集群原理

    1)安装Nginx 2)配置多个Tomcat,并修改端口号(两个端口号不一样即可) 3)在Nginx的Nginx.conf添加如下配置:

  3. 面试题:缓存Redis与Memcached的比较 有用

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.    Memca ...

  4. 数据库 MySQL 之 表操作、存储引擎

    数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名(     字段名1 ...

  5. zigbee--绑定

    1.绑定是zigbee一种基本通信方式:具体绑定通信又分为3种模式,在这里只拿一种源绑定来说明. 源绑定: 发送模块 :必须要知道接收模块(被绑定模块)的网络地址或者MAC地址 接收方的接收端点 接收 ...

  6. eclipse——Maven创建JavaWeb工程

    打包方式改为war 问题:webapp目录下缺少web.xml文件 先勾选掉Dynamic Web Services 点击Applay 再勾选上Dynamic Web Services ,目的是为了产 ...

  7. h5存储的优点

    1.解决4k大小问题2.解决请求头常带存储信息的问题3.解决关系型存储问题4.可以跨浏览器

  8. 关于"人工智能Python""系统环境变量设置步骤

    最近无论是JAVA的环境变量配置,还是Python环境变量配置都有学生问我,我在这里写一下回答,当然我以配置Python的环境变脸来举例.首先需要确定本机电脑上安装上了Python 首先解释一下为什么 ...

  9. UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)

    题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...

  10. ORCHARD学习教程-介绍

    ORCHARD 是什么? Orchard 是由微软公司创建,基于 ASP.NET MVC 技术的免费开源内容管理系统: 可用于建设博客.新闻门户.企业门户.行业网站门户等各种网站 简单易用的后台界面 ...