CNN每层卷积结果视觉展示(3Dircadb肝脏数据为例)
试着展示了肝脏每层卷积之后的结果。代码如下:
import torch
import torch.nn as nn
import SimpleITK as sitk
import numpy as np
def change_indenty(ct):
ct[ct < 40] = 40
ct[ct > 400] = 400
return ct
class Dialte(nn.Module):
def __init__(self, num):
super(Dialte, self).__init__()
self.num= num
self.act = nn.ReLU(inplace=False)
self.norm = nn.BatchNorm3d
self.conv1 = nn.Sequential(
nn.Conv3d(1,1, kernel_size=3, stride=1, padding=1),
self.act,
self.norm(1)
)
def forward(self, x):
for i in range(self.num):
x = self.conv1(x)
return x
if __name__ == "__main__":
path = r"D:\myProject\HDC_vessel_seg\datasets\nii\image_2.nii"
image = sitk.ReadImage(path)
img_num = sitk.GetArrayFromImage(image)
img_num = change_indenty(img_num)
img_num = np.expand_dims(np.expand_dims(img_num, axis=0), axis=0).astype(np.float32)
img_num = torch.from_numpy(img_num)
print(img_num.shape)
# image = torch.randn(1*3*8*8*8).reshape(1,3,8,8,8)
model = Dialte(num=5)
x = model(img_num)
# x = img_num # 展示原始图像
x = x[0,0,...]
x = x.cpu().data.numpy()
print("x",x.shape)
predict_seg = sitk.GetImageFromArray(x)
predict_seg.SetSpacing(image.GetSpacing())
predict_seg.SetOrigin(image.GetOrigin())
predict_seg.SetDirection(image.GetDirection())
# sitk.WriteImage(predict_seg, path.replace("vessel", "dialte"))
sitk.WriteImage(predict_seg, path.replace("image", "pre_image"))
结果:
原始
第一层:
第二层:
第三层:
第四层:
第五层:

浙公网安备 33010602011771号