【语义分割】large kernel matters中GCN模块的pytorch实现
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实现的更多相关文章
- Large Kernel Matters —— Improve Semantic Segmentation by Global Convolutional Network(GCN全局卷积网络)
作者认为语义分割的两个挑战是分类和定位,而这两个挑战又是比较对立的.对于分类问题,模型需要有变形和旋转不变形,而对于定位问题,模型有需要对变形敏感. 提出的GCN遵循两个主要原则: 1.对定位问题,模 ...
- 【语义分割】PSPNet中PSP模块的pytorch实现
github地址:https://github.com/Lextal/pspnet-pytorch/blob/master/pspnet.py PSP模块示意图如下 代码如下 class PSPMod ...
- 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.
from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...
- 利用NVIDIA-NGC中的MATLAB容器加速语义分割
利用NVIDIA-NGC中的MATLAB容器加速语义分割 Speeding Up Semantic Segmentation Using MATLAB Container from NVIDIA NG ...
- 笔记:基于DCNN的图像语义分割综述
写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...
- CVPR2020:4D点云语义分割网络(SpSequenceNet)
CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...
- 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割
前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...
- 语义分割Semantic Segmentation研究综述
语义分割和实例分割概念 语义分割:对图像中的每个像素都划分出对应的类别,实现像素级别的分类. 实例分割:目标是进行像素级别的分类,而且在具体类别的基础上区别不同的实例. 语义分割(Semantic S ...
- TensorFlow中的语义分割套件
TensorFlow中的语义分割套件 描述 该存储库用作语义细分套件.目标是轻松实现,训练和测试新的语义细分模型!完成以下内容: 训练和测试方式 资料扩充 几种最先进的模型.轻松随插即用 能够使用任何 ...
随机推荐
- java Web中页面跳转方式之重定向和请求转发的区别
请求转发: request.getRequestDispatcher().forward(); 重定向: response.sendRedirect(); 例如: 请求转发: request.getR ...
- ISAP网络流算法
ISAP全称Improved Shortest Augmenting Path,意指在SAP算法进行优化.SAP即Edmonds-Karp算法,其具体思路是通过不断向残存网络推送流量来计算整个网络的最 ...
- 轻量级的同步机制——volatile语义详解(可见性保证+禁止指令重排)
目录 1.关于volatile 2.语义一:内存可见性 2.1 一个例子 2.2 java的内存模型(JMM) 2.3 happens-before规则 2.4 volatile解决内存可见性问题的原 ...
- laravel使用ORM操作数据库
laravel使用ORM操作数据库 public function mode(){ //查询所有 $isok=Student::get(); 新增. (1) $isok=Student::create ...
- 【总结整理】AXURE原件
iphone:750*1334 一般用分辨率的一半 移动的时候,按住shift拖动,可水平移动 框选的时候,箭头选择包含模式,只要不全部包含进来,就不会被选中 ctrl+'=显示背景网格 ctrl+s ...
- resolve或reject之后还需要return吗
答案: 需要 今日碰到一个问题, 是我的同事发现的,如果不说的话可能一直没有注意到 这个代码 在reject 后还会执行, 但是谁也没有注意到, 但是不会报错, 因为当一个promise是resolv ...
- wdcp挂载数据盘为WWW以及之后出现的各种问题解决方法
昨天晚上突然有客户反映服务器访问不了,经检查后是因为磁盘满了! 购买阿里云的ECS选择linux系统的时候会赠送20G的系统盘,通常来讲自己用的话基本够了,但是我们作为网络公司,安装了一个WDCP后给 ...
- PC端QT源码编译
转载:http://blog.sina.com.cn/s/blog_c2b97b1d01016x1i.html 1.下载源码(前面已经提到了) 选择合适自己的源码. 先用"uname -a& ...
- 529A And Yet Another Bracket Sequence
传送门 题目大意 给定有一个长度为n n的括号序列,现在有两种操作: 在任意一个位置插入有一个左括号或右括号 将末尾的一个括号放到最前面 可以对这个序列进行若干次操作,问在使括号序列合法的前提下,长度 ...
- LightOJ 1027 A Dangerous Maze (数学期望)
题意:你面前有 n 个门,每次你可以选择任意一个进去,如果xi是正数,你将在xi后出去,如果xi是负数,那么xi后你将回来并且丢失所有记忆,问你出去的期望. 析:两种情况,第一种是直接出去,期望就是 ...