【深度学习】【U-net】医学图像(⾎管)分割实验记录
医学图像分割实验记录
本项⽬仅⽤于⼤创实验,使⽤pytorch编程,参考价值有限
U-net介绍
这⾥先⾏挖个坑,以后专门写⼀篇⾃⼰总结的资源吧。
数据集
使⽤hx医院提供的脑CT图像,原图像为医学图像数据(数据范围较⼤)。使⽤软件⾃⾏标注后得到的标记数据做标签。
切⽚显⽰⼤致长这样:
TODO:由于本⼈认为⾎管分割要参考每张图⽚上下⼏张空间序列上相邻切⽚的数据,因此想着直接把这些’相邻数据’作为每张图像的其
他‘channel’。且令总的channel为奇数。输⼊数据维度可能为,意味着,,
。
实验记录
实验1
Epoch:15traindata:800testdata:200LearningRate:0.05ImgSize:(128,128)BatchSize:1Channel:5
模型结构:
ITK−SNAP
eg.(1,5,128,128)batchsize=1channel=5
imagesize=(128,128)
Unet(
(conv1):DoubleConv(
(conv):Sequential(
(0):Conv2d(5,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(64,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool1):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(conv2):DoubleConv(
(conv):Sequential(
(0):Conv2d(64,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(128,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool2):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(conv3):DoubleConv(
(conv):Sequential(
(0):Conv2d(128,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(256,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool3):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(up8):ConvTranspo2d(256,128,kernel_size=(2,2),stride=(2,2))
(conv8):DoubleConv(
(conv):Sequential(
(0):Conv2d(256,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(128,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(up9):ConvTranspo2d(128,64,kernel_size=(2,2),stride=(2,2))
(conv9):DoubleConv(
(conv):Sequential(
(0):Conv2d(128,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(64,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(conv10):Conv2d(64,1,kernel_size=(1,1),stride=(1,1))
)
实验结果:忘记了orz
实验参数保存为net040801_
实验2(fail)
相⽐于实验1只改变了imagesize。
Epoch:15traindata:800testdata:200LearningRate:0.05ImgSize:(256,256)BatchSize:1Channel:5
模型结构同实验1
loss:0.693154
误差维持不变,模型没有收敛。
实验3(fail)
相⽐于实验2改变了learningrate,从0.05变为0.005。
Epoch:15traindata:800testdata:200LearningRate:0.005ImgSize:(256,256)BatchSize:1Channel:5
模型结构同实验1
训练集误差变化曲线测试集误差变化曲线
实验4(fail)
相⽐于实验3改变了imagesize,从(256,256)改回(128,128)。
Epoch:15traindata:800testdata:200LearningRate:0.005ImgSize:(128,128)BatchSize:1Channel:5
模型结构同实验1
训练集误差变化曲线测试集误差变化曲线
最后误差维持在
loss:0.693146
实验5(fail)
相⽐于实验4改变了learningrate,从0.005改为0.0005。
Epoch:20+traindata:800testdata:200LearningRate:0.0005ImgSize:(128,128)BatchSize:1Channel:5
模型结构同实验1
训练集误差变化曲线测试集误差变化曲线
最后误差维持在
loss:0.693146
好吧这个数和实验4⼀样
实验6(fail)
相⽐于实验5改变了⽹络结构加了⼀层深度。
Epoch:20+traindata:800testdata:200LearningRate:0.0005ImgSize:(128,128)BatchSize:1Channel:5
模型结构为
Unet(
(conv1):DoubleConv(
(conv):Sequential(
(0):Conv2d(5,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(64,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
(5):ReLU(inplace=True)
)
)
(pool1):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(conv2):DoubleConv(
(conv):Sequential(
(0):Conv2d(64,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(128,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool2):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(conv3):DoubleConv(
(conv):Sequential(
(0):Conv2d(128,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(256,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool3):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(conv4):DoubleConv(
(conv):Sequential(
(0):Conv2d(256,512,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(512,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(512,512,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(512,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(pool4):MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=Fal)
(up7):ConvTranspo2d(512,256,kernel_size=(2,2),stride=(2,2))
(conv7):DoubleConv(
(conv):Sequential(
(0):Conv2d(512,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(256,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(up8):ConvTranspo2d(256,128,kernel_size=(2,2),stride=(2,2))
(conv8):DoubleConv(
(conv):Sequential(
(0):Conv2d(256,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(128,128,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(128,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(up9):ConvTranspo2d(128,64,kernel_size=(2,2),stride=(2,2))
(conv9):DoubleConv(
(conv):Sequential(
(0):Conv2d(128,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(1):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2):ReLU(inplace=True)
(3):Conv2d(64,64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
(4):BatchNorm2d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(5):ReLU(inplace=True)
)
)
(conv10):Conv2d(64,1,kernel_size=(1,1),stride=(1,1))
)
训练集误差变化曲线测试集误差变化曲线
最后误差维持在
loss:0.693156
本文发布于:2023-03-09 20:25:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678364706197083.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:深度u.doc
本文 PDF 下载地址:深度u.pdf
留言与评论(共有 0 条评论) |