nnUnet
nnUnet1.预处理1.1 CropCrop:裁剪去除图片的0区域,使用非0区域作为训练数据,对MRI数据能够显著降低其大小。
1.2 ResampleResample:CNN无法理解体素间距的概念,重采样使得数据集体素间距一致(使像素间所对应的真实的物理距离一致)。
注:在医学图像中要关注图像的物理距离,这关系到器官的大小。
2.训练2.1 Patch-Sampling:Patch-Training:对不同的图像裁剪固定的大小,组成一个batch进行训练(用于解决在统一体素间距后,出现的数据分辨率不一致的问题)。
Sampling:为了防止Patch中的数据全部是背景,保证batch中的数据有1/3包含前景。
2.2 Cross-ValidationnnUnet在训练集上使用五折交叉验证进行评估
3.网络设计nnUnet与Unet的结构类似,但nnUnet会根据数据集自适应调整网络结构。
3.1 Cascade-UnetCascade-Unet:使用patch-training,不完整的图片导致感受野受限,为了解决该问题,设计出Cascade-Unet。
Cascade-Un ...
C++基础(2)
1.复制函数1.1 浅复制浅复制:仅复制对象的成员变量的值,而不复制对象中的指针所指向的内容。
注:如果原始对象中包含指针,浅复制将导致多个对象共享同一内存块,从而可能引发潜在的问题。当原始对象的析构函数被调用时,如果没有适当地管理共享资源,可能会导致重复释放内存或内存泄漏等问题。
1.2 深复制深复制:不仅复制对象的成员变量的值,还要递归地复制对象中的指针所指向的内容,创建一个全新的数据拷贝。
注:新对象与原始对象彼此独立,不共享内存块,但需要更多的计算和内存开销。
12345678910111213141516171819202122232425262728293031323334353637#include <string.h> #include<iostream>using namespace std; class String{ private: char *data; public: String(const char *str) { data=new char[strlen(str)]+1; ...
Unet
Unet网络结构
网络左边为contracting path(收缩路径),右边为expansive path(扩张路径)。
注:
1.Contracting path为常规的3×3卷积结构,与ReLU,还有2×2的max pooling。每次下采样,都将featuremap的channel变为之前的两倍。
2.Expansive path为上采样过程,每次都是22的上采样卷积过程,并且将相应的feature channel减少为之前的一半。
FCN
1.FCN网络1.1 核心思想
不含全连接层的全卷积网络,可适应任意尺寸输入;(可以为不同大小和分辨率的图像生成像素级别的预测)
反卷积层增大图像尺寸,输出精细结果;
结合不同深度层结果的跳级结构,确保鲁棒性和精确性。
1.2 网络结构
注:
1.全卷积部分为一些经典的CNN网络(如VGG,ResNet等),用于提取特征。
2.反卷积部分则是通过上采样得到原尺寸的语义分割图像。
3.FCN的输入可以为任意尺寸的彩色图像,输出与输入尺寸相同,通道数为n(目标类别数)+1(背景)。
2.实例2.1 创建一个全卷积网络12345678910111213141516171819202122232425262728293031323334%matplotlib inlineimport torchimport torchvisionfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2l#加载预训练的ResNet-18模型来提取图像特征,并查看该模型的最后三个子模块的结构和参数pre ...
图像分割基础
1.图像分割语义分割:为每个像素都打上标签,只区分类别,但不区分类别中的具体单位。
实例分割:不光要区别类别,还要区分类别中的每一个个体。
2.Focal lossfocal loss从样本难易分类角度出发,解决样本非平衡带来的模型训练问题。
focal loss的具体形式:\large-\alpha(1-y_{pred})^{\gamma}y_{true}log(y_{pred})-(1-\alpha)y_{pred}^{\gamma}(1-y_{true})log(1-y_{pred})
注:
1.$\large\gamma$通常设置为2,$\large(1-y_{pred})^{\gamma}$相当于样本的难易度权值,$\large\alpha$为正负样本的比例
2.为了防止难易样本的频繁变化,应当选取小的学习率。防止学习率过大,造成w变化较大从而引起 $\large y_{pred}$的巨大变化,造成难易样本的改变。
3.转置卷积转置卷积:用来增大输入的高宽
3.1 转置卷积的计算方式计算方式一:
计算方式二(填充为0,步幅为1):
一般情况:
基本的转置卷积运算:
12 ...
C++基础(1)
1.常量1.1 使用 const 将变量声明为常量1const double pi = 3.14;
1.2 使用 constexpr 定义常量表达式12constexpr double GetPi() {return 3.14;}constexpr double TwicePi(){return 2* GetPi();}
1.3 使用关键字 enum 声明的枚举常量1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;enum direct{ North=5, South, East, West };int main(){ direct f=North; cout<<f<<endl; cout<<South<<endl; cout<<East<< ...
torchvision.transforms使用详解
torchvision.transforms1. torchvision.transforms.Composetorchvision.transforms.Compose:是一个用于组合多个图像预处理操作的类,将多个预处理操作串联在一起,以便在数据加载时对图像进行连续的处理。
torchvision.transforms.Compose(transforms) 的参数是一个列表,其中包含要进行的图像预处理操作。
1234567891011121314import torchvision.transforms as transforms# 定义图像预处理操作transformations = transforms.Compose([ transforms.Resize(256), # 调整图像大小为256x256 transforms.RandomCrop(224), # 随机裁剪为224x224 transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.ToTen ...
线性回归
线性回归1.线性回归的从零开始实现1.1 构造数据集以参数w=[2,−3.4]⊤、b=4.2和噪声项ϵ生成数据集。
标签:y=Xw+b+ϵ
torch.normal():生成一个服从正态分布的随机张量。
torch.matmul:计算两个张量矩阵相乘(可以用利用广播机制进行不同维度的相乘操作)。
1234567891011121314def synthetic_data(w, b, num_examples): """生成 y = Xw + b + 噪声。""" X = torch.normal(0, 1, (num_examples, len(w))) #torch.normal()生成一个服从正态分布(均值为0,标准差为1)的随机张量X,大小为(num_examples, len(w)) #其中num_examples是样本数量,len(w)是特征数量。 y = torch.matmul(X, w) + b #函数通过矩阵乘法计算目标变量y。y是由X和w之间的线性关系构造的,并且加上 ...
数据预处理
数据预处理1.创建csv文件1.1 创建目录os.makedirs(): 这是一个用于递归创建目录的函数。它接受一个路径作为输入,并创建路径中所有缺失的目录
exist_ok=True: 这是os.makedirs()函数的一个可选参数。当设置为True时,如果目标目录已经存在,函数不会引发错误,而是默默地继续执行。
os.path.join():函数来连接两个路径部分:”..”(表示父目录) 和 “data”
1234os.makedirs(os.path.join('..', 'data'), exist_ok=True)#创建一个名为"data"的目录,该目录位于当前工作目录的父目录中data_file = os.path.join('..', 'data', 'house_tiny.csv')#创建一个名为data_file的变量,指向当前工作目录的上一级目录中的"data"目录下的"house_tiny.csv"文件
...
神经网络(1)
神经网络1. 激活函数激活函数:作用在于决定如何来激活输入信号的总和。
如,感知机的数学形式:
其亦可表达为:
h(x)函数会将输入信号的总和转换为输出信号,即为激活函数。
1.1 阶跃函数激活函数:以阈值为界,一旦输入超过阈值,就切换输出。
12345#当输入超过0时,输出1,否则输出0的阶跃函数def step_function(x): y = x > 0 return y.astype(np.int) #用astype()方法转换NumPy数组的类型
阶跃函数的图形
123456789import numpy as npimport matplotlib.pylab as pltdef step_function(x): return np.array(x > 0, dtype=np.int)x = np.arange(-5.0, 5.0, 0.1)y = step_function(x)plt.plot(x, y)plt.ylim(-0.1, 1.1) # 指定y轴的范围plt.show()
1.2 sigmoid函数sigmoid函数: $h(x)={ ...