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 cadedfcn / step1/step1_weights。 caffemodel'、caffe.TEST)

img = read_dicom_series( "../ train_image / 3Dircadb1.17 / PATIENT_DICOM /")
lbl = read_liver_lesion_masks( "../train_image/3Dircadb1.17/MASKS_DICOM/")
S = 90
img_p = step1_preprocess_img_slice(img [...、S])
lbl_p = preprocess_lbl_slice(lbl [...、S])
net_liver.blobs['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、'gray') `

しかし、結果はこのように非常に悪いです
result

最も参考になるコメント

リリースされたモデルは間違っていると思います。自分のモデルを自己トレーニングして上記のコードを使用すると、うまく機能し、結果は良好です。
3dircadb1 1 68

@RenieWell @ mohamed-ezz

全てのコメント19件

私が無視したトリックはありますか?

結果は奇妙に見えます。 変更を加える前に、ノートブックをそのまま実行して正しい結果が得られることを確認してください。

コードはノートブックに表示されているものと同じであるため、コードがどこで間違っているのかわかりません。ガイダンスを教えてください。 ありがとうございます

私はあなたと同じ問題に遭遇しました、あなたは見つけましたか? あなたがあなたの方法を共有することができれば私は感謝します。 @manutdzou

リリースされたモデルは間違っていると思います。自分のモデルを自己トレーニングして上記のコードを使用すると、うまく機能し、結果は良好です。
3dircadb1 1 68

@RenieWell @ mohamed-ezz

それは素晴らしいニュース@manutdzouです。 プルリクエストを作成して、トレーニング済みのモデルを一般に公開することは大歓迎です。 モデルをパブリックファイルホスティング業者にアップロードし、リンクと名前でreadmeを変更するだけです。

うわー、私はあなたの最初の結果と同じ奇妙な結果を得ました。 それなら、このリリースされたモデルはそれほど良くないと確信しています。 とにかく、TensorFlowでU-Netを再構築すると、予測結果はそれほど良くありませんが、奇妙ではありません。

@manutdzou 。 こんにちはみんな、あなたはあなたのコードを共有できますか?
どうもありがとうございました。

こんにちは、みなさん、
Readmeを更新し、コードをスムーズに実行するDockerイメージを追加しました。
Dockerイメージを開始する方法の詳細については、Readmeをご覧ください。
期待される結果は、次のようになります。
幸運をお祈りしています、
パトリック
cascaded_unet_inference.pdf.pdf

@PatrickChristこんにちはPatrick、すばらしい作業に感謝しますが、事前トレーニング済みモデルを使用しようとすると、nvidia-dockerをインストールするのが難しいことがわかりました。nvidia-dockerを使用せずに、正しい事前トレーニング済みモデルを共有してください。

@zakizhouこれは再現性の問題であるため、Dockerがそれを達成するための最善の策だと思います。

nvidia-dockerは、GPUでファイルを処理する場合にのみ必要です。 ただし、CPUでの実行に問題がない場合は、 dockerを使用できます。

Linuxディストリビューションで実行している場合、 nvidia-dockerをインストールするために直面​​している問題は何ですか?

モデルはhttps://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcnでも共有されており、ホスト環境(Dockerなし)で使用できます。

@ mohamed-ezz返信ありがとうございます。GPUなしでubuntuを使用しています。実際、 nvidia-docker dockerを試しましたが、残念ながら、jupyterのコアである事前トレーニング済みのcaffeモデルをインポートしようとしました。ノートブックがダンプされ、理由がわかりません。 @manutdzouがこの号で言ったことのように、ここで事前トレーニングされたモデル https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcnは、サンプル画像でパフォーマンスが低下します。 condaと一緒にcaffeをインストールしましたが、この問題の原因となったのは間違ったバージョンのcaffeだと思いますか?

はい、それはおそらくカフェバージョンです。 Dockerイメージを使用してください。

2017年7月4日午後5時45分、「JieZhou」 [email protected]は次のように書いています。

@ mohamed-ezz https://github.com/mohamed-ezz返信ありがとうございます、私は
GPUなしでubuntuを使用して、実際に私は代わりにdockerを試しました
nvidia-dockerですが、悲しいことに、事前にトレーニングされたcaffeモデルをインポートしようとすると、
jupyterノートブックのコアがダンプされました。理由がわかりません。 どのような
@manutdzou https://github.com/manutdzouは、この号で、
事前トレーニング済みモデルはこちらhttps://github.com/IBBM/Cascaded-FCN/tree/master/
models/cascadedfcnはサンプル画像でパフォーマンスが悪い。 カフェを設置しました
コンダで、これを引き起こしたのは間違ったバージョンのカフェだと思いますか
問題?


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312908109
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ADqENQMhAJvhyvV1SZ5ApQelMqNhBlTMks5sKl39gaJpZM4M4ckQ

@ mohamed-ezz OK、GPUを搭載したサーバーでモデルを試してみます。ありがとうございます。

GPUは必要ありません。代わりに、README.mdのイメージでdockerを使用してください。
nvidia-dockerの。

2017年7月4日午後6時59分、「JieZhou」 [email protected]は次のように書いています。

@ mohamed-ezz https://github.com/mohamed-ezz OK、モデルを試してみます
GPUを搭載したサーバー、ありがとうございました!


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312919887
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ADqENQh6pIiGyQYTbKSOx_2reMDlja3Cks5sKm-GgaJpZM4M4ckQ

私は右肝臓のバージョンをリリースしました。Baiduの病変モデルはこのモデルをこのように使用できます

`import sys、os
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
範囲内のiの場合(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

レイヤー{
名前:「データ」
タイプ:「入力」
上:「データ」
input_param {shape:{dim:1 dim:1 dim:572 dim:572}}
}

レイヤー{
名前: "conv_d0a-b"
タイプ:「コンボリューション」
下:「データ」
上:「d0b」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:64
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d0b"
タイプ:「ReLU」
下:「d0b」
上:「d0b」
}
レイヤー{
名前: "conv_d0b-c"
タイプ:「コンボリューション」
下:「d0b」
上:「d0c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:64
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d0c"
タイプ:「ReLU」
下:「d0c」
上:「d0c」
}
レイヤー{
名前:「pool_d0c-1a」
タイプ:「プーリング」
下:「d0c」
上:「d1a」
pooling_param {
プール:MAX
kernel_size:2
ストライド:2
}
}
レイヤー{
名前: "conv_d1a-b"
タイプ:「コンボリューション」
下:「d1a」
上:「d1b」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:128
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d1b"
タイプ:「ReLU」
下:「d1b」
上:「d1b」
}
レイヤー{
名前: "conv_d1b-c"
タイプ:「コンボリューション」
下:「d1b」
上:「d1c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:128
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d1c"
タイプ:「ReLU」
下:「d1c」
上:「d1c」
}
レイヤー{
名前:「pool_d1c-2a」
タイプ:「プーリング」
下:「d1c」
上:「d2a」
pooling_param {
プール:MAX
kernel_size:2
ストライド:2
}
}
レイヤー{
名前: "conv_d2a-b"
タイプ:「コンボリューション」
下:「d2a」
上:「d2b」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:256
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d2b"
タイプ:「ReLU」
下:「d2b」
上:「d2b」
}
レイヤー{
名前: "conv_d2b-c"
タイプ:「コンボリューション」
下:「d2b」
上:「d2c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:256
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d2c"
タイプ:「ReLU」
下:「d2c」
上:「d2c」
}
レイヤー{
名前:「pool_d2c-3a」
タイプ:「プーリング」
下:「d2c」
上:「d3a」
pooling_param {
プール:MAX
kernel_size:2
ストライド:2
}
}
レイヤー{
名前:「conv_d3a-b」
タイプ:「コンボリューション」
下:「d3a」
上:「d3b」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:512
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d3b"
タイプ:「ReLU」
下:「d3b」
上:「d3b」
}
レイヤー{
名前: "conv_d3b-c"
タイプ:「コンボリューション」
下:「d3b」
上:「d3c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:512
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d3c"
タイプ:「ReLU」
下:「d3c」
上:「d3c」
}

レイヤー{
名前:「pool_d3c-4a」
タイプ:「プーリング」
下:「d3c」
上:「d4a」
pooling_param {
プール:MAX
kernel_size:2
ストライド:2
}
}
レイヤー{
名前: "conv_d4a-b"
タイプ:「コンボリューション」
下:「d4a」
上:「d4b」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:1024
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前:「relu_d4b」
タイプ:「ReLU」
下:「d4b」
上:「d4b」
}
レイヤー{
名前: "conv_d4b-c"
タイプ:「コンボリューション」
下:「d4b」
上:「d4c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:1024
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前: "relu_d4c"
タイプ:「ReLU」
下:「d4c」
上:「d4c」
}

レイヤー{
名前: "upconv_d4c_u3a"
タイプ:「デコンボリューション」
下:「d4c」
上:「u3a」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:512
パッド:0
kernel_size:2
ストライド:2
weight_filler {
タイプ:「ザビエル」
}
}
}

レイヤー{
名前:「relu_u3a」
タイプ:「ReLU」
下:「u3a」
上:「u3a」
}
レイヤー{
名前:「crop_d3c-d3cc」
タイプ:「作物」
下:「d3c」
下:「u3a」
上:「d3cc」

}
レイヤー{
名前: "concat_d3cc_u3a-b"
タイプ:「Concat」
下:「u3a」
下:「d3cc」
上:「u3b」
}
レイヤー{
名前:「conv_u3b-c」
タイプ:「コンボリューション」
下:「u3b」
上:「u3c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:512
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前:「relu_u3c」
タイプ:「ReLU」
下:「u3c」
上:「u3c」
}
レイヤー{
名前:「conv_u3c-d」
タイプ:「コンボリューション」
下:「u3c」
上:「u3d」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:512
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u3d"
タイプ:「ReLU」
下:「u3d」
上:「u3d」
}
レイヤー{
名前:「upconv_u3d_u2a」
タイプ:「デコンボリューション」
下:「u3d」
上:「u2a」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:256
パッド:0
kernel_size:2
ストライド:2
weight_filler {
タイプ:「ザビエル」
}
}
}
レイヤー{
名前:「relu_u2a」
タイプ:「ReLU」
下:「u2a」
上:「u2a」
}
レイヤー{
名前:「crop_d2c-d2cc」
タイプ:「作物」
下:「d2c」
下:「u2a」
上:「d2cc」

}
レイヤー{
名前: "concat_d2cc_u2a-b"
タイプ:「Concat」
下:「u2a」
下:「d2cc」
上:「u2b」
}
レイヤー{
名前:「conv_u2b-c」
タイプ:「コンボリューション」
下:「u2b」
上:「u2c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:256
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前:「relu_u2c」
タイプ:「ReLU」
下:「u2c」
上:「u2c」
}
レイヤー{
名前:「conv_u2c-d」
タイプ:「コンボリューション」
下:「u2c」
上:「u2d」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:256
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u2d"
タイプ:「ReLU」
下:「u2d」
上:「u2d」
}
レイヤー{
名前:「upconv_u2d_u1a」
タイプ:「デコンボリューション」
下:「u2d」
上:「u1a」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:128
パッド:0
kernel_size:2
ストライド:2
weight_filler {
タイプ:「ザビエル」
}
}
}
レイヤー{
名前:「relu_u1a」
タイプ:「ReLU」
下:「u1a」
上:「u1a」
}
レイヤー{
名前:「crop_d1c-d1cc」
タイプ:「作物」
下:「d1c」
下:「u1a」
上:「d1cc」

}
レイヤー{
名前: "concat_d1cc_u1a-b"
タイプ:「Concat」
下:「u1a」
下:「d1cc」
上:「u1b」
}
レイヤー{
名前:「conv_u1b-c」
タイプ:「コンボリューション」
下:「u1b」
上:「u1c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:128
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u1c"
タイプ:「ReLU」
下:「u1c」
上:「u1c」
}
レイヤー{
名前: "conv_u1c-d"
タイプ:「コンボリューション」
下:「u1c」
上:「u1d」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:128
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u1d"
タイプ:「ReLU」
下:「u1d」
上:「u1d」
}
レイヤー{
名前: "upconv_u1d_u0a_NEW"
タイプ:「デコンボリューション」
下:「u1d」
上:「u0a」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:64
パッド:0
kernel_size:2
ストライド:2
weight_filler {
タイプ:「ザビエル」
}
}
}
レイヤー{
名前:「relu_u0a」
タイプ:「ReLU」
下:「u0a」
上:「u0a」
}
レイヤー{
名前:「crop_d0c-d0cc」
タイプ:「作物」
下:「d0c」
下:「u0a」
上:「d0cc」

}
レイヤー{
名前: "concat_d0cc_u0a-b"
タイプ:「Concat」
下:「u0a」
下:「d0cc」
上:「u0b」
}
レイヤー{
名前: "conv_u0b-c_New"
タイプ:「コンボリューション」
下:「u0b」
上:「u0c」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:64
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u0c"
タイプ:「ReLU」
下:「u0c」
上:「u0c」
}
レイヤー{
名前: "conv_u0c-d_New"
タイプ:「コンボリューション」
下:「u0c」
上:「u0d」
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:64
パッド:0
kernel_size:3
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}
レイヤー{
名前: "relu_u0d"
タイプ:「ReLU」
下:「u0d」
上:「u0d」
}
レイヤー{
名前: "conv_u0d-score_New"
タイプ:「コンボリューション」
下:「u0d」
トップスコア"
param {
lr_mult:1
Decay_mult:1
}
param {
lr_mult:2
Decay_mult:0
}
convolution_param {
num_output:2
パッド:0
kernel_size:1
weight_filler {
タイプ:「ザビエル」
}
エンジン:CAFFE
}
}

レイヤー{
名前:「prob」
タイプ:「Softmax」
下:「スコア」
上:「prob」
}

素晴らしい仕事@manutdzou
ご協力ありがとうございました。 このレポであなたの仕事をコミットしていただけませんか?
コードをノートブックとして、prototxtとbaiduへのリンクをテキストファイルとして投稿するフォルダーmodel-zoo / manutdzouを作成できますか? 他のユーザーは間違いなく感謝します。 あなたの仕事についての論文があれば、これを追加することもできます。

さて、私のコードとモデルがうまく機能すれば、このリポジトリにコミットできてうれしいです!

‰自連続易邮箱大师
2017年7月7日17:33に、パトリック・キリストは次のように書いています。

素晴らしい仕事@manutdzou
ご協力ありがとうございました。 このレポであなたの仕事をコミットしていただけませんか?
コードをノートブックとして、prototxtとbaiduへのリンクをテキストファイルとして投稿するフォルダーmodel-zoo / manutdzouを作成できますか? 他のユーザーは間違いなく感謝します。 あなたの仕事についての論文があれば、これを追加することもできます。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信するか、GitHubで表示するか、スレッドをミュートしてください。

このページは役に立ちましたか?
0 / 5 - 0 評価