Cascaded-fcn: 模型测试问题

创建于 2017-04-10  ·  19评论  ·  资料来源: IBBM/Cascaded-FCN

你好,我已经测试了你发布的模型,我的代码是参考你的笔记本。 我的代码是

`caffe.set_mode_gpu()
caffe.set_device(2)
net_liver = caffe.Net('/home/zhou/zou/Cascaded-FCN/models/cascadedfcn/step1/step1_deploy.prototxt', '/home/zhou/zou/Cascaded-FCN/models/cas caddfcn/step1/step1_weights. caffemodel', caffe.TEST)

img=read_dicom_series("../train_image/3Dircdb1.17/PATIENT_DICOM/")
lbl=read_liver_lesion_masks("../train_image/3Dircdb1.17/MASKS_DICOM/")
S = 90
img_p = step1_preprocess_img_slice(img[...,S])
lbl_p = preprocess_lbl_slice(lbl[...,S])
net_liver.blob['data'].data[0,0,...] = img_p
pred = net_liver.forward()['prob'][0,1] > 0.5
plt.figure(figsize=(3*5,10))
plt.subplot(1, 3, _1)
plt.title('CT')
plt.imshow(img_p[92:-92,92:-92], '灰色')
plt.subplot(1, 3, 2)
plt.title('GT')
plt.imshow(lbl_p, '灰色')
plt.subplot(1, 3, 3)
plt.title('pred')
plt.imshow(pred,'灰色')`

但是这样的结果很糟糕
result

最有用的评论

我认为发布的模型是错误的,当我自己训练自己的模型并使用上面的代码时效果很好,结果很好
3dircadb1 1 68

@RenieWell @mohamed-ezz

所有19条评论

有什么我忽略的技巧吗?

结果看起来很奇怪。 在进行修改之前,请确保您可以按原样运行笔记本并获得正确的结果。

代码与您在笔记本中显示的代码相同,因此我找不到代码错误的地方,您能给我一些指导吗? 谢谢

我和你遇到了同样的问题,你发现了吗? 如果你能分享你的出路,我会很高兴。 @manutdzou

我认为发布的模型是错误的,当我自己训练自己的模型并使用上面的代码时效果很好,结果很好
3dircadb1 1 68

@RenieWell @mohamed-ezz

这是好消息@manutdzou 。 非常欢迎您编写拉取请求并将您训练有素的模型提供给公众。 只需将您的模型上传到公共文件主机并使用链接和您的姓名修改自述文件。

哇,我得到了与您的第一个结果相同的奇怪结果。 那么我确定这个发布的模型不是那么好。 反正我在 TensorFlow 上重建 U-Net,我的预测结果不是很好但并不奇怪。

@manutdzou 。 大家好,可以分享一下代码吗?
非常感谢。

嘿大家,
我刚刚更新了自述文件并添加了一个 docker 图像,它可以顺利运行我们的代码。
有关如何启动 docker 映像的更多详细信息,请查看自述文件。
预期的结果应该像这样打印出来。
最良好的祝愿,
帕特里克
cascaded_unet_inference.pdf.pdf

@PatrickChrist嗨,帕特里克,感谢您的出色工作,但是当我尝试使用预训练模型时,我发现 nvidia-docker 很难安装,您能否在不使用 nvidia-docker 的情况下分享正确的预训练模型

@zakizhou我认为因为这是一个可重复性问题,Docker 是我们实现这一目标的最佳选择。

仅当您想在 GPU 上处理文件时才需要nvidia-docker 。 但是,如果您可以在 CPU 上运行,您可以只使用docker

如果您在 linux 发行版上运行,安装nvidia-docker会遇到什么问题?

这些模型也在https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn中共享,您可以在您的主机环境中使用它们(无需 Docker)

@mohamed-ezz 感谢您的回复,我使用的是没有 gpus 的 ubuntu,确实我尝试过docker而不是nvidia-docker但遗憾的是,当我尝试导入预训练的 caffe 模型时,jupyter 的核心笔记本丢了,我不明白为什么。 就像@manutdzou在本期所说的一样,这里的预训练模型 https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn在示例图像上表现不佳。 我用 conda 安装了 caffe,你认为是 caffe 的错误版本导致了这个问题吗?

是的,它可能是 caffe 版本。 请使用泊坞窗图像。

2017 年 7 月 4 日下午 5:45,“周杰” [email protected]写道:

@mohamed-ezz https://github.com/mohamed-ezz谢谢你的回复,我是
使用没有 gpus 的 ubuntu,确实我尝试过 docker 而不是
nvidia-docker 但可悲的是,当我尝试导入预训练的 caffe 模型时,
jupyter notebook 的核心被丢弃了,我不明白为什么。 像什么
@manutdzou https://github.com/manutdzou在这个问题上说,
预训练模型在这里https://github.com/IBBM/Cascaded-FCN/tree/master/
models/cascadedfcn 在样本图像上表现不佳。 我安装了咖啡
使用 conda,您是否认为是错误版本的 caffe 导致了这种情况
问题?


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312908109
或使线程静音
https://github.com/notifications/unsubscribe-auth/ADqENQMhAJvhyvV1SZ5ApQelMqNhBlTMks5sKl39gaJpZM4M4ckQ
.

@mohamed-ezz 好的,我会在带有 gpu 的服务器上尝试该模型,再次感谢!

不需要gpu,只需使用带有README.md中图像的docker即可
英伟达码头工人。

2017 年 7 月 4 日下午 6:59,“周杰” [email protected]写道:

@mohamed-ezz https://github.com/mohamed-ezz好的,我会在
带gpu的服务器,再次感谢!


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312919887 ,
或使线程静音
https://github.com/notifications/unsubscribe-auth/ADqENQh6pIiGyQYTbKSOx_2reMDlja3Cks5sKm-GgaJpZM4M4ckQ
.

我已经在百度发布了一个右肝和病变模型的版本,可以像这样使用这个模型

`导入系统,操作系统
sys.path.insert(0, '/home/zhou/zou/caffe_ws/python')
sys.path.insert(0,'/home/zhou/zou/Cascaded-FCN/lib')
将 numpy 导入为 np
从 matplotlib 导入 pyplot 作为 plt
进口咖啡

result_path = "/home/zhou/zou/Cascaded-FCN/code/result/"
如果不是 os.path.exists(result_path):
os.makedirs(result_path)

im_list = open('test_lesion_list.txt', 'r').read().splitlines()

caffe.set_mode_gpu()
caffe.set_device(0)
net_liver = caffe.Net('deploy.prototxt', 'liver.caffemodel', caffe.TEST)
net_lesion = caffe.Net('deploy.prototxt', 'lesion.caffemodel', caffe.TEST)

肝脏 = 1
病变 = 2
对于范围内的我(0,len(im_list)):
im = np.load(im_list[i].split(' ')[0])
掩码 = np.load(im_list[i].split('')[1])
in_ = np.array(im, dtype=np.float32)
in_expand = in_[np.newaxis, ...]
blob = in_expand[np.newaxis, :, :, :]

net_liver.blobs['data'].reshape(*blob.shape)
net_liver.blobs['data'].data[...] = blob
net_liver.forward()
output_liver = net_liver.blobs['prob'].data[0].argmax(axis=0)

net_lesion.blobs['data'].reshape(*blob.shape)
net_lesion.blobs['data'].data[...] = blob
net_lesion.forward()
output_lesion = net_lesion.blobs['prob'].data[0].argmax(axis=0)

output = output_liver
ind_1 = np.where(output_liver ==0)
output_lesion[ind_1] = 255
ind_2 = np.where(output_lesion ==0)
output[ind_2] = 2

plt.figure(figsize=(3*5,10))
plt.subplot(1, 3, 1)
plt.title('CT')
plt.imshow(im[92:-92,92:-92], 'gray')
plt.subplot(1, 3, 2)
plt.title('GT')
plt.imshow(mask, 'gray')
plt.subplot(1, 3, 3)
plt.title('pred')
plt.imshow(output, 'gray')
path = result_path + im_list[i].split(' ')[0].split('/')[-1][0:-3] +'jpg'
plt.savefig(path)
plt.close()

`
显示了一些结果

3dircadb1 17 85
3dircadb1 17 80
@mohamed-ezz @RenieWell @mjiansun @PatrickChrist @PiaoLiangHXD

层 {
名称:“数据”
类型:“输入”
顶部:“数据”
输入参数{形状:{暗淡:1暗淡:1暗淡:572暗淡:572}}
}

层 {
名称:“conv_d0a-b”
类型:“卷积”
底部:“数据”
顶部:“d0b”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:64
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d0b”
类型:“ReLU”
底部:“d0b”
顶部:“d0b”
}
层 {
名称:“conv_d0b-c”
类型:“卷积”
底部:“d0b”
顶部:“d0c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:64
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d0c”
类型:“ReLU”
底部:“d0c”
顶部:“d0c”
}
层 {
名称:“pool_d0c-1a”
类型:“池”
底部:“d0c”
顶部:“d1a”
pooling_param {
池:最大
内核大小:2
步幅:2
}
}
层 {
名称:“conv_d1a-b”
类型:“卷积”
底部:“d1a”
顶部:“d1b”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:128
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d1b”
类型:“ReLU”
底部:“d1b”
顶部:“d1b”
}
层 {
名称:“conv_d1b-c”
类型:“卷积”
底部:“d1b”
顶部:“d1c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:128
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d1c”
类型:“ReLU”
底部:“d1c”
顶部:“d1c”
}
层 {
名称:“pool_d1c-2a”
类型:“池”
底部:“d1c”
顶部:“d2a”
pooling_param {
池:最大
内核大小:2
步幅:2
}
}
层 {
名称:“conv_d2a-b”
类型:“卷积”
底部:“d2a”
顶部:“d2b”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:256
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d2b”
类型:“ReLU”
底部:“d2b”
顶部:“d2b”
}
层 {
名称:“conv_d2b-c”
类型:“卷积”
底部:“d2b”
顶部:“d2c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:256
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d2c”
类型:“ReLU”
底部:“d2c”
顶部:“d2c”
}
层 {
名称:“pool_d2c-3a”
类型:“池”
底部:“d2c”
顶部:“d3a”
pooling_param {
池:最大
内核大小:2
步幅:2
}
}
层 {
名称:“conv_d3a-b”
类型:“卷积”
底部:“d3a”
顶部:“d3b”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:512
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d3b”
类型:“ReLU”
底部:“d3b”
顶部:“d3b”
}
层 {
名称:“conv_d3b-c”
类型:“卷积”
底部:“d3b”
顶部:“d3c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:512
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d3c”
类型:“ReLU”
底部:“d3c”
顶部:“d3c”
}

层 {
名称:“pool_d3c-4a”
类型:“池”
底部:“d3c”
顶部:“d4a”
pooling_param {
池:最大
内核大小:2
步幅:2
}
}
层 {
名称:“conv_d4a-b”
类型:“卷积”
底部:“d4a”
顶部:“d4b”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:1024
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d4b”
类型:“ReLU”
底部:“d4b”
顶部:“d4b”
}
层 {
名称:“conv_d4b-c”
类型:“卷积”
底部:“d4b”
顶部:“d4c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:1024
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“relu_d4c”
类型:“ReLU”
底部:“d4c”
顶部:“d4c”
}

层 {
名称:“upconv_d4c_u3a”
类型:“反卷积”
底部:“d4c”
顶部:“u3a”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:512
垫:0
内核大小:2
步幅:2
重量填充{
类型:“泽维尔”
}
}
}

层 {
名称:“relu_u3a”
类型:“ReLU”
底部:“u3a”
顶部:“u3a”
}
层 {
名称:“crop_d3c-d3cc”
类型:“作物”
底部:“d3c”
底部:“u3a”
顶部:“d3cc”

}
层 {
名称:“concat_d3cc_u3a-b”
类型:“连接”
底部:“u3a”
底部:“d3cc”
顶部:“u3b”
}
层 {
名称:“conv_u3b-c”
类型:“卷积”
底部:“u3b”
顶部:“u3c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:512
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u3c”
类型:“ReLU”
底部:“u3c”
顶部:“u3c”
}
层 {
名称:“conv_u3c-d”
类型:“卷积”
底部:“u3c”
顶部:“u3d”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:512
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u3d”
类型:“ReLU”
底部:“u3d”
顶部:“u3d”
}
层 {
名称:“upconv_u3d_u2a”
类型:“反卷积”
底部:“u3d”
顶部:“u2a”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:256
垫:0
内核大小:2
步幅:2
重量填充{
类型:“泽维尔”
}
}
}
层 {
名称:“relu_u2a”
类型:“ReLU”
底部:“u2a”
顶部:“u2a”
}
层 {
名称:“crop_d2c-d2cc”
类型:“作物”
底部:“d2c”
底部:“u2a”
顶部:“d2cc”

}
层 {
名称:“concat_d2cc_u2a-b”
类型:“连接”
底部:“u2a”
底部:“d2cc”
顶部:“u2b”
}
层 {
名称:“conv_u2b-c”
类型:“卷积”
底部:“u2b”
顶部:“u2c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:256
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u2c”
类型:“ReLU”
底部:“u2c”
顶部:“u2c”
}
层 {
名称:“conv_u2c-d”
类型:“卷积”
底部:“u2c”
顶部:“u2d”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:256
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u2d”
类型:“ReLU”
底部:“u2d”
顶部:“u2d”
}
层 {
名称:“upconv_u2d_u1a”
类型:“反卷积”
底部:“u2d”
顶部:“u1a”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:128
垫:0
内核大小:2
步幅:2
重量填充{
类型:“泽维尔”
}
}
}
层 {
名称:“relu_u1a”
类型:“ReLU”
底部:“u1a”
顶部:“u1a”
}
层 {
名称:“crop_d1c-d1cc”
类型:“作物”
底部:“d1c”
底部:“u1a”
顶部:“d1cc”

}
层 {
名称:“concat_d1cc_u1a-b”
类型:“连接”
底部:“u1a”
底部:“d1cc”
顶部:“u1b”
}
层 {
名称:“conv_u1b-c”
类型:“卷积”
底部:“u1b”
顶部:“u1c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:128
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u1c”
类型:“ReLU”
底部:“u1c”
顶部:“u1c”
}
层 {
名称:“conv_u1c-d”
类型:“卷积”
底部:“u1c”
顶部:“u1d”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:128
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u1d”
类型:“ReLU”
底部:“u1d”
顶部:“u1d”
}
层 {
名称:“upconv_u1d_u0a_NEW”
类型:“反卷积”
底部:“u1d”
顶部:“u0a”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:64
垫:0
内核大小:2
步幅:2
重量填充{
类型:“泽维尔”
}
}
}
层 {
名称:“relu_u0a”
类型:“ReLU”
底部:“u0a”
顶部:“u0a”
}
层 {
名称:“crop_d0c-d0cc”
类型:“作物”
底部:“d0c”
底部:“u0a”
顶部:“d0cc”

}
层 {
名称:“concat_d0cc_u0a-b”
类型:“连接”
底部:“u0a”
底部:“d0cc”
顶部:“u0b”
}
层 {
名称:“conv_u0b-c_New”
类型:“卷积”
底部:“u0b”
顶部:“u0c”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:64
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u0c”
类型:“ReLU”
底部:“u0c”
顶部:“u0c”
}
层 {
名称:“conv_u0c-d_New”
类型:“卷积”
底部:“u0c”
顶部:“u0d”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:64
垫:0
内核大小:3
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}
层 {
名称:“relu_u0d”
类型:“ReLU”
底部:“u0d”
顶部:“u0d”
}
层 {
名称:“conv_u0d-score_New”
类型:“卷积”
底部:“u0d”
顶部:“分数”
参数 {
lr_mult: 1
衰变多:1
}
参数 {
lr_mult: 2
衰变多:0
}
卷积参数 {
数字输出:2
垫:0
内核大小:1
重量填充{
类型:“泽维尔”
}
引擎:CAFFE
}
}

层 {
名称:“概率”
类型:“Softmax”
底部:“分数”
顶部:“概率”
}

伟大的工作@manutdzou
感谢您的支持。 你介意在这个 repo 中提交你的工作吗?
我们可以有一个文件夹 model-zoo/manutdzou,您可以在其中将您的代码发布为笔记本,将您的 prototxt 和百度链接发布为文本文件? 其他用户一定会感激的。 如果你有一篇关于你的工作的论文,我们也可以添加它。

好的,如果我的代码和模型运行良好,我很乐意在这个 repo 中提交!

发自网易邮箱大师
在 2017 年 7 月 7 日 17:33,Patrick Christ 写道:

伟大的工作@manutdzou
感谢您的支持。 你介意在这个 repo 中提交你的工作吗?
我们可以有一个文件夹 model-zoo/manutdzou,您可以在其中将您的代码发布为笔记本,将您的 prototxt 和百度链接发布为文本文件? 其他用户一定会感激的。 如果你有一篇关于你的工作的论文,我们也可以添加它。


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

aagnone3 picture aagnone3  ·  3评论

Zumbalamambo picture Zumbalamambo  ·  3评论

marco-vene picture marco-vene  ·  3评论

LeenaShekhar picture LeenaShekhar  ·  3评论

jingw222 picture jingw222  ·  3评论