- 博客(35)
- 收藏
- 关注
原创 用Spherical Demon做 spherical alignment预处理
主要用到的是:SD_rotateAtlas2Sphere.m函数的输入参数和输出参数如下:输入参数:输出参数:这个函数通过迭代地调整的旋转角度,并计算与之间的能量差异,以找到最佳的旋转变换,使得能够适配到上。当然,这里是一个调用函数的示例。请注意,为了使用这个函数,你需要有相应的输入数据结构和参数。以下是一个假设的调用示例:在这个例子中,我们首先定义了一个结构体,它包含了函数需要的所有参数。然后我们设置了搜索宽度和间隔数。接下来,我们调用了函数,并传入了必要的参数。函数执行后,将返回当前的变形参数,最佳
2024-05-31 16:18:41
368
原创 Img2Fourier2Img图像转化成频域还能完全恢复回图像域吗?
测试一下原图,mg2Fourier2Img保存的图,和Img2Fourier保存再加载2Img保存的图。结果显示,a,b,c都是false,打印出来看发现小数点后很多位才开始不一样,所以可视化看着无差别。心血来潮,想看看Brain MRI Img变到频域再变回来能不能复原,于是尝试了一下。
2024-03-30 17:52:43
247
原创 网络的warm up
在训练深度神经网络时,“warm up” 通常指的是在开始全面训练之前进行一些预备步骤,以便更有效地训练模型。这种做法可以有助于避免模型在初始阶段出现不稳定的情况,提高训练的收敛速度和模型的性能。这些 “warm up” 的方法都有助于使训练过程更加平稳和高效,从而帮助模型更好地学习数据的特征并取得更好的性能。
2024-03-22 15:29:13
324
原创 diffusion model加condition总结
想要实现图生图/文生图,DM具体怎么训练的呢?学习的目标都是:你要生成内容的加噪版本文生图,图加噪图1生图2,图2加噪。
2024-03-19 20:49:00
2355
1
原创 两种对比学习损失:contrastive loss 和 infoNCE loss
总的来说,对比损失和infoNCE损失都是有效的对比学习方法,可以用于无监督学习任务。选择使用哪种损失函数取决于具体的任务和模型结构,以及对样本相似性度量的需求。对比损失(contrastive loss)和信息最大化非条件估计损失(infoNCE loss)是两种常用于对比学习的损失函数。
2024-01-22 13:50:06
5383
原创 训练数据归一化为(0,1)还是(-1,1)?
在跑UNet时,我将图像输入归一化为(-1,1),激活函数用的Relu,网络学不到东西。我的经验是,用diffusion model做生成任务时,将图像输入归一化为(-1,1),应该也是因为噪声通常是均值为零的对称分布(还没考证)。数据的范围:如果数据的取值范围主要集中在非负数或者非正数区间,那么归一化到(0,1)范围更合适。数据的对称性:如果数据存在负数值,并且对称性很重要,那么归一化到(-1,1)范围更适用。(我做实验将图像归一化为(0,1),用Relu也不行,不知道啥原因了)
2023-12-10 23:40:02
1348
原创 TBM (Tensor-Based Morphometry) 衡量脑区生长/萎缩情况
引用一个例子:http://aammt.tmmu.edu.cn/Upload/rhtml/201709202.htm#outline_anchor_12。
2023-12-08 11:09:37
483
原创 hook获取网络某一层的输入和反向传播的梯度
hook是pytorch用于获取网络某层的输出和反向传播梯度,一共有3种:register_hook(hook):获取变量的梯度,不能获得神经网络中间的计算量register_forward_hook(hook):网络中前向传播的量register_backward_hook(hook):网络中反向传播的量我自己写的网络,想获得某个模块的反向传播权重,不能用register_hook,所以把该模块写成了nn.module...
2022-04-13 14:54:30
1852
原创 pytorch transforms 数据增强
transforms能实现:裁剪旋转和翻转图像变换transforms 方法操作自定义 transforms 方法这篇写的很好,比较全,还有代码,推荐看看转载:https://www.cnblogs.com/zhangxiann/p/13570884.html
2022-04-01 19:12:58
382
原创 torch.stack()对序列数据内部的张量进行扩维拼接
对序列数据内部的张量进行扩维拼接:把多个2维的张量凑成一个3维的张量;多个3维的凑成一个4维的张量…以此类推,也就是在增加新的维度进行堆叠。outputs = torch.stack(inputs, dim=?) → Tensor参数inputs : 待连接的张量序列。注:python的序列数据只有list和tuple。dim : 新的维度, 必须在0到len(outputs)之间。注:len(outputs)是生成数据的维度大小,也就是outputs的维度值。...
2022-03-17 15:50:08
1307
原创 平均池化和最大池化
pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。pooling目的是为了保持某种不变性(旋转、平移、伸缩等),常用的有mean-pooling,max-pooling和Stochastic-pooling三种。平均池化更多保留背景信息map中所有信息都有用的时候选择avgpool如分割的时候,用global avgpool来获取全局上下文关系如224×224图像分类将最后的7×7map进行avgpool而不是maxpool,是因为网络深层的高级语义信息一般来说都
2022-03-09 15:37:44
2556
原创 如何选择正确的激活函数?
如何选择正确的激活函数?根据问题的性质,我们可以为神经网络更快更方便地收敛作出更好的选择。用于分类器时,Sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。ReLU函数是一个通用的激活函数,目前在大多数情况下使用。如果神经网络中出现死神经元,那么PReLU函数就是最好的选择。请记住,ReLU函数只能在隐藏层中使用。转载自: https://baijiahao.baidu.com/s?id=1582399059360085084&wfr=
2022-03-09 15:08:33
1303
原创 SE模块的理解
之前对SE模块的两个全连接层的作用和设置有疑问,于是和实验室同学讨论学习了一下,以下是我自己的理解,如果有不准确的地方请批评指正。1、压缩(Squeeze)进行的操作是 全局平均池化(global average pooling)特征图被压缩为1×1×C向量2、激励(Excitation)两个全连接层。两个FC组成一个可训练的函数,用来学习通道注意力。(所以FC激活函数不是线性的就行)两个FC构成了bottleneck结构:(SERatio是一个缩放参数)第一个FC把神经元数量减少了 1.
2022-03-08 19:18:14
2974
原创 Dataset、Sampler和Dataloader
Dataset处理数据,加载好,等待被读取Dataloader生成器,生成一个个batch的数据用来训练Sampler生成一个个batch的index供Dataloader去Dataset里加载数据所以就是一开始数据就准备好了,在训练的过程中dataloader去加载一个个batch的数据来训练。这篇知乎更详细地介绍了流程:https://zhuanlan.zhihu.com/p/143216812....
2021-05-24 10:26:30
234
原创 CT图像预处理
做第一个课题时没人告诉我要做插值,现总结基本步骤供大家参考,少走弯路。step1:spacing interpolation间隔插值,也就是在做重采样的事情,让所有像素都达到一样大小。step2:window transform调整窗宽窗位step3:get mask effective range画maskstep4:generate subimage裁ROI...
2021-05-01 11:12:02
762
原创 python读图片的通道问题
HWC是指图片的高、宽、通道;其中C包含了RGBcv2:BGR(numpy)PIL Image.open:RGB;HWC;[0,255]pytorch处理对象要是CHW。所以需要用 .ToTensor把HWC [0,255] 变为CHW [0,1]PS: .ToTensor处理的是PIL图
2021-03-30 19:51:50
869
原创 服务器常用命令
服务器// 转到文件夹下cd xxxxxxx// 激活自己的环境conda activate ZhangKai_torch// 查看GPU使用情况nvidia-smi -l 1// 指定GPU集群中第一块GPU使用,其他的屏蔽掉CUDA_VISIBLE_DEVICES=0 python your_file.py tmux// 创建新的tmux环境。// 我有两个环境:ZhangKai , ZhangKai-2tmux new -s ZhangKai-2// 进入
2021-03-22 11:24:24
133
原创 ImageFolder 一个通用的数据加载器
torchvision.datasets的子类,用于加载数据。默认数据集已经自觉按照要分配的类型分成了不同的文件夹,一种类型的文件夹下面只存放一种类型的图片。举例说明:数据分为cat和dog两类,各自在各自类的文件夹里。import torchvision.datasets as dsetdataset = dset.ImageFolder('./data/dogcat_2') #没有transform,先看看取得的原始图像数据print(dataset.classes) #根据分的文件夹的
2021-03-15 16:23:34
3534
原创 加载预训练模型——torch.load 与 load_state_dict
checkpoint = torch.load('./pretrained/Clean_resnet18-200-regular.pth') # torch.load加载预训练模型参数model.load_state_dict(checkpoint['state_dict']) # load_state_dict是net的一个方法:把torch.load加载的参数加载到模型中model.eval() # 把模型换成测试模式。因为测试模型的
2021-03-14 17:22:27
4665
原创 from import 与 import
在知乎上看到这两个类比,觉得很生动形象好理解。from import可以理解为 从三年二班(某模块)里让周杰伦(某变量)到训导处(当前模块)报道。import可以理解为先让三年二班到训导处,然后再让这些同学其中的周杰伦报道。from import从车里把矿泉水拿出来,给我import把车给我...
2021-03-14 15:34:31
128
原创 CAM与Grad-CAM
分类激活热图,能很好的展示出网络在分类时主要注意力在哪儿CAM中心思想:GAP(Global Average Pooling)替换掉全连接层,训练,得到GAP到softmax层的权重。权重与GAP前的特征图做加权和得热图Grad-CAM不用替换全连接层重新训练中心思想:类别的得分对第k个特征图的每个像素算偏导再求平均即得到权重。权重和最后一个特征图求加权和,得热图。指路: http://bindog.github.io/blog/2018/02/10/model-explanation/..
2021-03-11 21:05:32
377
原创 特征金字塔
目的提高目标检测中对于小目标的检测效果。思想由下向上-下采样:传统的卷积提特征,得到具备高级语义(high semantic)但不具备丰富信息的特征图。由上向下-上采样:FPN提供了一种自上而下的路径,去构建higher resolution layer from a semantic rich layer。这样构建出来的层具有high resolution的同时又有丰富的语义rich semantic.横向连接:但是由于经过了不断地上采样下采样,object的位置已经不准确了.所以我们在重新
2021-03-04 21:31:07
224
1
原创 多分类任务计算 TopK 准确率的小工具——topk(pytorch)
pytorch中的topk函数在扒 “cifar100套装” 代码的时候发现test函数里面有这样一个函数:_, pred = output.topk(5, 1, largest=True, sorted=True)原函数为:torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)input:一个tensor数据k:指明是得到前k个数据以及其indexdim:
2021-01-19 18:11:59
2398
原创 保存、加载网络模型
# savetorch.save(model.state_dict(), PATH)# loadmodel = MyModel(*args, **kwargs)model.load_state_dict(torch.load(PATH))model.eval()
2021-01-17 10:57:19
126
原创 服务器上跑的很慢-已解决
用服务器跑,竟然和我用电脑上的CPU跑的速度差不多,明显有问题,最终通过以下方法解决:查看GPU使用情况和进程 nvidia-smi #查看GPU使用情况 python show_gpu.py # 查看GPU使用情况 w # 看有哪些用户/进程通过print看是否调用了cuda用服务器没办法某一进程是否用了显卡以及用了哪张显卡所以在代码里print一下看看print('input.is_cuda',input.is_cuda)结果返回:input.is_
2021-01-04 16:41:47
4701
1
原创 漫漫Debug路
efficient_densenet_pytorch-masterGitHub上下载的代码是跑CIFAR10的数据,我改成自己的数据,结果总报错。难的不是改错,而是发现错在哪儿!从错误提示中绞尽脑汁也没有发现到底是怎么回事。其实问题很明显,我只动了输入数据,所以我应该对比和人家能跑通的之间的差别:网络模型一样,并且能输出模型结构和参数,说明模型没问题。通过看报错,发现问题出在前向传播中,也就是说明我数据输入不对:数据类型和size。通过对比原来代码的train_loader (Dataload
2021-01-03 22:26:14
133
原创 LeNet;
LeNetC3层的16张图存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。最后两层F8层:84个值对应一个比特图得84个像素Output层 :在比较预测的比特图与数字i的比特图每个像素进行比较,相差越小,值越接近0,越证明就是这个数字。==径向基函数:==一个取值仅
2021-01-01 21:02:45
200
原创 pycharm切换conda虚拟环境
说白了就是切换对应的project interpreter.…\Anaconda3\envs\pytorch\python.exe注意:envs后面是环境名,最后都要选到python.exe指路:https://www.cnblogs.com/jaysonteng/p/12554161.html
2020-05-25 17:08:23
1801
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人