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》相关推荐

  1. 读《Android 安全架构深究》

    Android 安全架构深究 安全是一个非常立体而丰富得概念.在不同的场景下,安全有着不同的含义. 比如对于网络传输,安全指的是传输的数据不会被其他人看到.篡改.伪造及仿冒,传输的数据不会遭到破坏,数 ...

  2. 《最强Android书 架构大剖析》读书笔记

    文章目录 第一章 Android 体系结构的变革之路 1.2 Android系统源码目录 与Linux的异同 Android的框架 原生二进制可执行文件 Android 的原生库 核心(core)库 ...

  3. Android Jetpack架构组件之 Room(使用、源码篇)

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...

  4. 抖音、美团等大厂千万级用户的Android客户端架构演进之路—

    在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...

  5. Android 图形架构之一 ——概述

    前言 本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层.对分析app的卡顿,掉帧等 有很大帮助. 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个 ...

  6. Android display架构分析-SW架构分析(1-8)

    参考: Android display架构分析二-SW架构分析 Android display架构分析三-Kernel Space Display架构介绍 Android display架构分析四-m ...

  7. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  8. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  9. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  10. Android系统架构图及简单的系统架构介绍

    2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...

最新文章

  1. 《机器学习Python实践》——数据导入(CSV)
  2. java有不过_不过而而
  3. C++ 的关键字(保留字)完整介绍
  4. mvc2中如何在下拉列表中显示含有子类的项(子类前加--)
  5. js:点击button后返回值
  6. hive 自定义元数据表_Hive分区表和桶表的使用
  7. exists sql用法_SQL关于IN和EXISTS的用法和区别,读完之后,大部分程序员收藏了....
  8. DevOps是微服务的秘方
  9. java反射经典实例 Java Reflection Cookbook
  10. Java线程学习笔记(两) 线程异常处理
  11. 句法分析(syntactic parsing)在NLP领域的应用是怎样的?
  12. VisualStudioCode常用快捷键
  13. 虚拟机中使linux系统分辨率变大
  14. ASP.NET2.0 ReportingServices报表灵魂的收割者(一)
  15. IE浏览器无法打开HTTPS解决办法
  16. PHP实现匿名聊天室
  17. 智能车图像处理(二)基础寻线
  18. libVLC 事件机制
  19. 使用Aspose.Pdf修改PDF文件中的表格字段
  20. python 类和对象 atm_Python实现ATM提款机系统

热门文章

  1. FileFilter 文件过滤器
  2. 【从0到1搭建LoRa物联网】20、LoRaWAN扩展
  3. Java也能做爬虫了?我爬取并下载了酷狗TOP500的歌曲!
  4. iap进入app后 按复位按钮进入iap无法再进app问题
  5. HTML+CSS从入门到入土
  6. Spring Boot中Configuration problem: Cannot locate BeanDefinitionParser for element 的问题分析
  7. 自动图片拼贴制作软件:CollageItnbsp;…
  8. [渝粤教育] 山东大学 英语话中华 参考 资料
  9. Letswave 教程:脑电数据预处理与叠加平均
  10. 制造业BOM 工厂BOM管理系统 简单实用BOM管理系统,树形结构,目视化BOM管理系统,集成ERP、SAP的BOM管理系统,快速上线BOM管理系统