torch

项目笔记《DeepLung:Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification》...

邮差的信 提交于 2020-11-19 12:04:00
我只讲讲检测部分的模型,后面两样性分类的试验我没有做,这篇论文采用了很多肺结节检测论文都采用的u-net结构,准确地说是具有DPN结构的3D版本的u-net,直接上图。 DPN是颜水成老师团队的成果,简单讲就是dense 与 residual的结合,如上图,输入特征图一部分通过residual与输出相加,另一部分与residual的结果再串联,个人觉得这个网络好乱,不简洁的网络都不是好网络,恰好文章中还给出了只采用residual的版本,所以我其实要讲的是这个只有residual的u-net,上图。 可以看到,输入是96*96*96的立方体,里面包含标记的结节,经过24个3*3*3的卷积核,通道数变为24,然后经过4个stage,尺寸缩减为1/16,接下来是分辨率放大阶段,采用反卷积实现,连续两个阶段都是反卷积后与低层特征串联,然后经过两个卷积操作,通道数变为15,图示中以3*5显示,是为了更清楚地表明,最后输出的proposal中,每个位置有三个,分别采用三种尺寸,设置的三个anchor尺寸是[5,10,20],每个位置预测z,y,x,d,p分别是结节的三维坐标以及直径,置信度。 下面看一下源码,采用pytorch框架。 首先是residual block的设计,位于layers.py文件 class PostRes(nn.Module): def __init__ (self,

pytorch的模型解析

荒凉一梦 提交于 2020-11-17 03:41:59
如何获取pytorch的动态图? model = torch.jit.load("test.pth") graph = model.graph.copy() torch._C._jit_pass_inline(graph) node_list = graph.nodes() 加载模型后,获取模型的graph,这个graph就是需要的动态图。graph node就是计算图的计算节点(有序),关于各个层的相关参数都可以从node节点中获取,各个参数的相对位置需要查找一下该op的实现。 需要注意的是,需要使用 _jit_pass_inline来将graph的sub module展开。 如何获取pytorch的权重等参数? 对于非量化模型: 可以通过named_parameters或者state_dict获取。 对于量化模型: 在一次次的尝试和接口的设置中终于找到了!!! a = 0 for model_name, module in model.named_modules(): print(model_name) print(module) if a == 2: mod_c = module._c #print(mod_c.dump()) param = module.__getattr__('_packed_params') print(param) print(type(param)

pytorch数据读取

邮差的信 提交于 2020-11-13 02:26:24
pytorch数据读取机制: sampler生成索引index,根据索引从DataSet中获取图片和标签 1.torch.utils.data.DataLoader 功能:构建可迭代的数据装在器 dataset:Dataset类,决定数据从哪读取及如何读取 batchsize:批大小 num_works:是否多进程读取数据,当条件允许时,多进程读取数据会加快数据读取速度。 shuffle:每个epoch是否乱序 drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据 DataLoader(dataset, batchsize=1, shuffle=False, batch_sampler=None, num_workers=0, collate_fn=None, pin_memeory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None) epoch:所有训练样本都已输入到模型中,称为一个epoch iteration:一批样本输入到模型中,称为一个iteration batchsize:批大小,决定一个epoch有多少个iteration 例如: 样本总数:80, batchsize:8 1epoch = 10 iteraion 样本总数

Win10+libtorch1.1+opencv 笔记

不打扰是莪最后的温柔 提交于 2020-11-12 09:50:27
这几天刚刚把libtorch加载模型弄明白,记录一下。 1、正确安装VS2017+opencv+cmake +pytorch 1.1 2、官网下载libtorch cpu 1.1版本(注意pytorch与libtorch版本一致) 3、pytorch 导出模型 import torch from torchvision import models model = models.resnet18() #导入已经训练好的模型 #state = torch.load('latest.pt') #model.load_state_dict(state['model_state_dict'], strict=True) #注意模型输入的尺寸 example = torch.rand(1, 3, 224, 224) model = model.eval() traced_script_module = torch.jit.trace(model, example) output = traced_script_module(torch.ones(1,3,224,224)) traced_script_module.save("model.pt") 4、cmake 编写 cmake_minimum_required(VERSION 3.14 FATAL_ERROR) project(custom

pytorch学习-WHAT IS PYTORCH

烈酒焚心 提交于 2020-11-11 09:40:34
参考:https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py WHAT IS PYTORCH 这是一个基于python的实现两种功能的科学计算包: 用于替换NumPy去使用GPUs的算力 一个提供了最大化灵活度和速度的深度学习搜索平台 Getting Started Tensors Tensors与NumPy的ndarrays相似,不同在于Tensors能够使用在GPU上去加速计算能力 from __future__ import print_function import torch 构造一个5*3的矩阵,不初始化 x = torch.empty( 5 , 3 ) print(x) 输出: (deeplearning) userdeMBP:pytorch user$ python test.py tensor([[ 0.0000e+00 , - 2.5244e-29 , 0.0000e+00 ], [ - 2.5244e-29 , 1.9618e-44 , 9.2196e-41 ], [ 0.0000e+00 , 7.7050e+31 , 0.0000e+00 ], [ 0.0000e+00 , 0.0000e+00 ,

文章综述——SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

隐身守侯 提交于 2020-11-08 04:23:13
一、代码 1.代码下载: https://github.com/tkipf/pygcn 代码运行方式: 1)cmd安装:python setup.py install(作用是作者Thomas Kipf已经将写好图卷积网络gcn做成了安装包,安装在python目录下的lib) 2)cmd运行:python train.py 注 PyTorch 0.4 or 0.5 Python 2.7 or 3.6 代码运行结果: 2.代码详解 1)train.py 固定参数设置:epoch,学习率,dropout,隐藏层数,权重衰减(weight decay),随机数 Random seed L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化 model——GCN:特征数,隐藏层数,分类数=标签数+1,dropout数 optimizer(优化)——Adam一般来说是收敛最快的优化器,所以被用的更为频繁 model.train()与model.eval()的用法 接触pytorch时套用别人的框架,会在训练开始之前写上model.trian(),在测试时写上model.eval()。 在经过一番查阅之后,总结如下: 如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train()

pytorch加载模型torch.load报cuda out of memory解决方案

别来无恙 提交于 2020-11-06 23:54:45
当服务器中有多张显卡时可能会出现这个问题。 模型参数加载: model_recover = torch . load ( args . model_recover_path ) 报错如下: RuntimeError : CUDA error : out of memory 原因: 当使用torch.load加载模型参数时,会默认加载在第一块GPU0上,当GPU0没有在使用时,问题不大,但是显存被占满时这时候就加载不了了。 解决方法: model_recover = torch . load ( args . model_recover_path , map_location = { 'cuda:0' : 'cuda:2' } ) 指定GPU映射,将GPU0映射到GPU2(任意一张空闲显卡),这样原本默认加载在GPU0上的参数将会加载到GPU2中,问题解决。 参考: torch代码运行时显存溢出问题之问题四 来源: oschina 链接: https://my.oschina.net/u/4255339/blog/4706560

PyTorch_ConvLSTM代码(参数)解读笔记

二次信任 提交于 2020-11-04 17:26:56
原代码链接: ConvLSTM_pytorch 参考资料: LSTM的参数解释 Pytorch-LSTM输入输出参数 ConvLSTM参数详解(Keras) 1.导入pytorch import torch import torch . nn as nn 2.构建ConvLSTMCell class ConvLSTMCell ( nn . Module ) : #这里面全都是数,衡量后面输入数据的维度/通道尺寸 def __init__ ( self , input_dim , hidden_dim , kernel_size , bias ) : super ( ConvLSTMCell , self ) . __init__ ( ) self . input_dim = input_dim self . hidden_dim = hidden_dim #卷积核为一个数组 self . kernel_size = kernel_size #填充为高和宽分别填充的尺寸 self . padding_size = kernel_size [ 0 ] // 2 , kernel_size [ 1 ] // 2 self . bias = bias self . conv = nn . Conv2d ( self . input_dim + self . hidden_dim , 4 *