读《Linking Convolutional Neural Networks with Graph Convolutional Networks: Application in Pulmonary》
2019
摘要
通过CNN+GCN分离动脉静脉
——————————————————————————
imgDirPath = './data/Orient/DemoRightUpper05CTPA'
case_list_train = ['/right/']# Weight path or "none"
weightFile = "none"
# Loss visualization
# ON or OFF
tensorboard = False
tensorboard_logsDir = "backup"# model save path
backupDir = "backup"
logFile = "backup/log.txt"max_epochs = 6000*12
save_interval = 100*12
gpus = [0]
# multithreading
num_workers = 2
batch_size = 1 # batch_size was always set to 1 in original keras implementation# Solver params
# adam or sgd
solver = "adam"
steps = [10000]
scales = [0.1]
learning_rate = 3e-4
momentum = 0.9
decay = 5e-4
betas = (0.9, 0.98)# Net params
in_channels = 1
patch_sz = (32, 32, 5)
model_name = 'AV_CNN_GCN'
# GCN setting
num_nodes = 128 # 在原版keras代码中叫做batch_size
Num_classes = 2
Num_neighbors = 2
dp = 0.5
train_loader = DataLoader(listDataset(config.imgDirPath, config.case_list_train, Num_nodes=config.num_nodes, Num_neighbour=config.Num_neighbors),batch_size=config.batch_size, shuffle=True, drop_last=True)
构造训练数据集
这里的drop_last项是让所有取满batch_size的剩余数据丢弃不要(任性啊)
读取patch.npy得到(1649, 32, 32, 5)的patches
读取Label.npy得到(1649, 2)的labels
读取ind.npy得到1649的inds
读取graph.npy得到1649个节点对应邻居的邻接链表字典(也就是说图结构数据已经制好了,邻接关系,那CNN应该就只是提取节点特征了)
每轮提取数据
graph = self.traingraphes[index]
(但是self.traingraphes是只有一个元素的列表啊?)
然后调用graph这个自定数据类型(graphDataset)的next_node函数
start = self._index_in_epoch #=0初始化时定的,是起点的意思吧
如果考虑邻居→如果超参数节点数128不大于真实节点数1649:①起点更新,+128;②取终点128,起点终点内的patches作为images(128, 32, 32, 5),labels(128, 2),inds作为ind_node 128;
③遍历所有128个节点:
对于这每个节点k的每个邻居x,记录它们在节点列表self._inds中的索引xtup。如果当前这个索引列表不短于邻居数:打乱这个索引列表并取前两个做L_indx,再取这两个索引对应的节点放进N_image,最终有(128, 2, 32, 32, 5)NX_batch,与X_batch=images(128, 32, 32, 5),Y_batch=labels(128, 2)返回
取Y_batch纵向最大值的索引更新Y_batch 128
X_batch调整成[128, 1,5, 32, 32],节点数,通道数,深度,宽度,长度
NX_batch调整成[128, 2, 1,5, 32, 32],节点数,邻居数,通道数,深度,宽度,长度
输入:
X_batch[128, 1, 5, 32, 32]
Y_batch[128]
NX_batch[128, 2, 1, 5, 32, 32]
Av_CNN_GCN_model((Phi_fun): phi_fun(#先same_padding_3d(5,7,7)一下,有out[128, 1, 9, 38, 38](Conv_1): ConvLayer_BN((conv3d): Conv3d(1, 32, kernel_size=(5, 7, 7), stride=(1, 1, 1), bias=False)(bn): BatchNorm3d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(leakyrelu): LeakyReLU(negative_slope=0.1, inplace=True))#out[128, 32, 5, 32, 32]#same_padding_3d(5,7,7),有out[128, 32, 9, 38, 38](Conv_2): ConvLayer_BN((conv3d): Conv3d(32, 64, kernel_size=(5, 7, 7), stride=(1, 1, 1), bias=False)(bn): BatchNorm3d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(leakyrelu): LeakyReLU(negative_slope=0.1, inplace=True))#out[128, 64, 5, 32, 32](Mp_3): MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2), padding=0, dilation=1, ceil_mode=False)#out[128, 64, 2, 16, 16](Dp): Dropout3d(p=0.5, inplace=False)#same_padding_3d(2,5,5),有out[128, 64, 3, 20, 20](Conv_5): ConvLayer_BN((conv3d): Conv3d(64, 128, kernel_size=(2, 5, 5), stride=(1, 1, 1), bias=False)(bn): BatchNorm3d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(leakyrelu): LeakyReLU(negative_slope=0.1, inplace=True))#out[128, 128, 2, 16, 16](Dp): Dropout3d(p=0.5, inplace=False)#view out[128, 65536](Dp): Dropout3d(p=0.5, inplace=False)(Fc_7): Linear(in_features=65536, out_features=50, bias=True)(Fc_8): Linear(in_features=50, out_features=100, bias=True)(Fc_9): Linear(in_features=100, out_features=10, bias=True)#out[128, 10])#通过NX_batch遍历其两个邻居,分别再经历一遍Phi_fun#拼接成邻域信息NX[128, 2, 10]#然后释放NX的梯度计算?!?!?!?!?(gcn_layer): GCNlayer()dif = X - Nx#dif与参数w[10, 3]通过bdot计算mu_x[128, 2, 3]def bdot(a, b):B = a.shape[0]b = b[None,:,:]b = b.repeat(B,1,1)return torch.bmm(a, b)#mu_x sum聚合成[128, 3],再克隆成[128, 6, 3]#有参数mu[6,3],sigma[6,3]dif_mu = torch.sum(-0.5 * torch.mul(mu_x - self.mu, mu_x - self.mu)/ (1e-14 + torch.mul(self.sigma, self.sigma)), dim=-1)weight = torch.exp( dif_mu )weight = weight / (1e-14 + torch.sum(weight, axis=-1, keepdims = True))#有[128,1,6]的weight#再次sum并克隆NX,有[128,6,10]X_merge = torch.bmm(weight, Nx).squeeze() # with size [node_num*batchsz, feature_len]H = (X_merge + X) / (1 + torch.sum(weight, axis=-1))x_out = torch.mm(H, self.theta)#[128,2])
读《Linking Convolutional Neural Networks with Graph Convolutional Networks: Application in Pulmonary》相关推荐
- 读《Android 安全架构深究》
Android 安全架构深究 安全是一个非常立体而丰富得概念.在不同的场景下,安全有着不同的含义. 比如对于网络传输,安全指的是传输的数据不会被其他人看到.篡改.伪造及仿冒,传输的数据不会遭到破坏,数 ...
- 《最强Android书 架构大剖析》读书笔记
文章目录 第一章 Android 体系结构的变革之路 1.2 Android系统源码目录 与Linux的异同 Android的框架 原生二进制可执行文件 Android 的原生库 核心(core)库 ...
- Android Jetpack架构组件之 Room(使用、源码篇)
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...
- Android 图形架构之一 ——概述
前言 本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层.对分析app的卡顿,掉帧等 有很大帮助. 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个 ...
- Android display架构分析-SW架构分析(1-8)
参考: Android display架构分析二-SW架构分析 Android display架构分析三-Kernel Space Display架构介绍 Android display架构分析四-m ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统架构图及简单的系统架构介绍
2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...
最新文章
- 《机器学习Python实践》——数据导入(CSV)
- java有不过_不过而而
- C++ 的关键字(保留字)完整介绍
- mvc2中如何在下拉列表中显示含有子类的项(子类前加--)
- js:点击button后返回值
- hive 自定义元数据表_Hive分区表和桶表的使用
- exists sql用法_SQL关于IN和EXISTS的用法和区别,读完之后,大部分程序员收藏了....
- DevOps是微服务的秘方
- java反射经典实例 Java Reflection Cookbook
- Java线程学习笔记(两) 线程异常处理
- 句法分析(syntactic parsing)在NLP领域的应用是怎样的?
- VisualStudioCode常用快捷键
- 虚拟机中使linux系统分辨率变大
- ASP.NET2.0 ReportingServices报表灵魂的收割者(一)
- IE浏览器无法打开HTTPS解决办法
- PHP实现匿名聊天室
- 智能车图像处理(二)基础寻线
- libVLC 事件机制
- 使用Aspose.Pdf修改PDF文件中的表格字段
- python 类和对象 atm_Python实现ATM提款机系统
热门文章
- FileFilter 文件过滤器
- 【从0到1搭建LoRa物联网】20、LoRaWAN扩展
- Java也能做爬虫了?我爬取并下载了酷狗TOP500的歌曲!
- iap进入app后 按复位按钮进入iap无法再进app问题
- HTML+CSS从入门到入土
- Spring Boot中Configuration problem: Cannot locate BeanDefinitionParser for element 的问题分析
- 自动图片拼贴制作软件:CollageItnbsp;…
- [渝粤教育] 山东大学 英语话中华 参考 资料
- Letswave 教程:脑电数据预处理与叠加平均
- 制造业BOM 工厂BOM管理系统 简单实用BOM管理系统,树形结构,目视化BOM管理系统,集成ERP、SAP的BOM管理系统,快速上线BOM管理系统